/// <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); }
/// <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); }
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); }