示例#1
0
        protected override async Task Handle(CharacterDeletePacketBase packet, ISession session)
        {
            AccountDto account = await _accountService.GetByIdAsync(session.Account.Id);

            if (account == null)
            {
                return;
            }

            if (!string.Equals(account.Password, packet.Password.ToSha512(), StringComparison.CurrentCultureIgnoreCase))
            {
                await session.SendPacketAsync(new InfoPacket
                {
                    Message = "bad_password"
                });

                return;
            }

            CharacterDto character = await _characterService.GetByAccountIdAndSlotAsync(session.Account.Id, packet.Slot);

            if (character == null)
            {
                return;
            }

            character.State = CharacterState.Inactive;
            await _characterService.DeleteByIdAsync(character.Id);

            await _screenLoader.Handle(session);
        }
        protected override async Task Handle(CharNewPacketBase packet, ISession session)
        {
            long   accountId     = session.Account.Id;
            byte   slot          = packet.Slot;
            string characterName = packet.Name;

            if (slot > 3)
            {
                return;
            }

            if (await _characterService.GetByAccountIdAndSlotAsync(session.Account.Id, slot) != null)
            {
                Log.Warn($"[CREATE_CHARACTER] SLOT_ALREADY_TAKEN {slot}");
                return;
            }

            var rg = new Regex(@"^[\u0021-\u007E\u00A1-\u00AC\u00AE-\u00FF\u4E00-\u9FA5\u0E01-\u0E3A\u0E3F-\u0E5B\u002E]*$");

            if (rg.Matches(characterName).Count != 1)
            {
                await session.SendPacketAsync(new InfoPacket
                {
                    Message = _gameLanguageService.GetLanguage(PlayerMessages.CHARACTER_NAME_INVALID, session.Language)
                });

                Log.Warn($"[CREATE_CHARACTER] INVALID_NAME {characterName}");
                return;
            }

            CharacterDto character = await _characterService.GetActiveByNameAsync(characterName);

            if (character != null)
            {
                await session.SendPacketAsync(new InfoPacket
                {
                    Message = _gameLanguageService.GetLanguage(PlayerMessages.CHARACTER_NAME_ALREADY_TAKEN, session.Language)
                });

                Log.Warn($"[CREATE_CHARACTER] INVALID_NAME {characterName}");
                return;
            }

            CharacterDto newCharacter = _characterService.GetCreationCharacter();

            newCharacter.Class           = CharacterClassType.Adventurer;
            newCharacter.Gender          = packet.Gender;
            newCharacter.HairColor       = packet.HairColor;
            newCharacter.HairStyle       = packet.HairStyle;
            newCharacter.Name            = characterName;
            newCharacter.Slot            = slot;
            newCharacter.AccountId       = accountId;
            newCharacter.MinilandMessage = "Welcome";
            newCharacter.State           = CharacterState.Active;
            await _characterService.SaveAsync(newCharacter);

            Log.Info($"[CHARACTER_CREATE] {newCharacter.Name} | Account : {session.Account.Name}");
            await _screenLoader.Handle(session);
        }
示例#3
0
        protected override async Task Handle(CharNewWrestlerPacketBase packet, ISession session)
        {
            long   accountId     = session.Account.Id;
            byte   slot          = packet.Slot;
            string characterName = packet.Name;

            if (slot > 3)
            {
                return;
            }

            if (slot != 3)
            {
                await session.SendPacketAsync(new InfoPacket
                {
                    Message = "invalid_slot_wrestler"
                });

                Log.Warn($"[CREATE_CHARACTER] INVALID_SLOT_WRESTLER {slot}");
                return;
            }

            if (!_characterService.GetActiveByAccountId(session.Account.Id).Any(s => s.Level >= 80))
            {
                await session.SendPacketAsync(new InfoPacket
                {
                    Message = "invalid_lvl_wrestler"
                });

                Log.Warn("[CREATE_CHARACTER] INVALID_LVL_WRESTLER");
                return;
            }

            if (await _characterService.GetByAccountIdAndSlotAsync(session.Account.Id, slot) != null)
            {
                Log.Warn($"[CREATE_CHARACTER] SLOT_ALREADY_TAKEN {slot}");
                return;
            }

            var rg = new Regex(@"^[\u0021-\u007E\u00A1-\u00AC\u00AE-\u00FF\u4E00-\u9FA5\u0E01-\u0E3A\u0E3F-\u0E5B\u002E]*$");

            if (rg.Matches(characterName).Count != 1)
            {
                await session.SendPacketAsync(new InfoPacket
                {
                    Message = "invalid_charname"
                });

                Log.Warn($"[CREATE_CHARACTER] INVALID_NAME {characterName}");
                return;
            }

            CharacterDto character = await _characterService.GetActiveByNameAsync(characterName);

            if (character != null)
            {
                await session.SendPacketAsync(new InfoPacket
                {
                    Message = "Already_taken"
                });

                Log.Warn($"[CREATE_CHARACTER] INVALID_NAME {characterName}");
                return;
            }

            CharacterDto newCharacter = _characterService.GetCreationCharacter();

            newCharacter.Class           = CharacterClassType.Wrestler;
            newCharacter.Gender          = packet.Gender;
            newCharacter.HairColor       = packet.HairColor;
            newCharacter.HairStyle       = packet.HairStyle;
            newCharacter.Name            = characterName;
            newCharacter.Slot            = slot;
            newCharacter.AccountId       = accountId;
            newCharacter.MinilandMessage = "Welcome";
            newCharacter.State           = CharacterState.Active;
            await _characterService.SaveAsync(newCharacter);

            Log.Info($"[CHARACTER_CREATE] {newCharacter.Name} | Account : {accountId}");
            await _screenLoader.Handle(session);
        }