public VoiceListener() { _thread = new Thread(() => { while (!_stopped) { uint size; try { while (SteamUser.GetAvailableVoice(out size) == EVoiceResult.k_EVoiceResultOK && size > 1024) { byte[] buffer = new byte[size]; uint bytesWritten; if (SteamUser.GetVoice(true, buffer, size, out bytesWritten) == EVoiceResult.k_EVoiceResultOK && bytesWritten > 0) { Data.Steam.SteamAPI.SendVoip(new VoipPacket(buffer)); } } } catch (Exception e) { Logger.Error(e); } } }); _thread.Start(); }
public override VoicePacketInfo GetMicData(byte[] buffer, int bufferOffset, int dataCount, out int effectiveDataCount) { effectiveDataCount = 0; if (!IsEnabled) { return(VoicePacketInfo.InvalidPacket); } uint n; EVoiceResult eR = SteamUser.GetAvailableVoice(out n); effectiveDataCount = (int)n; isRecording = eR != EVoiceResult.k_EVoiceResultNotRecording; if (eR == EVoiceResult.k_EVoiceResultOK) { eR = SteamUser.GetVoice(true, buffer, (uint)Mathf.Min(effectiveDataCount, buffer.Length - bufferOffset, dataCount), out n); effectiveDataCount = (int)n; return(new VoicePacketInfo(Frequency, Channels, AudioDataTypeFlag.Int16, true)); } else { effectiveDataCount = 0; return(VoicePacketInfo.InvalidPacket); } }
protected override void Update() { try { if (!IsLocal) { return; } if (GetComponentInParent <FirstPersonCharacter>() && WalkieTalkie.gameObject.activeInHierarchy) { if (recording) { uint nBytesWritten; uint nUncompressBytesWritten; if (SteamUser.GetVoice(true, vc_cmp, 65536U, out nBytesWritten, false, null, 0U, out nUncompressBytesWritten, 0U) != EVoiceResult.k_EVoiceResultOK || nBytesWritten <= 0U) { return; } if (BoltNetwork.isServer) { ForwardVoiceData(vc_cmp, (int)nBytesWritten); } else { try { SendVoiceData(vc_cmp, (int)nBytesWritten, BoltNetwork.server); } catch (Exception e) { Logger.Exception("SendVoiceData failed!", e); base.SendVoiceData(vc_cmp, (int)nBytesWritten, BoltNetwork.server); } } } else { SteamUser.StartVoiceRecording(); SteamFriends.SetInGameVoiceSpeaking(SteamUser.GetSteamID(), true); recording = true; } } else { if (!recording) { return; } recording = false; SteamFriends.SetInGameVoiceSpeaking(SteamUser.GetSteamID(), false); SteamUser.StopVoiceRecording(); } } catch (Exception e) { Logger.Exception("Failed to update CoopVoice", e); } }
public bool GetAvailableVoice(out byte[] bufferCompressed, out byte[] bufferUncompressed) { bufferCompressed = null; bufferUncompressed = null; if (!SteamService.IsInitialized) { return(false); } if (!Recording) { return(false); } uint bytesAvailableCompressed = 0; uint bytesAvailableUncompressed = 0; // find out if there's any recorded data EVoiceResult result = SteamUser.GetAvailableVoice(out bytesAvailableCompressed, out bytesAvailableUncompressed, 0); if (result == EVoiceResult.k_EVoiceResultNotRecording) { Recording = false; return(false); } // if there's recorded data if (result == EVoiceResult.k_EVoiceResultOK && bytesAvailableCompressed > 0) { // retrieve recorded data uint bytesWrittenCompressed = 0; uint bytesWrittenUncompressed = 0; // we only care about the compressed data because that's what we'll network across result = SteamUser.GetVoice(true, _voiceBufferCompressed, (uint)_voiceBufferCompressed.Length, out bytesWrittenCompressed, false, null, 0, out bytesWrittenUncompressed, 0); // did we get it successfully? if (result == EVoiceResult.k_EVoiceResultOK && bytesWrittenCompressed > 0) { result = SteamUser.DecompressVoice(_voiceBufferCompressed, bytesWrittenCompressed, _voiceBufferUncompressed, (uint)_voiceBufferUncompressed.Length, out bytesWrittenUncompressed, (uint)11025); // was the decompress OK? if (result == EVoiceResult.k_EVoiceResultOK && bytesWrittenUncompressed > 0) { bufferCompressed = _voiceBufferCompressed.Take((int)bytesWrittenCompressed).ToArray(); bufferUncompressed = _voiceBufferUncompressed.Take((int)bytesWrittenUncompressed).ToArray(); return(true); } } } return(false); }
void RecordingFunc() { var buf = new byte[20000]; var toSend = new byte[20000]; int counter = 0; while (true) { if (Program.CloseOnNext) { return; } talkWaiter.WaitOne(recordingIntervalMs); if (!isRecording) { counter = 0; continue; } counter++; uint cbs; uint ubs; uint sendLength; if (SteamAPI.IsSteamRunning() && SteamUser.GetVoice(true, buf, (uint)buf.Length, out cbs) == EVoiceResult.k_EVoiceResultOK) { lastPacket[mySteamID.m_SteamID] = DateTime.Now; Array.Copy(buf, 0, toSend, 1, cbs); sendLength = cbs + 1; toSend[0] = counter == 1 ? (byte)ControlByteFlags.IsFirst : (byte)0; if (testLoopback) { var data = new byte[sendLength]; Array.Copy(toSend, data, sendLength); loopbackBufs.Enqueue(data); } else { foreach (var t in targetSteamIDs) { SteamNetworking.SendP2PPacket(t.Key, toSend, sendLength, EP2PSend.k_EP2PSendUnreliable); } } } } }
private void Update() { if (this.IsLocal) { if (base.GetComponentInParent <BoltEntity>().IsOwner() && this.WalkieTalkie.gameObject.activeInHierarchy) { if (this.recording) { uint num; uint num2; if (SteamUser.GetVoice(true, this.vc_cmp, 65536u, out num, false, null, 0u, out num2, 0u) == EVoiceResult.k_EVoiceResultOK && num > 0u) { BoltEntity component = base.GetComponent <BoltEntity>(); if (component && component.isAttached) { if (BoltNetwork.isServer) { this.ForwardVoiceData(this.vc_cmp, (int)num); } else { this.SendVoiceData(this.vc_cmp, (int)num, BoltNetwork.server); } } } } else { SteamUser.StartVoiceRecording(); SteamFriends.SetInGameVoiceSpeaking(SteamUser.GetSteamID(), true); this.recording = true; } } else if (this.recording) { this.recording = false; SteamFriends.SetInGameVoiceSpeaking(SteamUser.GetSteamID(), false); SteamUser.StopVoiceRecording(); } } }
void Update() { uint size; try { while (SteamUser.GetAvailableVoice(out size) == EVoiceResult.k_EVoiceResultOK && size > 1024) { byte[] buffer = new byte[size]; uint bytesWritten; if (SteamUser.GetVoice(true, buffer, size, out bytesWritten) == EVoiceResult.k_EVoiceResultOK && bytesWritten > 0) { Controllers.PlayerController.Instance._playerInfo.voip = buffer; } } } catch (Exception e) { Logger.Error(e); } }
private void Update() { var nSample = sampleRateMethod == SampleRateMethod.Optimal ? (int)SteamUser.GetVoiceOptimalSampleRate() : sampleRateMethod == SampleRateMethod.Native ? AudioSettings.outputSampleRate : (int)customSampleRate; if (nSample != sampleRate) { sampleRate = nSample; OutputSource.Stop(); if (OutputSource.clip != null) { Destroy(OutputSource.clip); } if (useAudioStreaming) { OutputSource.clip = AudioClip.Create("VOICE", sampleRate * 2, 1, (int)sampleRate, true, OnAudioRead); OutputSource.Play(); } else { OutputSource.clip = AudioClip.Create("VOICE", sampleRate * 2, 1, (int)sampleRate, false); } } if (!useAudioStreaming && OutputSource.loop) { OutputSource.loop = false; OutputSource.clip = AudioClip.Create("VOICE", sampleRate * 2, 1, (int)sampleRate, false); } else if (useAudioStreaming && !OutputSource.loop) { OutputSource.loop = true; OutputSource.clip = AudioClip.Create("VOICE", sampleRate * 2, 1, (int)sampleRate, true, OnAudioRead); OutputSource.Play(); } if (!useAudioStreaming && clipBuffer.Count > 0 && !OutputSource.isPlaying) { OutputSource.clip = clipBuffer.Dequeue(); OutputSource.Play(); } packetCounter -= Time.unscaledDeltaTime; if (packetCounter <= 0) { packetCounter = bufferLength; if (isRecording) { var result = SteamUser.GetAvailableVoice(out uint pcbCompressed); switch (result) { case EVoiceResult.k_EVoiceResultOK: //All is well check the compressed size to see if we have data and if so package it byte[] buffer = new byte[pcbCompressed]; SteamUser.GetVoice(true, buffer, pcbCompressed, out uint bytesWriten); if (bytesWriten > 0) { VoiceStream.Invoke(buffer); } break; case EVoiceResult.k_EVoiceResultNoData: //No data so do nothing break; case EVoiceResult.k_EVoiceResultNotInitialized: //Not initalized ... report the error Debug.LogError("The Steam Voice systemis not initalized and will be stoped."); SteamUser.StopVoiceRecording(); break; case EVoiceResult.k_EVoiceResultNotRecording: //We are not recording but think we are SteamUser.StartVoiceRecording(); break; case EVoiceResult.k_EVoiceResultRestricted: //User is chat restricted ... report this out and turn off recording. StopedOnChatRestricted.Invoke(); SteamUser.StopVoiceRecording(); break; } } } }
public void RenderOnGUI() { GUILayout.BeginArea(new Rect(Screen.width - 200, 0, 200, Screen.height)); GUILayout.Label("Variables:"); GUILayout.Label("m_Ticket: " + m_Ticket); GUILayout.Label("m_pcbTicket: " + m_pcbTicket); GUILayout.Label("m_HAuthTicket: " + m_HAuthTicket); GUILayout.Label("m_VoiceLoopback: " + m_VoiceLoopback); GUILayout.EndArea(); GUILayout.BeginVertical("box"); m_ScrollPos = GUILayout.BeginScrollView(m_ScrollPos, GUILayout.Width(Screen.width - 215), GUILayout.Height(Screen.height - 33)); GUILayout.Label("GetHSteamUser() : " + SteamUser.GetHSteamUser()); GUILayout.Label("BLoggedOn() : " + SteamUser.BLoggedOn()); GUILayout.Label("GetSteamID() : " + SteamUser.GetSteamID()); //SteamUser.InitiateGameConnection() // N/A - Too Hard to test like this. //SteamUser.TerminateGameConnection() // ^ //SteamUser.TrackAppUsageEvent() // Legacy function with no documentation { string Buffer; bool ret = SteamUser.GetUserDataFolder(out Buffer, 260); GUILayout.Label("GetUserDataFolder(out Buffer, 260) : " + ret + " -- " + Buffer); } if (GUILayout.Button("StartVoiceRecording()")) { SteamUser.StartVoiceRecording(); print("SteamUser.StartVoiceRecording()"); } if (GUILayout.Button("StopVoiceRecording()")) { SteamUser.StopVoiceRecording(); print("SteamUser.StopVoiceRecording()"); } { uint Compressed; EVoiceResult ret = SteamUser.GetAvailableVoice(out Compressed); GUILayout.Label("GetAvailableVoice(out Compressed) : " + ret + " -- " + Compressed); if (ret == EVoiceResult.k_EVoiceResultOK && Compressed > 0) { byte[] DestBuffer = new byte[1024]; uint BytesWritten; ret = SteamUser.GetVoice(true, DestBuffer, 1024, out BytesWritten); //print("SteamUser.GetVoice(true, DestBuffer, 1024, out BytesWritten) : " + ret + " -- " + BytesWritten); if (ret == EVoiceResult.k_EVoiceResultOK && BytesWritten > 0) { byte[] DestBuffer2 = new byte[11025 * 2]; uint BytesWritten2; ret = SteamUser.DecompressVoice(DestBuffer, BytesWritten, DestBuffer2, (uint)DestBuffer2.Length, out BytesWritten2, 11025); //print("SteamUser.DecompressVoice(DestBuffer, BytesWritten, DestBuffer2, (uint)DestBuffer2.Length, out BytesWritten2, 11025) - " + ret + " -- " + BytesWritten2); if (ret == EVoiceResult.k_EVoiceResultOK && BytesWritten2 > 0) { AudioSource source; if (!m_VoiceLoopback) { m_VoiceLoopback = new GameObject("Voice Loopback"); source = m_VoiceLoopback.AddComponent <AudioSource>(); source.clip = AudioClip.Create("Testing!", 11025, 1, 11025, false); } else { source = m_VoiceLoopback.GetComponent <AudioSource>(); } float[] test = new float[11025]; for (int i = 0; i < test.Length; ++i) { test[i] = (short)(DestBuffer2[i * 2] | DestBuffer2[i * 2 + 1] << 8) / 32768.0f; } source.clip.SetData(test, 0); source.Play(); } } } } GUILayout.Label("GetVoiceOptimalSampleRate() : " + SteamUser.GetVoiceOptimalSampleRate()); { if (GUILayout.Button("GetAuthSessionTicket(Ticket, 1024, out pcbTicket)")) { m_Ticket = new byte[1024]; m_HAuthTicket = SteamUser.GetAuthSessionTicket(m_Ticket, 1024, out m_pcbTicket); print("SteamUser.GetAuthSessionTicket(Ticket, 1024, out pcbTicket) - " + m_HAuthTicket + " -- " + m_pcbTicket); } if (GUILayout.Button("BeginAuthSession(m_Ticket, (int)m_pcbTicket, SteamUser.GetSteamID())")) { if (m_HAuthTicket != HAuthTicket.Invalid && m_pcbTicket != 0) { EBeginAuthSessionResult ret = SteamUser.BeginAuthSession(m_Ticket, (int)m_pcbTicket, SteamUser.GetSteamID()); print("SteamUser.BeginAuthSession(m_Ticket, " + (int)m_pcbTicket + ", " + SteamUser.GetSteamID() + ") - " + ret); } else { print("Call GetAuthSessionTicket first!"); } } } if (GUILayout.Button("EndAuthSession(SteamUser.GetSteamID())")) { SteamUser.EndAuthSession(SteamUser.GetSteamID()); print("SteamUser.EndAuthSession(" + SteamUser.GetSteamID() + ")"); } if (GUILayout.Button("CancelAuthTicket(m_HAuthTicket)")) { SteamUser.CancelAuthTicket(m_HAuthTicket); print("SteamUser.CancelAuthTicket(" + m_HAuthTicket + ")"); } GUILayout.Label("UserHasLicenseForApp(SteamUser.GetSteamID(), SteamUtils.GetAppID()) : " + SteamUser.UserHasLicenseForApp(SteamUser.GetSteamID(), SteamUtils.GetAppID())); GUILayout.Label("BIsBehindNAT() : " + SteamUser.BIsBehindNAT()); if (GUILayout.Button("AdvertiseGame(CSteamID.NonSteamGS, TestConstants.k_IpAdress127_0_0_1, TestConstants.k_Port27015)")) { SteamUser.AdvertiseGame(CSteamID.NonSteamGS, TestConstants.k_IpAdress127_0_0_1, TestConstants.k_Port27015); print("SteamUser.AdvertiseGame(" + CSteamID.NonSteamGS + ", " + TestConstants.k_IpAdress127_0_0_1 + ", " + TestConstants.k_Port27015 + ")"); } if (GUILayout.Button("RequestEncryptedAppTicket(k_unSecretData, sizeof(uint))")) { byte[] k_unSecretData = System.BitConverter.GetBytes(0x5444); SteamAPICall_t handle = SteamUser.RequestEncryptedAppTicket(k_unSecretData, sizeof(uint)); OnEncryptedAppTicketResponseCallResult.Set(handle); print("SteamUser.RequestEncryptedAppTicket(" + k_unSecretData + ", " + sizeof(uint) + ") : " + handle); } if (GUILayout.Button("GetEncryptedAppTicket(rgubTicket, 1024, out cubTicket)")) { byte[] rgubTicket = new byte[1024]; uint cubTicket; bool ret = SteamUser.GetEncryptedAppTicket(rgubTicket, 1024, out cubTicket); print("SteamUser.GetEncryptedAppTicket(" + rgubTicket + ", " + 1024 + ", " + "out cubTicket" + ") : " + ret + " -- " + cubTicket); } // SpaceWar does not have trading cards, so this function will only ever return 0 and produce an annoying warning. if (GUILayout.Button("GetGameBadgeLevel(1, false)")) { int ret = SteamUser.GetGameBadgeLevel(1, false); print("SteamUser.GetGameBadgeLevel(" + 1 + ", " + false + ") : " + ret); } GUILayout.Label("GetPlayerSteamLevel() : " + SteamUser.GetPlayerSteamLevel()); if (GUILayout.Button("RequestStoreAuthURL(\"https://steampowered.com\")")) { SteamAPICall_t handle = SteamUser.RequestStoreAuthURL("https://steampowered.com"); OnStoreAuthURLResponseCallResult.Set(handle); print("SteamUser.RequestStoreAuthURL(" + "\"https://steampowered.com\"" + ") : " + handle); } GUILayout.Label("BIsPhoneVerified() : " + SteamUser.BIsPhoneVerified()); GUILayout.Label("BIsTwoFactorEnabled() : " + SteamUser.BIsTwoFactorEnabled()); GUILayout.Label("BIsPhoneIdentifying() : " + SteamUser.BIsPhoneIdentifying()); GUILayout.Label("BIsPhoneRequiringVerification() : " + SteamUser.BIsPhoneRequiringVerification()); if (GUILayout.Button("GetMarketEligibility()")) { SteamAPICall_t handle = SteamUser.GetMarketEligibility(); OnMarketEligibilityResponseCallResult.Set(handle); print("SteamUser.GetMarketEligibility() : " + handle); } GUILayout.EndScrollView(); GUILayout.EndVertical(); }
public void RenderOnGUI() { GUILayout.BeginArea(new Rect(Screen.width - 200, 0, 200, Screen.height)); GUILayout.Label("m_HAuthTicket: " + m_HAuthTicket); GUILayout.Label("m_pcbTicket: " + m_pcbTicket); GUILayout.EndArea(); GUILayout.Label("GetHSteamUser() : " + SteamUser.GetHSteamUser()); GUILayout.Label("BLoggedOn() : " + SteamUser.BLoggedOn()); GUILayout.Label("GetSteamID() : " + SteamUser.GetSteamID()); //GUILayout.Label("InitiateGameConnection() : " + SteamUser.InitiateGameConnection()); // N/A - Too Hard to test like this. //GUILayout.Label("TerminateGameConnection() : " + SteamUser.TerminateGameConnection()); // ^ //GUILayout.Label("TrackAppUsageEvent() : " + SteamUser.TrackAppUsageEvent()); // Legacy function with no documentation { string Buffer; bool ret = SteamUser.GetUserDataFolder(out Buffer, 260); GUILayout.Label("GetUserDataFolder(out Buffer, 260) : " + ret + " -- " + Buffer); } if (GUILayout.Button("StartVoiceRecording()")) { SteamUser.StartVoiceRecording(); print("SteamUser.StartVoiceRecording()"); } if (GUILayout.Button("StopVoiceRecording()")) { SteamUser.StopVoiceRecording(); print("SteamUser.StopVoiceRecording()"); } { uint Compressed; uint Uncompressed; EVoiceResult ret = SteamUser.GetAvailableVoice(out Compressed, out Uncompressed, 11025); GUILayout.Label("GetAvailableVoice(out Compressed, out Uncompressed, 11025) : " + ret + " -- " + Compressed + " -- " + Uncompressed); if (ret == EVoiceResult.k_EVoiceResultOK && Compressed > 0) { byte[] DestBuffer = new byte[1024]; byte[] UncompressedDestBuffer = new byte[1024]; uint BytesWritten; uint UncompressedBytesWritten; ret = SteamUser.GetVoice(true, DestBuffer, 1024, out BytesWritten, true, UncompressedDestBuffer, (uint)DestBuffer.Length, out UncompressedBytesWritten, 11025); //print("SteamUser.GetVoice(true, DestBuffer, 1024, out BytesWritten, true, UncompressedDestBuffer, (uint)DestBuffer.Length, out UncompressedBytesWritten, 11025) : " + ret + " -- " + BytesWritten + " -- " + UncompressedBytesWritten); if (ret == EVoiceResult.k_EVoiceResultOK && BytesWritten > 0) { byte[] DestBuffer2 = new byte[11025 * 2]; uint BytesWritten2; ret = SteamUser.DecompressVoice(DestBuffer, BytesWritten, DestBuffer2, (uint)DestBuffer2.Length, out BytesWritten2, 11025); //print("SteamUser.DecompressVoice(DestBuffer, BytesWritten, DestBuffer2, (uint)DestBuffer2.Length, out BytesWritten2, 11025) - " + ret + " -- " + BytesWritten2); if (ret == EVoiceResult.k_EVoiceResultOK && BytesWritten2 > 0) { AudioSource source; if (!m_VoiceLoopback) { m_VoiceLoopback = new GameObject("Voice Loopback"); source = m_VoiceLoopback.AddComponent <AudioSource>(); source.clip = AudioClip.Create("Testing!", 11025, 1, 11025, false, false); } else { source = m_VoiceLoopback.GetComponent <AudioSource>(); } float[] test = new float[11025]; for (int i = 0; i < test.Length; ++i) { test[i] = (short)(DestBuffer2[i * 2] | DestBuffer2[i * 2 + 1] << 8) / 32768.0f; } source.clip.SetData(test, 0); source.Play(); } } } } GUILayout.Label("GetVoiceOptimalSampleRate() : " + SteamUser.GetVoiceOptimalSampleRate()); { if (GUILayout.Button("GetAuthSessionTicket(Ticket, 1024, out pcbTicket)")) { m_Ticket = new byte[1024]; m_HAuthTicket = SteamUser.GetAuthSessionTicket(m_Ticket, 1024, out m_pcbTicket); print("SteamUser.GetAuthSessionTicket(Ticket, 1024, out pcbTicket) - " + m_HAuthTicket + " -- " + m_pcbTicket); } if (GUILayout.Button("BeginAuthSession(m_Ticket, (int)m_pcbTicket, SteamUser.GetSteamID())")) { if (m_HAuthTicket != HAuthTicket.Invalid && m_pcbTicket != 0) { EBeginAuthSessionResult ret = SteamUser.BeginAuthSession(m_Ticket, (int)m_pcbTicket, SteamUser.GetSteamID()); print("SteamUser.BeginAuthSession(m_Ticket, " + (int)m_pcbTicket + ", " + SteamUser.GetSteamID() + ") - " + ret); } else { print("Call GetAuthSessionTicket first!"); } } } if (GUILayout.Button("EndAuthSession(SteamUser.GetSteamID())")) { SteamUser.EndAuthSession(SteamUser.GetSteamID()); print("SteamUser.EndAuthSession(" + SteamUser.GetSteamID() + ")"); } if (GUILayout.Button("CancelAuthTicket(m_HAuthTicket)")) { SteamUser.CancelAuthTicket(m_HAuthTicket); print("SteamUser.CancelAuthTicket(" + m_HAuthTicket + ")"); } GUILayout.Label("UserHasLicenseForApp(SteamUser.GetSteamID(), SteamUtils.GetAppID()) : " + SteamUser.UserHasLicenseForApp(SteamUser.GetSteamID(), SteamUtils.GetAppID())); GUILayout.Label("BIsBehindNAT() : " + SteamUser.BIsBehindNAT()); if (GUILayout.Button("AdvertiseGame(2, 127.0.0.1, 27015)")) { SteamUser.AdvertiseGame(CSteamID.NonSteamGS, 2130706433, 27015); print("SteamUser.AdvertiseGame(2, 2130706433, 27015)"); } if (GUILayout.Button("RequestEncryptedAppTicket()")) { byte[] k_unSecretData = System.BitConverter.GetBytes(0x5444); SteamAPICall_t handle = SteamUser.RequestEncryptedAppTicket(k_unSecretData, sizeof(uint)); OnEncryptedAppTicketResponseCallResult.Set(handle); print("SteamUser.RequestEncryptedAppTicket(k_unSecretData, " + sizeof(uint) + ") - " + handle); } if (GUILayout.Button("GetEncryptedAppTicket()")) { byte[] rgubTicket = new byte[1024]; uint cubTicket; bool ret = SteamUser.GetEncryptedAppTicket(rgubTicket, 1024, out cubTicket); print("SteamUser.GetEncryptedAppTicket() - " + ret + " -- " + cubTicket); } //GUILayout.Label("GetGameBadgeLevel(1, false) : " + SteamUser.GetGameBadgeLevel(1, false)); // SpaceWar does not have trading cards, so this function will only ever return 0 and produce an annoying warning. GUILayout.Label("GetPlayerSteamLevel() : " + SteamUser.GetPlayerSteamLevel()); if (GUILayout.Button("RequestStoreAuthURL(\"https://steampowered.com\")")) { SteamAPICall_t handle = SteamUser.RequestStoreAuthURL("https://steampowered.com"); OnStoreAuthURLResponseCallResult.Set(handle); print("SteamUser.RequestStoreAuthURL(\"https://steampowered.com\") - " + handle); } #if _PS3 //GUILayout.Label("LogOn() : " + SteamUser.LogOn()); //GUILayout.Label("LogOnAndLinkSteamAccountToPSN : " + SteamUser.LogOnAndLinkSteamAccountToPSN()); //GUILayout.Label("LogOnAndCreateNewSteamAccountIfNeeded : " + SteamUser.LogOnAndCreateNewSteamAccountIfNeeded()); //GUILayout.Label("GetConsoleSteamID : " + SteamUser.GetConsoleSteamID()); #endif }
private void Update() { if (base.channel.isOwner) { if (OptionsSettings.chatVoiceOut && Input.GetKey(ControlsSettings.voice) && !base.player.life.isDead) { if (!this.isTalking) { this.isTalking = true; this.wasRecording = true; this.lastTalk = Time.realtimeSinceStartup; if (this.hasWalkieTalkie) { this.audioSource.PlayOneShot(Resources.Load <AudioClip>("Sounds/General/Radio"), 0.75f); } SteamUser.StartVoiceRecording(); SteamFriends.SetInGameVoiceSpeaking(Provider.user, this.isTalking); if (this.onTalked != null) { this.onTalked(this.isTalking); } } } else if ((!OptionsSettings.chatVoiceOut || !Input.GetKey(ControlsSettings.voice) || base.player.life.isDead) && this.isTalking) { this.isTalking = false; if (this.hasWalkieTalkie) { this.audioSource.PlayOneShot(Resources.Load <AudioClip>("Sounds/General/Radio"), 0.75f); } SteamUser.StopVoiceRecording(); SteamFriends.SetInGameVoiceSpeaking(Provider.user, this.isTalking); if (this.onTalked != null) { this.onTalked(this.isTalking); } } if (this.wasRecording && (double)(Time.realtimeSinceStartup - this.lastTalk) > 0.1) { this.wasRecording = this.isTalking; this.lastTalk = Time.realtimeSinceStartup; uint num; uint num2; if (SteamUser.GetAvailableVoice(ref num, ref num2, 0u) == null && num > 0u) { SteamUser.GetVoice(true, this.bufferSend, num, ref num, false, null, num2, ref num2, PlayerVoice.FREQUENCY); if (num > 0u) { for (int i = (int)(num + 4u); i > 4; i--) { this.bufferSend[i] = this.bufferSend[i - 5]; } this.bufferSend[4] = ((!this.hasWalkieTalkie) ? 0 : 1); if (this.hasWalkieTalkie) { int call = base.channel.getCall("tellVoice"); int size; byte[] packet; base.channel.getPacketVoice(ESteamPacket.UPDATE_VOICE, call, out size, out packet, this.bufferSend, (int)num); for (int j = 0; j < Provider.clients.Count; j++) { if (Provider.clients[j].playerID.steamID != Provider.client && Provider.clients[j].player != null && Provider.clients[j].player.voice.canHearRadio && Provider.clients[j].player.quests.radioFrequency == base.player.quests.radioFrequency) { Provider.send(Provider.clients[j].playerID.steamID, ESteamPacket.UPDATE_VOICE, packet, size, base.channel.id); } } } else { base.channel.sendVoice("tellVoice", ESteamCall.PEERS, base.transform.position, EffectManager.MEDIUM, ESteamPacket.UPDATE_VOICE, this.bufferSend, (int)num); } } } } } else if (!Provider.isServer) { if (this.usingWalkieTalkie) { this.audioSource.spatialBlend = 0f; } else { this.audioSource.spatialBlend = 1f; } if (this.isPlaying) { if (this.lastPlay > this.audioSource.time) { this.played += this.audioSource.clip.length; } this.lastPlay = this.audioSource.time; if (this.played + this.audioSource.time >= this.playback) { this.isPlaying = false; this.audioSource.Stop(); if (this.usingWalkieTalkie) { this.audioSource.PlayOneShot(Resources.Load <AudioClip>("Sounds/General/Radio"), 0.75f); } this.audioSource.time = 0f; this.write = 0; this.playback = 0f; this.played = 0f; this.lastPlay = 0f; this.needsPlay = false; this.isTalking = false; if (this.onTalked != null) { this.onTalked(this.isTalking); } } } else if (this.needsPlay) { this.delayPlay -= Time.deltaTime; if (this.delayPlay <= 0f) { this.isPlaying = true; this.audioSource.Play(); if (this.usingWalkieTalkie) { this.audioSource.PlayOneShot(Resources.Load <AudioClip>("Sounds/General/Radio"), 0.75f); } this.isTalking = true; if (this.onTalked != null) { this.onTalked(this.isTalking); } } } } }