public Player(Character player, bool initialize = true) : base(PlayerData.End) { data = player; Guid = new PlayerGuid { CreationBits = player.Guid, RealmId = (ushort)player.RealmId }; PlayerData = new PlayerData(); Position = new Vector3 { X = player.X, Y = player.Y, Z = player.Z }; Facing = player.O; Map = (short)player.Map; if (initialize) InitializeDescriptors(); }
public static async void HandleCreateCharacter(CreateCharacter createCharacter, WorldSession session) { var createChar = new CreateChar { Code = CharCreateCode.InProgress }; if (!ClientDB.ChrRaces.Any(c => c.Id == createCharacter.RaceID) || !ClientDB.ChrClasses.Any(c => c.Id == createCharacter.ClassID)) createChar.Code = CharCreateCode.Failed; else if (!ClientDB.CharBaseInfo.Any(c => c.RaceId == createCharacter.RaceID && c.ClassId == createCharacter.ClassID)) createChar.Code = CharCreateCode.Failed; else if (DB.Character.Any<Character>(c => c.Name == createCharacter.Name)) createChar.Code = CharCreateCode.NameInUse; else if (createChar.Code == CharCreateCode.InProgress) { if (createCharacter.TemplateSetID != 0) { var accTemplate = session.GameAccount.GameAccountCharacterTemplates.Any(t => t.SetId == createCharacter.TemplateSetID); var realmTemplate = session.Realm.RealmCharacterTemplates.Any(t => t.SetId == createCharacter.TemplateSetID); if (accTemplate || realmTemplate) { // Not implemented = creation failed createChar.Code = CharCreateCode.Failed; } else createChar.Code = CharCreateCode.Failed; } else { var creationData = DB.Character.Single<CharacterCreationData>(d => d.Race == createCharacter.RaceID && d.Class == createCharacter.ClassID); if (creationData != null) { var newChar = new Character { Name = createCharacter.Name, GameAccountId = session.GameAccount.Id, RealmId = session.Realm.Id, Race = createCharacter.RaceID, Class = createCharacter.ClassID, Sex = createCharacter.SexID, Skin = createCharacter.SkinID, Face = createCharacter.FaceID, HairStyle = createCharacter.HairStyleID, HairColor = createCharacter.HairColorID, FacialHairStyle = createCharacter.FacialHairStyleID, Map = creationData.Map, X = creationData.X, Y = creationData.Y, Z = creationData.Z, O = creationData.O, CharacterFlags = CharacterFlags.Decline, FirstLogin = 1, ExperienceLevel = 1 }; if (DB.Character.Add(newChar)) { Manager.Character.LearnStartAbilities(newChar); Manager.Character.AddStartItems(newChar); createChar.Code = CharCreateCode.Success; } else createChar.Code = CharCreateCode.Success; } else createChar.Code = CharCreateCode.Failed; } } await session.Send(createChar); }
public static void OnCreateCharacter(Packet packet, CharacterSession session) { var nameLength = packet.GetBits<int>(6); var useTemplateSet = packet.GetBit(); var raceId = packet.Read<Race>(); var classId = packet.Read<Class>(); var sexId = packet.Read<byte>(); var skinId = packet.Read<byte>(); var faceId = packet.Read<byte>(); var hairStyleId = packet.Read<byte>(); var hairColorId = packet.Read<byte>(); var facialHairStyleId = packet.Read<byte>(); packet.Skip(1); var name = packet.Read<string>(nameLength).ToLowerEnd(); var createChar = new Packet(ServerMessage.CreateChar); if (!ClientDB.ChrRaces.Any(c => c.Id == raceId) || !ClientDB.ChrClasses.Any(c => c.Id == classId)) { createChar.Write(CharCreateCode.Failed); session.Send(createChar); return; } if (!ClientDB.CharBaseInfo.Any(c => c.RaceId == raceId && c.ClassId == classId)) { createChar.Write(CharCreateCode.Failed); session.Send(createChar); return; } if (DB.Character.Any<Character>(c => c.Name == name)) { createChar.Write(CharCreateCode.NameInUse); session.Send(createChar); return; } if (useTemplateSet) { var templateSetId = packet.Read<int>(); var accTemplate = session.GameAccount.GameAccountCharacterTemplates.Any(t => t.SetId == templateSetId); var realmTemplate = session.Realm.RealmCharacterTemplates.Any(t => t.SetId == templateSetId); if (accTemplate || realmTemplate) { var template = DB.Character.Single<CharacterTemplateSet>(s => s.Id == templateSetId); // Implement... } else createChar.Write(CharCreateCode.Failed); } else { var creationData = DB.Character.Single<CharacterCreationData>(d => d.Race == raceId && d.Class == classId); var creationData2 = DB.Character.Select<CharacterCreationData>(); if (creationData != null) { var newChar = new Character { Name = name, GameAccountId = session.GameAccount.Id, RealmId = session.Realm.Id, Race = raceId, Class = classId, Sex = sexId, Skin = skinId, Face = faceId, HairStyle = hairStyleId, HairColor = hairColorId, FacialHairStyle = facialHairStyleId, Level = 1, Map = creationData.Map, X = creationData.X, Y = creationData.Y, Z = creationData.Z, O = creationData.O, CharacterFlags = CharacterFlags.Decline, FirstLogin = true }; if (DB.Character.Add(newChar)) { createChar.Write(CharCreateCode.Success); Manager.Character.LearnStartAbilities(newChar); } else createChar.Write(CharCreateCode.Failed); } else createChar.Write(CharCreateCode.Failed); } session.Send(createChar); }