Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
                }
            }
        }
Exemplo n.º 3
0
        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);
                }
            }
        }
Exemplo n.º 4
0
        public void LeavePhoneCall(VoiceClient voiceClient, string identifier)
        {
            PhoneCall phoneCall = this.GetPhoneCall(identifier, false);

            if (phoneCall != null)
            {
                this.LeavePhoneCall(voiceClient, phoneCall);
            }
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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
                        );
                }
            }
        }
Exemplo n.º 7
0
        public void LeaveRadioChannel(VoiceClient voiceClient, RadioChannel radioChannel)
        {
            radioChannel.RemoveMember(voiceClient);

            if (radioChannel.Members.Length == 0)
            {
                lock (this._radioChannels)
                {
                    this._radioChannels.Remove(radioChannel);
                }
            }
        }
Exemplo n.º 8
0
        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);
                }
            }
        }
Exemplo n.º 9
0
        public void LeavePhoneCall(VoiceClient voiceClient, PhoneCall phoneCall)
        {
            phoneCall.RemoveMember(voiceClient);

            if (phoneCall.Members.Length == 0)
            {
                lock (this._phoneCalls)
                {
                    this._phoneCalls.Remove(phoneCall);
                }
            }
        }
Exemplo n.º 10
0
        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);
                }
            }
        }
Exemplo n.º 11
0
        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());
        }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
        public bool TryGetVoiceClient(IPlayer client, out VoiceClient voiceClient)
        {
            lock (this._voiceClients)
            {
                if (this._voiceClients.TryGetValue(client, out voiceClient))
                {
                    return(true);
                }
            }

            voiceClient = null;
            return(false);
        }
Exemplo n.º 14
0
        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();
                }
            }
        }
Exemplo n.º 15
0
        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);
        }
Exemplo n.º 16
0
        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);
                    }
                }
            }
        }
Exemplo n.º 17
0
        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);
                    }
                }
            }
        }
Exemplo n.º 18
0
        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);
                    }
                }
            }
        }
Exemplo n.º 19
0
        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);
            }
        }
Exemplo n.º 20
0
        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);
                        }
                    }
                }
            }
        }
Exemplo n.º 21
0
        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());
                    }
                }
            }
        }
Exemplo n.º 22
0
        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);
        }
Exemplo n.º 23
0
        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);
                    }
                }
            }
        }
Exemplo n.º 24
0
        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));
        }
Exemplo n.º 25
0
        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));
                }
            }
        }
Exemplo n.º 26
0
        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();
                }
            }
        }
Exemplo n.º 27
0
        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);
            }
        }
Exemplo n.º 28
0
        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);
                }
            }
        }
Exemplo n.º 29
0
        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);
                }
            }
        }
Exemplo n.º 30
0
        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();
        }