using PSO2SERVER.Database; using PSO2SERVER.Protocol.Packets; using PSO2SERVER.Party; using System; using System.Linq; namespace PSO2SERVER.Protocol.Handlers { [PacketHandlerAttr(0x11, 0x04)] public class CharacterSelected : PacketHandler { public struct CharacterSelectedPacket { public uint CharId; public uint Unk1; public uint Unk2; } #region implemented abstract members of PacketHandler public override void HandlePacket(Client context, byte flags, byte[] data, uint position, uint size) { if (context._account == null) return; var reader = new PacketReader(data, position, size); var pkt = reader.ReadStruct(); var charId = pkt.CharId; //Logger.Write("id {0}", charId); if (context.Character == null) { using (var db = new ServerEf()) { try { var character = db.Characters.FirstOrDefault(c => c.CharacterID == charId && c.AccountID == context._account.AccountId); if (character == null) { Logger.WriteError("数据库中未找到 {0} 角色ID {1} ({2})" , context._account.Username , charId , context._account.AccountId ); context.Socket.Close(); return; } context.Character = character; } catch (Exception ex) { Logger.WriteError("查询角色时发生异常: {0}", ex.Message); context.Socket.Close(); } } } // 将客户端加入空余的队伍中 PartyManager.Instance.CreateNewParty(context); // 告诉客户端切换到加载界面 context.SendPacket(new LoadingScreenTransitionPacket()); // TODO Set area, Set character, possibly more. See PolarisLegacy for more. } #endregion } }