public void HandleChannelSelectResult(Packet packet) { // Packet received from the center server Player.Channel = packet.ReadByte(); var characters = packet.ReadByte(); var pack = new Packet(ServerMessages.SELECT_WORLD_RESULT); pack.WriteByte(0); //Success, other values generate error messages pack.WriteByte(characters); for (int index = 0; index < characters; index++) { var ad = new AvatarData(); ad.Decode(packet); ad.Encode(pack); var hasRanking = packet.ReadBool(); pack.WriteBool(hasRanking); if (hasRanking) { pack.WriteInt(packet.ReadInt()); pack.WriteInt(packet.ReadInt()); pack.WriteInt(packet.ReadInt()); pack.WriteInt(packet.ReadInt()); } Player.Characters[ad.CharacterStat.ID] = ad.CharacterStat.Name; } SendPacket(pack); Player.State = Player.LoginState.CharacterSelect; if (autoSelectChar.HasValue && autoSelectChar.Value < Player.Characters.Count && Server.Instance.GetWorld(Player.World, out Center center)) { var charid = Player.Characters.ElementAt(autoSelectChar.Value).Key; center.Connection.RequestCharacterConnectToWorld( Player.SessionHash, charid, Player.World, Player.Channel ); } }
public void HandleCreateNewCharacterResult(Packet packet) { var pack = new Packet(ServerMessages.CREATE_NEW_CHARACTER_RESULT); if (packet.ReadBool()) { // Succeeded pack.WriteBool(false); var ad = new AvatarData(); ad.Decode(packet); ad.Encode(pack); log.Info($"User created a new character, called '{ad.CharacterStat.Name}'"); Player.Characters.Add(ad.CharacterStat.ID, ad.CharacterStat.Name); Player.State = Player.LoginState.CharacterSelect; } else { pack.WriteBool(true); } Player.Socket.SendPacket(pack); }