using System.IO; using System.Data.Entity; using PSO2SERVER.Models; using PSO2SERVER.Packets.PSOPackets; using PSO2SERVER.Database; namespace PSO2SERVER.Packets.Handlers { [PacketHandlerAttr(0x11, 0x05)] public class CharacterCreate : PacketHandler { #region implemented abstract members of PacketHandler public override void HandlePacket(Client context, byte flags, byte[] data, uint position, uint size) { if (context.User == null) return; var reader = new PacketReader(data, position, size); reader.ReadBytes(12); // 12 unknown bytes reader.ReadByte(); // VoiceType reader.ReadBytes(5); // 5 unknown bytes reader.ReadUInt16(); // VoiceData var name = reader.ReadFixedLengthUtf16(16); reader.BaseStream.Seek(0x4, SeekOrigin.Current); // Padding var looks = reader.ReadStruct(); var jobs = reader.ReadStruct(); Logger.WriteInternal("[CHR] {0} 创建了名为 {1} 的新角色.", context.User.Username, name); var newCharacter = new Character { Name = name, Jobs = jobs, Looks = looks, Player = context.User }; // Add to database using (var db = new ServerEf()) { db.Characters.Add(newCharacter); db.Entry(newCharacter.Player).State = EntityState.Modified; db.SaveChanges(); } // Assign character to player context.Character = newCharacter; // Set Player ID var writer = new PacketWriter(); writer.Write(0); writer.Write((uint) context.User.PlayerId); context.SendPacket(0x11, 0x07, 0, writer.ToArray()); // Spawn context.SendPacket(new NoPayloadPacket(0x11, 0x3E)); } #endregion } }