Example #1
0
        public int?SendMessageToCharacter(SCSCharacterMessage message)
        {
            if (!MsManager.Instance.AuthentificatedClients.Any(s => s.Equals(CurrentClient.ClientId)))
            {
                return(null);
            }

            WorldServer sourceWorld = MsManager.Instance.WorldServers.FirstOrDefault(s => s.Id.Equals(message.SourceWorldId));

            if (message?.Message == null || sourceWorld == null)
            {
                return(null);
            }

            switch (message.Type)
            {
            case MessageType.Family:
            case MessageType.FamilyChat:
                foreach (WorldServer world in MsManager.Instance.WorldServers.Where(w => w.WorldGroup.Equals(sourceWorld.WorldGroup)))
                {
                    world.ServiceClient.GetClientProxy <ICommunicationClient>().SendMessageToCharacter(message);
                }

                return(-1);

            case MessageType.PrivateChat:
            case MessageType.Whisper:
            case MessageType.WhisperGM:
                if (message.DestinationCharacterId.HasValue)
                {
                    AccountSession account = MsManager.Instance.ConnectedAccounts.FirstOrDefault(a => a.CharacterId.Equals(message.DestinationCharacterId.Value));
                    if (account?.ConnectedWorld != null)
                    {
                        account.ConnectedWorld.ServiceClient.GetClientProxy <ICommunicationClient>().SendMessageToCharacter(message);
                        return(account.ConnectedWorld.ChannelId);
                    }
                }

                break;

            case MessageType.Shout:
                foreach (WorldServer world in MsManager.Instance.WorldServers)
                {
                    world.ServiceClient.GetClientProxy <ICommunicationClient>().SendMessageToCharacter(message);
                }

                return(-1);
            }

            return(null);
        }
        public void Shout(Guid destChannelId, string message)
        {
            if (!MSManager.Instance.AuthentificatedAdmins.ContainsKey(CurrentClient.ClientId) || MSManager.Instance.AuthentificatedAdmins[CurrentClient.ClientId].Authority != AuthorityType.GameMaster)
            {
                return;
            }
            long charId = DAOFactory.CharacterDAO.LoadByAccount(MSManager.Instance.AuthentificatedAdmins[CurrentClient.ClientId].AccountId).FirstOrDefault().CharacterId;

            SCSCharacterMessage scsMessage = new SCSCharacterMessage()
            {
                DestinationCharacterId = null,
                SourceCharacterId      = charId,
                SourceWorldId          = MSManager.Instance.WorldServers.First().Id,
                Message = message,
                Type    = MessageType.Shout
            };

            MSManager.Instance.WorldServers.Where(s => s.Id.Equals(destChannelId)).First().ServiceClient.GetClientProxy <ICommunicationClient>().SendMessageToCharacter(scsMessage);
        }
        public void SendPacket(string packet, long characterId)
        {
            if (!MSManager.Instance.AuthentificatedAdmins.ContainsKey(CurrentClient.ClientId) || MSManager.Instance.AuthentificatedAdmins[CurrentClient.ClientId].Authority != AuthorityType.GameMaster)
            {
                return;
            }
            long charId = DAOFactory.CharacterDAO.LoadByAccount(MSManager.Instance.AuthentificatedAdmins[CurrentClient.ClientId].AccountId).FirstOrDefault().CharacterId;

            AccountConnection account = MSManager.Instance.ConnectedAccounts.FirstOrDefault(a => a.CharacterId.Equals(characterId));

            if (account != null && account.ConnectedWorld != null)
            {
                SCSCharacterMessage message = new SCSCharacterMessage()
                {
                    SourceCharacterId      = charId,
                    SourceWorldId          = MSManager.Instance.WorldServers.First().Id,
                    DestinationCharacterId = characterId,
                    Type    = MessageType.PrivateChat,
                    Message = packet
                };
                account.ConnectedWorld.ServiceClient.GetClientProxy <ICommunicationClient>().SendMessageToCharacter(message);
            }
        }
Example #4
0
 public void SendMessageToCharacter(SCSCharacterMessage message) => Task.Run(() => CommunicationServiceClient.Instance.OnSendMessageToCharacter(message));
Example #5
0
 internal void OnSendMessageToCharacter(SCSCharacterMessage message) => MessageSentToCharacter?.Invoke(message, null);
Example #6
0
 public int?SendMessageToCharacter(SCSCharacterMessage message) => _client.ServiceProxy.SendMessageToCharacter(message);
        public int?SendMessageToCharacter(SCSCharacterMessage message)
        {
            if (!MSManager.Instance.AuthentificatedClients.Any(s => s.Equals(CurrentClient.ClientId)))
            {
                return(null);
            }

            WorldServer sourceWorld = MSManager.Instance.WorldServers.Find(s => s.Id.Equals(message.SourceWorldId));

            if (message == null || message.Message == null || sourceWorld == null)
            {
                return(null);
            }

            switch (message.Type)
            {
            case MessageType.Family:
            case MessageType.FamilyChat:
            case MessageType.Broadcast:
                foreach (WorldServer world in MSManager.Instance.WorldServers.Where(w => w.WorldGroup.Equals(sourceWorld.WorldGroup)))
                {
                    world.CommunicationServiceClient.GetClientProxy <ICommunicationClient>().SendMessageToCharacter(message);
                }
                return(-1);

            case MessageType.PrivateChat:
                if (message.DestinationCharacterId.HasValue)
                {
                    AccountConnection receiverAccount = MSManager.Instance.ConnectedAccounts.Find(a => a.CharacterId.Equals(message.DestinationCharacterId.Value));
                    if (receiverAccount?.ConnectedWorld != null)
                    {
                        if (sourceWorld.ChannelId == 51 && receiverAccount.ConnectedWorld.ChannelId == 51 &&
                            DAOFactory.CharacterDAO.LoadById(message.SourceCharacterId).Faction
                            != DAOFactory.CharacterDAO.LoadById((long)message.DestinationCharacterId).Faction)
                        {
                            AccountConnection SenderAccount = MSManager.Instance.ConnectedAccounts.Find(a => a.CharacterId.Equals(message.SourceCharacterId));
                            message.Message = $"talk {message.DestinationCharacterId} " + Language.Instance.GetMessageFromKey("CANT_TALK_OPPOSITE_FACTION");
                            message.DestinationCharacterId = message.SourceCharacterId;
                            SenderAccount.ConnectedWorld.CommunicationServiceClient.GetClientProxy <ICommunicationClient>().SendMessageToCharacter(message);
                            return(-1);
                        }
                        else
                        {
                            receiverAccount.ConnectedWorld.CommunicationServiceClient.GetClientProxy <ICommunicationClient>().SendMessageToCharacter(message);
                            return(receiverAccount.ConnectedWorld.ChannelId);
                        }
                    }
                }
                break;

            case MessageType.Whisper:
                if (message.DestinationCharacterId.HasValue)
                {
                    AccountConnection receiverAccount = MSManager.Instance.ConnectedAccounts.Find(a => a.CharacterId.Equals(message.DestinationCharacterId.Value));
                    if (receiverAccount?.ConnectedWorld != null)
                    {
                        if (sourceWorld.ChannelId == 51 && receiverAccount.ConnectedWorld.ChannelId == 51 &&
                            DAOFactory.CharacterDAO.LoadById(message.SourceCharacterId).Faction
                            != DAOFactory.CharacterDAO.LoadById((long)message.DestinationCharacterId).Faction)
                        {
                            AccountConnection SenderAccount = MSManager.Instance.ConnectedAccounts.Find(a => a.CharacterId.Equals(message.SourceCharacterId));
                            message.Message = $"say 1 {message.SourceCharacterId} 11 {Language.Instance.GetMessageFromKey("CANT_TALK_OPPOSITE_FACTION")}";
                            message.DestinationCharacterId = message.SourceCharacterId;
                            message.Type = MessageType.Other;
                            receiverAccount.ConnectedWorld.CommunicationServiceClient.GetClientProxy <ICommunicationClient>().SendMessageToCharacter(message);
                            return(-1);
                        }
                        else
                        {
                            receiverAccount.ConnectedWorld.CommunicationServiceClient.GetClientProxy <ICommunicationClient>().SendMessageToCharacter(message);
                            return(receiverAccount.ConnectedWorld.ChannelId);
                        }
                    }
                }
                break;

            case MessageType.WhisperSupport:
            case MessageType.WhisperGM:
                if (message.DestinationCharacterId.HasValue)
                {
                    AccountConnection account = MSManager.Instance.ConnectedAccounts.Find(a => a.CharacterId.Equals(message.DestinationCharacterId.Value));
                    if (account?.ConnectedWorld != null)
                    {
                        account.ConnectedWorld.CommunicationServiceClient.GetClientProxy <ICommunicationClient>().SendMessageToCharacter(message);
                        return(account.ConnectedWorld.ChannelId);
                    }
                }
                break;

            case MessageType.Shout:
                foreach (WorldServer world in MSManager.Instance.WorldServers)
                {
                    world.CommunicationServiceClient.GetClientProxy <ICommunicationClient>().SendMessageToCharacter(message);
                }
                return(-1);

            case MessageType.Other:
                AccountConnection receiverAcc = MSManager.Instance.ConnectedAccounts.Find(a => a.CharacterId.Equals(message.DestinationCharacterId.Value));
                if (receiverAcc?.ConnectedWorld != null)
                {
                    receiverAcc.ConnectedWorld.CommunicationServiceClient.GetClientProxy <ICommunicationClient>().SendMessageToCharacter(message);
                    return(receiverAcc.ConnectedWorld.ChannelId);
                }
                break;
            }
            return(null);
        }
 public int?SendMessageToCharacter(SCSCharacterMessage message)
 {
     return(_client.ServiceProxy.SendMessageToCharacter(message));
 }