コード例 #1
0
        /// <summary>
        /// Changes the name of a character
        /// </summary>
        private async void HandleRenameCharacter(RenameCharacterPacket renameCharacterPacket)
        {
            var(characterId, newName) = renameCharacterPacket;

            var character = await _database.Characters.FirstOrDefaultAsync(c => c.UserId == _client.UserID && c.Id == characterId);

            if (character is null)
            {
                return;
            }

            // Check that name isn't in use
            var characterWithNewName = await _database.Characters.FirstOrDefaultAsync(c => c.Name == newName);

            using var packet = new Packet(PacketType.RENAME_CHARACTER);

            if (characterWithNewName != null)
            {
                packet.WriteByte(2); // error response
                packet.Write(character.Id);
                _client.SendPacket(packet);
                return;
            }

            // TODO: Should charname be validated somehow? for eg in case someone skips client validation for symbols or something else?
            character.Name     = newName;
            character.IsRename = false;

            await _database.SaveChangesAsync();

            packet.WriteByte(1); // ok response
            packet.Write(character.Id);
            _client.SendPacket(packet);
        }
コード例 #2
0
        /// <summary>
        /// Changes the name of a character
        /// </summary>
        private async void HandleRenameCharacter(RenameCharacterPacket renameCharacterPacket)
        {
            var(characterId, newName) = renameCharacterPacket;

            var character = await _database.Characters.FirstOrDefaultAsync(c => c.UserId == _client.UserID && c.Id == characterId);

            if (character is null)
            {
                return;
            }

            // Validate the new name
            var nameIsValid = newName.IsValidCharacterName();

            // Check that name isn't in use
            var characterWithNewName = await _database.Characters.FirstOrDefaultAsync(c => c.Name == newName);

            using var packet = new Packet(PacketType.RENAME_CHARACTER);

            if (!nameIsValid || characterWithNewName != null)
            {
                packet.WriteByte(2); // error response
                packet.Write(character.Id);
                _client.SendPacket(packet);
                return;
            }

            character.Name     = newName;
            character.IsRename = false;

            await _database.SaveChangesAsync();

            packet.WriteByte(1); // ok response
            packet.Write(character.Id);
            _client.SendPacket(packet);
        }
コード例 #3
0
        public async Task Handle(WorldClient client, RenameCharacterPacket packet)
        {
            var ok = await _selectionScreenManager.TryRenameCharacter(client.UserId, packet.CharacterId, packet.NewName);

            _packetFactory.SendRenamedCharacter(client, ok, packet.CharacterId);
        }