public async Task RenameCharacter(CharacterRenameRequest packet, IRakConnection connection) { var session = Server.SessionCache.GetSession(connection.EndPoint); await using var ctx = new UchuContext(); if (ctx.Characters.Any(c => c.Name == packet.Name || c.CustomName == packet.Name)) { connection.Send(new CharacterRenameResponse { ResponseId = CharacterRenamingResponse.NameAlreadyInUse } ); return; } var chr = await ctx.Characters.FindAsync(packet.CharacterId); chr.CustomName = packet.Name; chr.NameRejected = false; chr.LastActivity = DateTimeOffset.Now.ToUnixTimeSeconds(); await ctx.SaveChangesAsync(); connection.Send(new CharacterRenameResponse { ResponseId = CharacterRenamingResponse.Success } ); await SendCharacterList(connection, session.UserId); }
public async Task RenameCharacter(CharacterRenameRequest packet, IRakConnection connection) { var session = UchuServer.SessionCache.GetSession(connection.EndPoint); await using var ctx = new UchuContext(); // Check if the name already exists and return proper response if so if (ctx.Characters.Any(c => c.Name == packet.Name || c.CustomName == packet.Name)) { connection.Send(new CharacterRenameResponse { ResponseId = CharacterRenamingResponse.NameAlreadyInUse } ); return; } // If the name is free, update accordingly and notify the client var chr = await ctx.Characters.FindAsync(packet.CharacterId); chr.CustomName = packet.Name; chr.NameRejected = false; chr.LastActivity = DateTimeOffset.Now.ToUnixTimeSeconds(); await ctx.SaveChangesAsync(); connection.Send(new CharacterRenameResponse { ResponseId = CharacterRenamingResponse.Success } ); await SendCharacterList(connection, session.UserId); }