public void OnChatToAllianceStreamMessageReceived(ChatToAllianceStreamMessage message)
        {
            if (!this.CanSendGlobalChatMessage())
            {
                return;
            }

            if (this.m_session.Alliance != null)
            {
                string chatMessage = message.RemoveMessage();

                if (string.IsNullOrEmpty(chatMessage))
                {
                    return;
                }
                if (chatMessage.Length > 128)
                {
                    chatMessage = chatMessage.Substring(0, 128);
                }

                AllianceMemberEntry memberEntry     = this.m_session.Alliance.Members[this.m_session.AccountId];
                ChatStreamEntry     chatStreamEntry = new ChatStreamEntry();
                AllianceStreamEntryUtil.SetSenderInfo(chatStreamEntry, memberEntry);

                chatStreamEntry.SetMessage(WordCensorUtil.FilterMessage(chatMessage));

                StreamManager.Create(this.m_session.Alliance.Id, chatStreamEntry);
                this.m_session.Alliance.AddStreamEntry(chatStreamEntry);
                AllianceManager.Save(this.m_session.Alliance);
            }
        }
Exemplo n.º 2
0
        public static void Init()
        {
            ServerStream.AllianceDatabase = new CouchbaseDatabase("magic-alliances", "data");
            ServerStream.StreamDatabase   = new CouchbaseDatabase("magic-streams", "stream");

            AllianceManager.Init();
            StreamManager.Init();
            AllianceSessionManager.Init();
            WordCensorUtil.Init();
        }
Exemplo n.º 3
0
        public static void Init()
        {
            ServerGame.GameDatabase = new CouchbaseDatabase("magic-players", "game");

            GameResourceManager.Init();
            GameMatchmakingManager.Init();
            GameDuelMatchmakingManager.Init();
            GameAvatarManager.Init();
            GameSessionManager.Init();
            LiveReplayManager.Init();
            GameBaseGenerator.Init();
            WordCensorUtil.Init();
        }
        private void OnChangeAvatarNameMessageReceived(ChangeAvatarNameMessage message)
        {
            if (message.GetNameSetByUser())
            {
                string name = message.RemoveAvatarName();

                if (name == null)
                {
                    return;
                }

                name = StringUtil.RemoveMultipleSpaces(name.Trim());

                if (name.Length < 2)
                {
                    AvatarNameChangeFailedMessage avatarNameChangeFailedMessage = new AvatarNameChangeFailedMessage();
                    avatarNameChangeFailedMessage.SetErrorCode(AvatarNameChangeFailedMessage.ErrorCode.TOO_SHORT);
                    this.m_session.SendPiranhaMessage(avatarNameChangeFailedMessage, 1);
                    return;
                }

                if (name.Length > 16)
                {
                    AvatarNameChangeFailedMessage avatarNameChangeFailedMessage = new AvatarNameChangeFailedMessage();
                    avatarNameChangeFailedMessage.SetErrorCode(AvatarNameChangeFailedMessage.ErrorCode.TOO_LONG);
                    this.m_session.SendPiranhaMessage(avatarNameChangeFailedMessage, 1);
                    return;
                }

                if (WordCensorUtil.IsValidMessage(name))
                {
                    LogicClientAvatar logicClientAvatar = this.m_session.GameAvatar.LogicClientAvatar;

                    if (logicClientAvatar.GetNameChangeState() >= 1)
                    {
                        AvatarNameChangeFailedMessage avatarNameChangeFailedMessage = new AvatarNameChangeFailedMessage();
                        avatarNameChangeFailedMessage.SetErrorCode(AvatarNameChangeFailedMessage.ErrorCode.ALREADY_CHANGED);
                        this.m_session.SendPiranhaMessage(avatarNameChangeFailedMessage, 1);
                        return;
                    }

                    if (logicClientAvatar.GetNameChangeState() == 0 && logicClientAvatar.GetTownHallLevel() < LogicDataTables.GetGlobals().GetEnableNameChangeTownHallLevel())
                    {
                        AvatarNameChangeFailedMessage avatarNameChangeFailedMessage = new AvatarNameChangeFailedMessage();
                        avatarNameChangeFailedMessage.SetErrorCode(AvatarNameChangeFailedMessage.ErrorCode.TH_LEVEL_TOO_LOW);
                        this.m_session.SendPiranhaMessage(avatarNameChangeFailedMessage, 1);
                        return;
                    }

                    LogicChangeAvatarNameCommand serverCommand = new LogicChangeAvatarNameCommand();

                    serverCommand.SetAvatarName(name);
                    serverCommand.SetAvatarNameChangeState(logicClientAvatar.GetNameChangeState() + 1);

                    this.m_session.GameAvatar.LogicClientAvatar.SetName(name);
                    this.m_session.GameAvatar.LogicClientAvatar.SetNameChangeState(logicClientAvatar.GetNameChangeState() + 1);
                    this.m_session.GameAvatar.AddServerCommand(serverCommand);
                }
                else
                {
                    AvatarNameChangeFailedMessage avatarNameChangeFailedMessage = new AvatarNameChangeFailedMessage();
                    avatarNameChangeFailedMessage.SetErrorCode(AvatarNameChangeFailedMessage.ErrorCode.BAD_WORD);
                    this.m_session.SendPiranhaMessage(avatarNameChangeFailedMessage, 1);
                }
            }
        }
        private void OnAvatarNameCheckRequestMessageReceived(AvatarNameCheckRequestMessage message)
        {
            string name = message.GetName();

            if (name == null)
            {
                return;
            }

            name = StringUtil.RemoveMultipleSpaces(name.Trim());

            if (name.Length < 2)
            {
                AvatarNameCheckResponseMessage avatarNameCheckResponseMessage = new AvatarNameCheckResponseMessage();

                avatarNameCheckResponseMessage.SetName(message.GetName());
                avatarNameCheckResponseMessage.SetInvalid(true);
                avatarNameCheckResponseMessage.SetErrorCode(AvatarNameCheckResponseMessage.ErrorCode.NAME_TOO_SHORT);

                this.m_session.SendPiranhaMessage(avatarNameCheckResponseMessage, 1);
                return;
            }

            if (name.Length > 16)
            {
                AvatarNameCheckResponseMessage avatarNameCheckResponseMessage = new AvatarNameCheckResponseMessage();

                avatarNameCheckResponseMessage.SetName(message.GetName());
                avatarNameCheckResponseMessage.SetInvalid(true);
                avatarNameCheckResponseMessage.SetErrorCode(AvatarNameCheckResponseMessage.ErrorCode.NAME_TOO_LONG);

                this.m_session.SendPiranhaMessage(avatarNameCheckResponseMessage, 1);
                return;
            }

            if (WordCensorUtil.IsValidMessage(name))
            {
                LogicClientAvatar logicClientAvatar = this.m_session.GameAvatar.LogicClientAvatar;

                if (logicClientAvatar.GetNameChangeState() >= 1)
                {
                    AvatarNameCheckResponseMessage avatarNameCheckResponseMessage = new AvatarNameCheckResponseMessage();

                    avatarNameCheckResponseMessage.SetName(message.GetName());
                    avatarNameCheckResponseMessage.SetInvalid(true);
                    avatarNameCheckResponseMessage.SetErrorCode(AvatarNameCheckResponseMessage.ErrorCode.NAME_ALREADY_CHANGED);

                    this.m_session.SendPiranhaMessage(avatarNameCheckResponseMessage, 1);
                    return;
                }

                if (logicClientAvatar.GetNameChangeState() == 0 && logicClientAvatar.GetTownHallLevel() < LogicDataTables.GetGlobals().GetEnableNameChangeTownHallLevel())
                {
                    AvatarNameCheckResponseMessage avatarNameCheckResponseMessage = new AvatarNameCheckResponseMessage();

                    avatarNameCheckResponseMessage.SetName(message.GetName());
                    avatarNameCheckResponseMessage.SetInvalid(true);
                    avatarNameCheckResponseMessage.SetErrorCode(AvatarNameCheckResponseMessage.ErrorCode.NAME_TH_LEVEL_TOO_LOW);

                    this.m_session.SendPiranhaMessage(avatarNameCheckResponseMessage, 1);
                }
                else
                {
                    AvatarNameCheckResponseMessage avatarNameCheckResponseMessage = new AvatarNameCheckResponseMessage();
                    avatarNameCheckResponseMessage.SetName(message.GetName());
                    this.m_session.SendPiranhaMessage(avatarNameCheckResponseMessage, 1);
                }
            }
            else
            {
                AvatarNameCheckResponseMessage avatarNameCheckResponseMessage = new AvatarNameCheckResponseMessage();

                avatarNameCheckResponseMessage.SetName(message.GetName());
                avatarNameCheckResponseMessage.SetInvalid(true);
                avatarNameCheckResponseMessage.SetErrorCode(AvatarNameCheckResponseMessage.ErrorCode.INVALID_NAME);

                this.m_session.SendPiranhaMessage(avatarNameCheckResponseMessage, 1);
            }
        }
 public static void Init()
 {
     ChatSessionManager.Init();
     ChatInstanceManager.Init();
     WordCensorUtil.Init();
 }
        private void OnSendGlobalChatLineMessageReceived(SendGlobalChatLineMessage message)
        {
            if (!this.CanSendGlobalChatMessage())
            {
                return;
            }

            string chatMessage = StringUtil.RemoveMultipleSpaces(message.RemoveMessage());

            if (chatMessage.Length > 0)
            {
                if (chatMessage.Length > 128)
                {
                    chatMessage = chatMessage.Substring(0, 128);
                }

                if (chatMessage.StartsWith("/op "))
                {
                    string[] args = chatMessage.Trim().Split(' ');

                    if (args.Length < 3)
                    {
                        return;
                    }

                    string commandType = args[1];
                    string commandName = args[2];

                    switch (commandType)
                    {
                    case "attack":
                    {
                        if (string.Equals(commandName, "me", StringComparison.InvariantCultureIgnoreCase))
                        {
                            this.m_session.SendMessage(new GameStartFakeAttackMessage
                                {
                                    AccountId = this.m_session.AccountId,
                                    ArgData   = null
                                }, 9);
                        }
                        else if (commandName.StartsWith("#"))
                        {
                            LogicLong accountId = HashTagCodeGenerator.m_instance.ToId(commandName.ToUpperInvariant());

                            if (accountId != null)
                            {
                                this.m_session.SendMessage(new GameStartFakeAttackMessage
                                    {
                                        AccountId = accountId,
                                        ArgData   = null
                                    }, 9);
                            }
                        }
                        else if (string.Equals(commandName, "generate", StringComparison.InvariantCultureIgnoreCase))
                        {
                            if (args.Length >= 4)
                            {
                                if (int.TryParse(args[3], out int id))
                                {
                                    LogicGameObjectData gameObjectData = null;

                                    switch (id / 100)
                                    {
                                    case 0:
                                        LogicBuildingData buildingData =
                                            (LogicBuildingData)LogicDataTables.GetDataById(GlobalID.CreateGlobalID((int)LogicDataType.BUILDING + 1, id), LogicDataType.BUILDING);

                                        if (buildingData.IsTownHall() || buildingData.IsTownHallVillage2())
                                        {
                                            return;
                                        }
                                        if (!buildingData.IsEnabledInVillageType(0))
                                        {
                                            return;
                                        }
                                        if (buildingData.IsLocked() && !buildingData.IsAllianceCastle())
                                        {
                                            return;
                                        }

                                        gameObjectData = buildingData;
                                        break;

                                    case 1:
                                        gameObjectData = (LogicGameObjectData)LogicDataTables.GetDataById(GlobalID.CreateGlobalID((int)LogicDataType.TRAP + 1, id), LogicDataType.TRAP);
                                        break;
                                    }

                                    if (gameObjectData != null)
                                    {
                                        this.m_session.SendMessage(new GameStartFakeAttackMessage
                                            {
                                                AccountId = null,
                                                ArgData   = gameObjectData
                                            }, 9);
                                    }
                                }
                            }
                            else
                            {
                                this.m_session.SendMessage(new GameStartFakeAttackMessage
                                    {
                                        AccountId = null,
                                        ArgData   = null
                                    }, 9);
                            }
                        }

                        break;
                    }

                    case "village":
                        switch (commandName)
                        {
                        case "upgrade":
                        {
                            AvailableServerCommandMessage availableServerCommandMessage = new AvailableServerCommandMessage();
                            availableServerCommandMessage.SetServerCommand(new LogicDebugCommand(LogicDebugActionType.UPGRADE_ALL_BUILDINGS));
                            this.m_session.SendPiranhaMessage(availableServerCommandMessage, 1);
                            break;
                        }

                        case "obstacle":
                        {
                            AvailableServerCommandMessage availableServerCommandMessage = new AvailableServerCommandMessage();
                            availableServerCommandMessage.SetServerCommand(new LogicDebugCommand(LogicDebugActionType.REMOVE_OBSTACLES));
                            this.m_session.SendPiranhaMessage(availableServerCommandMessage, 1);
                            break;
                        }

                        case "preset":
                            // TODO: Implement this.
                            break;
                        }

                        break;

                    case "hero":
                        switch (commandName)
                        {
                        case "max":
                        {
                            AvailableServerCommandMessage availableServerCommandMessage = new AvailableServerCommandMessage();
                            availableServerCommandMessage.SetServerCommand(new LogicDebugCommand(LogicDebugActionType.SET_MAX_HERO_LEVELS));
                            this.m_session.SendPiranhaMessage(availableServerCommandMessage, 1);
                            return;
                        }

                        case "reset":
                        {
                            AvailableServerCommandMessage availableServerCommandMessage = new AvailableServerCommandMessage();
                            availableServerCommandMessage.SetServerCommand(new LogicDebugCommand(LogicDebugActionType.RESET_HERO_LEVELS));
                            this.m_session.SendPiranhaMessage(availableServerCommandMessage, 1);
                            return;
                        }
                        }

                        break;

                    case "unit":
                        switch (commandName)
                        {
                        case "max":
                        {
                            AvailableServerCommandMessage availableServerCommandMessage = new AvailableServerCommandMessage();
                            availableServerCommandMessage.SetServerCommand(new LogicDebugCommand(LogicDebugActionType.SET_MAX_UNIT_SPELL_LEVELS));
                            this.m_session.SendPiranhaMessage(availableServerCommandMessage, 1);
                            return;
                        }
                        }

                        break;
                    }
                }
                else
                {
                    ServerRequestManager.Create(new AvatarRequestMessage
                    {
                        AccountId = this.m_session.AccountId
                    }, ServerManager.GetDocumentSocket(9, this.m_session.AccountId)).OnComplete = args =>
                    {
                        if (args.ErrorCode == ServerRequestError.Success && args.ResponseMessage.Success)
                        {
                            this.m_session.ChatInstance.PublishMessage(((AvatarResponseMessage)args.ResponseMessage).LogicClientAvatar, WordCensorUtil.FilterMessage(chatMessage));
                            this.m_previousGlobalChatMessageTime = DateTime.UtcNow;
                        }
                    };
                }
            }
        }