private void OnInitialize([FromSource] Player player) { if (!this.Configuration.VoiceEnabled) { return; } VoiceClient voiceClient; lock (this._voiceClients) { voiceClient = new VoiceClient(player, this.GetTeamSpeakName(player), this.Configuration.VoiceRanges[1], true); if (this._voiceClients.ContainsKey(player)) { this._voiceClients[player] = voiceClient; } else { this._voiceClients.Add(player, voiceClient); } } player.TriggerEvent(Event.SaltyChat_Initialize, voiceClient.TeamSpeakName, voiceClient.VoiceRange, this.RadioTowers); }
internal void Send(VoiceClient voiceClient, bool isSending) { if (!this.TryGetMember(voiceClient, out RadioChannelMember radioChannelMember)) { return; } bool stateChanged = radioChannelMember.IsSending != isSending; radioChannelMember.IsSending = isSending; RadioChannelMember[] channelMembers = this.Members; RadioChannelMember[] onSpeaker = channelMembers.Where(m => m.VoiceClient.RadioSpeaker && m.VoiceClient != voiceClient).ToArray(); if (onSpeaker.Length > 0) { string[] channelMemberNames = onSpeaker.Select(m => m.VoiceClient.TeamSpeakName).ToArray(); foreach (VoiceClient remoteClient in VoiceManager.VoiceClients) { remoteClient.Player.TriggerEvent(Event.SaltyChat_IsSendingRelayed, voiceClient.Player.Handle, isSending, stateChanged, this.IsMember(remoteClient), channelMemberNames); } } else { foreach (RadioChannelMember member in channelMembers) { member.VoiceClient.Player.TriggerEvent(Event.SaltyChat_IsSending, voiceClient.Player.Handle, isSending, stateChanged); } } }
public void OnPlayerConnected(IPlayer client) { VoiceClient voiceClient; lock (this._voiceClients) { if (this._voiceClients.ContainsKey(client)) { this._voiceClients.Remove(client); } voiceClient = new VoiceClient(client, this.GetTeamSpeakName(), SaltyShared.SharedData.VoiceRanges[1]); this._voiceClients.Add(client, voiceClient); client.Emit("hud:SetKeyValue", "voice", voiceClient.VoiceRange); client.Emit("client::updateVoiceRange", voiceClient.VoiceRange); client.Emit(SaltyShared.Event.SaltyChat_Initialize, voiceClient.TeamSpeakName, this.ServerUniqueIdentifier, this.SoundPack, this.IngameChannel, this.IngameChannelPassword, this.SwissChannels, this.RadioTowers); foreach (VoiceClient cl in this.VoiceClients) { client.Emit(SaltyShared.Event.SaltyChat_UpdateClient, cl.Player.Id, cl.TeamSpeakName, cl.VoiceRange); cl.Player.Emit(SaltyShared.Event.SaltyChat_UpdateClient, voiceClient.Player.Id, voiceClient.TeamSpeakName, voiceClient.VoiceRange); } } }
public void LeavePhoneCall(VoiceClient voiceClient, string identifier) { PhoneCall phoneCall = this.GetPhoneCall(identifier, false); if (phoneCall != null) { this.LeavePhoneCall(voiceClient, phoneCall); } }
public void OnPlayerConnected(GTANetworkAPI.Client client) { VoiceClient voiceClient = new VoiceClient(client, VoiceManager.GetTeamSpeakName(), SaltyShared.SharedData.VoiceRanges[1]); lock (VoiceManager._voiceClients) { VoiceManager._voiceClients.Add(client, voiceClient); } client.TriggerEvent(SaltyShared.Event.SaltyChat_Initialize, VoiceManager.ServerUniqueIdentifier, VoiceManager.RequiredUpdateBranch, VoiceManager.MinimumPluginVersion, VoiceManager.SoundPack, VoiceManager.IngameChannel, VoiceManager.IngameChannelPassword, voiceClient.TeamSpeakName); }
public void AddMember(VoiceClient voiceClient) { List <PhoneCallMember> callMembers = this.Members.ToList(); PhoneCallMember callMember = new PhoneCallMember(this, voiceClient); if (callMembers.Any(m => m.VoiceClient == voiceClient)) { return; } lock (this._members) { this._members.Add(callMember); } callMembers.Add(callMember); if (callMembers.Count == 1) { return; } string handle = voiceClient.Player.Handle; string tsName = voiceClient.TeamSpeakName; Vector3 position = voiceClient.Player.GetPosition(); string[] relays = callMembers.Where(m => m.IsSpeakerEnabled).Select(m => m.VoiceClient.TeamSpeakName).ToArray(); foreach (PhoneCallMember member in callMembers.Where(m => m.VoiceClient != voiceClient)) { voiceClient.TriggerEvent(Event.SaltyChat_EstablishCall, member.VoiceClient.Player.Handle, member.VoiceClient.TeamSpeakName, member.VoiceClient.Player.GetPosition()); if (relays.Length == 0) { member.VoiceClient.TriggerEvent(Event.SaltyChat_EstablishCall, handle, tsName, position); } } if (relays.Length > 0) { foreach (VoiceClient client in VoiceManager.Instance.VoiceClients) { client.TriggerEvent( Event.SaltyChat_EstablishCallRelayed, handle, tsName, position, callMembers.Any(m => m.VoiceClient == client), relays ); } } }
public void LeaveRadioChannel(VoiceClient voiceClient, RadioChannel radioChannel) { radioChannel.RemoveMember(voiceClient); if (radioChannel.Members.Length == 0) { lock (this._radioChannels) { this._radioChannels.Remove(radioChannel); } } }
public IEnumerable <RadioChannelMember> GetPlayerRadioChannelMembership(VoiceClient voiceClient) { foreach (RadioChannel radioChannel in this.RadioChannels) { RadioChannelMember membership = radioChannel.Members.FirstOrDefault(m => m.VoiceClient == voiceClient); if (membership != null) { yield return(membership); } } }
public void LeavePhoneCall(VoiceClient voiceClient, PhoneCall phoneCall) { phoneCall.RemoveMember(voiceClient); if (phoneCall.Members.Length == 0) { lock (this._phoneCalls) { this._phoneCalls.Remove(phoneCall); } } }
public IEnumerable <PhoneCallMember> GetPlayerPhoneCallMembership(VoiceClient voiceClient) { foreach (PhoneCall phoneCall in this.PhoneCalls) { PhoneCallMember membership = phoneCall.Members.FirstOrDefault(m => m.VoiceClient == voiceClient); if (membership != null) { yield return(membership); } } }
private void EstablishCall(int callerNetId, int partnerNetId) { VoiceClient caller = this.VoiceClients.FirstOrDefault(c => c.Player.GetServerId() == callerNetId); VoiceClient callPartner = this.VoiceClients.FirstOrDefault(c => c.Player.GetServerId() == partnerNetId); if (caller == null || callPartner == null) { return; } caller.TriggerEvent(Event.SaltyChat_EstablishCall, partnerNetId, callPartner.TeamSpeakName, callPartner.Player.GetPosition()); callPartner.TriggerEvent(Event.SaltyChat_EstablishCall, callerNetId, caller.TeamSpeakName, caller.Player.GetPosition()); }
public static bool TryGetVoiceClient(GTANetworkAPI.Client client, out VoiceClient voiceClient) { lock (VoiceManager._voiceClients) { if (VoiceManager._voiceClients.TryGetValue(client, out voiceClient)) { return(true); } } voiceClient = null; return(false); }
public bool TryGetVoiceClient(IPlayer client, out VoiceClient voiceClient) { lock (this._voiceClients) { if (this._voiceClients.TryGetValue(client, out voiceClient)) { return(true); } } voiceClient = null; return(false); }
internal void AddMember(VoiceClient voiceClient, bool isPrimary) { lock (this._memberLock) { if (!this._members.Any(m => m.VoiceClient == voiceClient)) { this._members.Add(new RadioChannelMember(this, voiceClient, isPrimary)); voiceClient.TriggerEvent(Event.SaltyChat_SetRadioChannel, this.Name, isPrimary); this.UpdateMemberStateBag(); } } }
public void JoinRadioChannel(VoiceClient voiceClient, string radioChannelName, bool isPrimary) { foreach (RadioChannel channel in this.RadioChannels) { if (channel.Members.Any(v => v.VoiceClient == voiceClient && v.IsPrimary == isPrimary)) { return; } } RadioChannel radioChannel = this.GetRadioChannel(radioChannelName, true); radioChannel.AddMember(voiceClient, isPrimary); }
public void LeaveRadioChannel(VoiceClient voiceClient, bool primary) { foreach (RadioChannelMember membership in this.GetPlayerRadioChannelMembership(voiceClient).Where(m => m.IsPrimary == primary)) { membership.RadioChannel.RemoveMember(voiceClient); if (membership.RadioChannel.Members.Length == 0) { lock (this._radioChannels) { this._radioChannels.Remove(membership.RadioChannel); } } } }
public void LeaveRadioChannel(VoiceClient voiceClient, string radioChannelName) { foreach (RadioChannelMember membership in this.GetPlayerRadioChannelMembership(voiceClient).Where(m => m.RadioChannel.Name == radioChannelName)) { membership.RadioChannel.RemoveMember(voiceClient); if (membership.RadioChannel.Members.Length == 0) { lock (this._radioChannels) { this._radioChannels.Remove(membership.RadioChannel); } } } }
public static void LeaveRadioChannel(VoiceClient voiceClient) { foreach (RadioChannelMember membership in VoiceManager.GetPlayerRadioChannelMembership(voiceClient)) { membership.RadioChannel.RemoveMember(voiceClient); if (membership.RadioChannel.Members.Length == 0) { lock (VoiceManager._radioChannels) { VoiceManager._radioChannels.Remove(membership.RadioChannel); } } } }
private void AddPlayersToCall(string identifier, List <dynamic> players) { PhoneCall phoneCall = this.GetPhoneCall(identifier, true); foreach (int playerHandle in players) { VoiceClient voiceClient = this.VoiceClients.FirstOrDefault(c => c.Player.GetServerId() == playerHandle); if (voiceClient == null) { continue; } this.JoinPhoneCall(voiceClient, phoneCall); } }
public void SetSpeaker(VoiceClient voiceClient, bool isEnabled) { PhoneCallMember[] callMembers = this.Members; PhoneCallMember callMember = callMembers.FirstOrDefault(m => m.VoiceClient == voiceClient); if (callMember == null || callMember.IsSpeakerEnabled == isEnabled) { return; } string[] replays = callMembers.Where(m => m.IsSpeakerEnabled).Select(m => m.VoiceClient.TeamSpeakName).ToArray(); if (replays.Length == 0) { foreach (VoiceClient client in VoiceManager.Instance.VoiceClients) { if (client == voiceClient || callMembers.Any(m => m.VoiceClient == client)) { continue; } else { foreach (PhoneCallMember member in callMembers) { client.TriggerEvent(Event.SaltyChat_EndCall, member.VoiceClient.Player.Handle); } } } } else { foreach (VoiceClient client in VoiceManager.Instance.VoiceClients) { if (client == voiceClient || callMembers.Any(m => m.VoiceClient == client)) { continue; } else { foreach (PhoneCallMember member in callMembers) { client.TriggerEvent(Event.SaltyChat_EstablishCallRelayed, member.VoiceClient.Player.Handle, member.VoiceClient.TeamSpeakName, member.VoiceClient.Player.GetPosition(), false, replays); } } } } }
internal void AddMember(VoiceClient voiceClient, bool isPrimary) { lock (this._members) { if (!this._members.Any(m => m.VoiceClient == voiceClient)) { this._members.Add(new RadioChannelMember(this, voiceClient, isPrimary)); voiceClient.Player.TriggerEvent(Event.SaltyChat_SetRadioChannel, this.Name, isPrimary); foreach (RadioChannelMember member in this._members.Where(m => m.IsSending)) { voiceClient.Player.TriggerEvent(Event.SaltyChat_IsSending, member.VoiceClient.Player.Handle, member.VoiceClient.TeamSpeakName, this.Name, true, false, member.VoiceClient.Player.GetPosition()); } } } }
private void OnInitialize([FromSource] Player player) { if (!VoiceManager.Enabled) { return; } VoiceClient voiceClient; lock (VoiceManager._voiceClients) { voiceClient = new VoiceClient(player, VoiceManager.GetTeamSpeakName(), SharedData.VoiceRanges[1]); VoiceManager._voiceClients.Add(player, voiceClient); } player.TriggerEvent(Event.SaltyChat_Initialize, voiceClient.TeamSpeakName, VoiceManager.ServerUniqueIdentifier, VoiceManager.SoundPack, VoiceManager.IngameChannel, VoiceManager.IngameChannelPassword); }
internal void AddMember(VoiceClient voiceClient) { lock (this._members) { if (!this._members.Any(m => m.VoiceClient == voiceClient)) { this._members.Add(new RadioChannelMember(this, voiceClient)); voiceClient.Player.TriggerEvent(SaltyShared.Event.SaltyChat_SetRadioChannel, this.Name); foreach (RadioChannelMember member in this._members.Where(m => m.IsSending)) { voiceClient.Player.TriggerEvent(SaltyShared.Event.SaltyChat_IsSending, member.VoiceClient.Player.Handle.Value, true); } } } }
private void OnInitialize([FromSource] Player player) { if (!VoiceManager.Enabled) { return; } VoiceClient voiceClient; lock (VoiceManager._voiceClients) { voiceClient = new VoiceClient(player, VoiceManager.GetTeamSpeakName(), SharedData.VoiceRanges[1], true); if (VoiceManager._voiceClients.ContainsKey(player)) { VoiceManager._voiceClients[player] = voiceClient; } else { VoiceManager._voiceClients.Add(player, voiceClient); } } player.TriggerEvent(Event.SaltyChat_Initialize, voiceClient.TeamSpeakName, VoiceManager.RadioTowers); Vector3 voiceClientPosition = voiceClient.Player.Character != null ? voiceClient.Player.Character.Position : new Vector3(0.0f, 0.0f, 0.0f); string clientJson = JsonConvert.SerializeObject(new SaltyShared.VoiceClient(voiceClient.Player.GetServerId(), voiceClient.TeamSpeakName, voiceClient.VoiceRange, true, new Position(voiceClientPosition.X, voiceClientPosition.Y, voiceClientPosition.Z))); List <SaltyShared.VoiceClient> voiceClients = new List <SaltyShared.VoiceClient>(); foreach (VoiceClient client in VoiceManager.VoiceClients.Where(c => c.Player != player)) { Vector3 clientPosition = client.Player.Character != null ? client.Player.Character.Position : new Vector3(0.0f, 0.0f, 0.0f); voiceClients.Add(new SaltyShared.VoiceClient(client.Player.GetServerId(), client.TeamSpeakName, client.VoiceRange, client.IsAlive, new Position(clientPosition.X, clientPosition.Y, clientPosition.Z))); client.Player.TriggerEvent(Event.SaltyChat_UpdateClient, clientJson); } player.TriggerEvent(Event.SaltyChat_SyncClients, JsonConvert.SerializeObject(voiceClients)); }
internal void RemoveMember(VoiceClient voiceClient) { lock (this._memberLock) { RadioChannelMember member = this._members.FirstOrDefault(m => m.VoiceClient == voiceClient); if (member != null) { if (member.IsSending) { CitizenFX.Core.Vector3 position = member.VoiceClient.Player.GetPosition(); if (member.VoiceClient.IsRadioSpeakerEnabled) { foreach (VoiceClient client in VoiceManager.Instance.VoiceClients) { client.TriggerEvent(Event.SaltyChat_IsSendingRelayed, voiceClient.Player.Handle, voiceClient.TeamSpeakName, this.Name, false, true, position, false, new string[0]); } } else { foreach (RadioChannelMember channelMember in this._members) { channelMember.VoiceClient.TriggerEvent(Event.SaltyChat_IsSending, voiceClient.Player.Handle, voiceClient.TeamSpeakName, this.Name, false, true, position); } } } this._members.Remove(member); foreach (RadioChannelMember channelMember in this._members.Where(m => m.IsSending)) { voiceClient.TriggerEvent(Event.SaltyChat_IsSending, channelMember.VoiceClient.Player.Handle, channelMember.VoiceClient.TeamSpeakName, this.Name, false, false, channelMember.VoiceClient.Player.GetPosition()); } voiceClient.TriggerEvent(Event.SaltyChat_SetRadioChannel, null, member.IsPrimary); this.BroadcastEvent(Event.SaltyChat_RadioChannelMemberUpdated, this.Name, this.Members.Select(m => m.VoiceClient.TeamSpeakName)); } } }
internal void RemoveMember(VoiceClient voiceClient) { lock (this._memberLock) { RadioChannelMember member = this._members.FirstOrDefault(m => m.VoiceClient == voiceClient); if (member != null) { this._members.Remove(member); voiceClient.TriggerEvent(Event.SaltyChat_SetRadioChannel, null, member.IsPrimary); if (member.IsSending) { this.UpdateSenderStateBag(); } this.UpdateMemberStateBag(); } } }
private void RemovePlayersFromCall(string identifier, List <dynamic> players) { PhoneCall phoneCall = this.GetPhoneCall(identifier, false); if (phoneCall == null) { return; } foreach (int playerHandle in players) { VoiceClient voiceClient = this.VoiceClients.FirstOrDefault(c => c.Player.GetServerId() == playerHandle); if (voiceClient == null) { continue; } this.LeavePhoneCall(voiceClient, phoneCall); } }
internal void Send(VoiceClient voiceClient, bool isSending) { if (!this.TryGetMember(voiceClient, out RadioChannelMember radioChannelMember)) { return; } if (VoiceManager.Instance.Configuration.EnableRadioHardcoreMode && isSending && this.Members.Any(m => m.VoiceClient != voiceClient && m.IsSending)) { voiceClient.TriggerEvent(Event.SaltyChat_ChannelInUse, this.Name); return; } bool stateChanged = radioChannelMember.IsSending != isSending; radioChannelMember.IsSending = isSending; RadioChannelMember[] channelMembers = this.Members; RadioChannelMember[] onSpeaker = channelMembers.Where(m => m.IsSpeakerEnabled && m.VoiceClient != voiceClient).ToArray(); CitizenFX.Core.Vector3 position = voiceClient.Player.GetPosition(); if (onSpeaker.Length > 0) { string[] channelMemberNames = onSpeaker.Select(m => m.VoiceClient.TeamSpeakName).ToArray(); foreach (VoiceClient remoteClient in VoiceManager.Instance.VoiceClients) { remoteClient.TriggerEvent(Event.SaltyChat_IsSendingRelayed, voiceClient.Player.Handle, voiceClient.TeamSpeakName, this.Name, isSending, stateChanged, position, this.IsMember(remoteClient), channelMemberNames); } } else { foreach (RadioChannelMember member in channelMembers) { member.VoiceClient.TriggerEvent(Event.SaltyChat_IsSending, voiceClient.Player.Handle, voiceClient.TeamSpeakName, this.Name, isSending, stateChanged, position); } } }
internal void RemoveMember(VoiceClient voiceClient) { lock (this._members) { RadioChannelMember member = this._members.FirstOrDefault(m => m.VoiceClient == voiceClient); if (member != null) { if (member.IsSending) { string positionJson = JsonConvert.SerializeObject(member.VoiceClient.Player.Character.Position); if (member.VoiceClient.RadioSpeaker) { foreach (VoiceClient client in VoiceManager.Instance.VoiceClients) { client.Player.TriggerEvent(Event.SaltyChat_IsSendingRelayed, voiceClient.Player.Handle, this.Name, false, true, positionJson, false, new string[0]); } } else { foreach (RadioChannelMember channelMember in this._members) { channelMember.VoiceClient.Player.TriggerEvent(Event.SaltyChat_IsSending, voiceClient.Player.Handle, this.Name, false, true, positionJson); } } } this._members.Remove(member); foreach (RadioChannelMember channelMember in this._members.Where(m => m.IsSending)) { voiceClient.Player.TriggerEvent(Event.SaltyChat_IsSending, channelMember.VoiceClient.Player.Handle, this.Name, false, false, JsonConvert.SerializeObject(channelMember.VoiceClient.Player.Character.Position)); } voiceClient.Player.TriggerEvent(Event.SaltyChat_SetRadioChannel, null, member.IsPrimary); } } }
internal void Send(VoiceClient voiceClient, bool isSending) { if (!this.TryGetMember(voiceClient, out RadioChannelMember radioChannelMember)) { return; } if (VoiceManager.Instance.Configuration.EnableRadioHardcoreMode && isSending && this.Members.Any(m => m.VoiceClient != voiceClient && m.IsSending)) { voiceClient.TriggerEvent(Event.SaltyChat_ChannelInUse, this.Name); return; } if (!voiceClient.IsAlive && isSending) { return; } radioChannelMember.IsSending = isSending; this.UpdateSenderStateBag(); }