public void CreateCharacter(ref WS_PlayerData.CharacterObject objCharacter) { DataTable CreateInfo = new(); DataTable CreateInfoBars = new(); DataTable CreateInfoSkills = new(); DataTable LevelStats = new(); DataTable ClassLevelStats = new(); WorldServiceLocator._WorldServer.WorldDatabase.Query($"SELECT * FROM playercreateinfo WHERE race = {(int)objCharacter.Race} AND class = {(int)objCharacter.Classe};", ref CreateInfo); if (CreateInfo.Rows.Count <= 0) { WorldServiceLocator._WorldServer.Log.WriteLine(LogType.FAILED, "No information found in playercreateinfo table for Race: {0}, Class: {1}", objCharacter.Race, objCharacter.Classe); } WorldServiceLocator._WorldServer.WorldDatabase.Query($"SELECT * FROM playercreateinfo_action WHERE race = {(int)objCharacter.Race} AND class = {(int)objCharacter.Classe} ORDER BY button;", ref CreateInfoBars); if (CreateInfoBars.Rows.Count <= 0) { WorldServiceLocator._WorldServer.Log.WriteLine(LogType.FAILED, "No information found in playercreateinfo_action table for Race: {0}, Class: {1}", objCharacter.Race, objCharacter.Classe); } WorldServiceLocator._WorldServer.WorldDatabase.Query($"SELECT * FROM playercreateinfo_skill WHERE race = {(int)objCharacter.Race} AND class = {(int)objCharacter.Classe};", ref CreateInfoSkills); if (CreateInfoSkills.Rows.Count <= 0) { WorldServiceLocator._WorldServer.Log.WriteLine(LogType.FAILED, "No information found in playercreateinfo_skill table for Race: {0}, Class: {1}", objCharacter.Race, objCharacter.Classe); } WorldServiceLocator._WorldServer.WorldDatabase.Query($"SELECT * FROM player_levelstats WHERE race = {(int)objCharacter.Race} AND class = {(int)objCharacter.Classe} AND level = {objCharacter.Level};", ref LevelStats); if (LevelStats.Rows.Count <= 0) { WorldServiceLocator._WorldServer.Log.WriteLine(LogType.FAILED, "No information found in player_levelstats table for Race: {0}, Class: {1}, Level: {2}", objCharacter.Race, objCharacter.Classe, objCharacter.Level); } WorldServiceLocator._WorldServer.WorldDatabase.Query($"SELECT * FROM player_classlevelstats WHERE class = {(int)objCharacter.Classe} AND level = {objCharacter.Level};", ref ClassLevelStats); if (ClassLevelStats.Rows.Count <= 0) { WorldServiceLocator._WorldServer.Log.WriteLine(LogType.FAILED, "No information found in player_classlevelstats table for Class: {0}, Level: {1}", objCharacter.Classe, objCharacter.Level); } objCharacter.Copper = 0u; objCharacter.XP = 0; objCharacter.Size = 1f; objCharacter.Life.Base = 0; objCharacter.Life.Current = 0; objCharacter.Mana.Base = 0; objCharacter.Mana.Current = 0; objCharacter.Rage.Current = 0; objCharacter.Rage.Base = 0; objCharacter.Energy.Current = 0; objCharacter.Energy.Base = 0; objCharacter.ManaType = WorldServiceLocator._WS_Player_Initializator.GetClassManaType(objCharacter.Classe); objCharacter.Model = WorldServiceLocator._Functions.GetRaceModel(objCharacter.Race, (int)objCharacter.Gender); objCharacter.Faction = WorldServiceLocator._WS_DBCDatabase.CharRaces[(int)objCharacter.Race].FactionID; objCharacter.MapID = Conversions.ToUInteger(CreateInfo.Rows[0]["map"]); objCharacter.ZoneID = Conversions.ToInteger(CreateInfo.Rows[0]["zone"]); objCharacter.positionX = Conversions.ToSingle(CreateInfo.Rows[0]["position_x"]); objCharacter.positionY = Conversions.ToSingle(CreateInfo.Rows[0]["position_y"]); objCharacter.positionZ = Conversions.ToSingle(CreateInfo.Rows[0]["position_z"]); objCharacter.orientation = Conversions.ToSingle(CreateInfo.Rows[0]["orientation"]); checked { objCharacter.bindpoint_map_id = (int)objCharacter.MapID; objCharacter.bindpoint_zone_id = objCharacter.ZoneID; objCharacter.bindpoint_positionX = objCharacter.positionX; objCharacter.bindpoint_positionY = objCharacter.positionY; objCharacter.bindpoint_positionZ = objCharacter.positionZ; objCharacter.Strength.Base = Conversions.ToInteger(LevelStats.Rows[0]["str"]); objCharacter.Agility.Base = Conversions.ToInteger(LevelStats.Rows[0]["agi"]); objCharacter.Stamina.Base = Conversions.ToInteger(LevelStats.Rows[0]["sta"]); objCharacter.Intellect.Base = Conversions.ToInteger(LevelStats.Rows[0]["inte"]); objCharacter.Spirit.Base = Conversions.ToInteger(LevelStats.Rows[0]["spi"]); objCharacter.Life.Base = Conversions.ToInteger(ClassLevelStats.Rows[0]["basehp"]); objCharacter.Life.Current = objCharacter.Life.Maximum; switch (objCharacter.ManaType) { case ManaTypes.TYPE_MANA: objCharacter.Mana.Base = Conversions.ToInteger(ClassLevelStats.Rows[0]["basemana"]); objCharacter.Mana.Current = objCharacter.Mana.Maximum; break; case ManaTypes.TYPE_RAGE: objCharacter.Rage.Base = Conversions.ToInteger(ClassLevelStats.Rows[0]["basemana"]); objCharacter.Rage.Current = 0; break; case ManaTypes.TYPE_ENERGY: objCharacter.Energy.Base = Conversions.ToInteger(ClassLevelStats.Rows[0]["basemana"]); objCharacter.Energy.Current = 0; break; } objCharacter.Damage.Minimum = 5f; objCharacter.Damage.Maximum = 10f; IEnumerator enumerator = default; try { enumerator = CreateInfoSkills.Rows.GetEnumerator(); while (enumerator.MoveNext()) { DataRow row = (DataRow)enumerator.Current; objCharacter.LearnSkill(row.As <int>("Skill"), row.As <short>("SkillMin"), row.As <short>("SkillMax")); } } finally { if (enumerator is IDisposable) { (enumerator as IDisposable).Dispose(); } } var i = 0; do { if ((WorldServiceLocator._WS_DBCDatabase.CharRaces[(int)objCharacter.Race].TaxiMask & (1 << i)) != 0) { objCharacter.TaxiZones.Set(i + 1, value: true); } i++; }while (i <= 31); IEnumerator enumerator2 = default; try { enumerator2 = CreateInfoBars.Rows.GetEnumerator(); while (enumerator2.MoveNext()) { DataRow row = (DataRow)enumerator2.Current; if (Operators.ConditionalCompareObjectGreater(row["action"], 0, TextCompare: false)) { var ButtonPos = row.As <int>("button"); objCharacter.ActionButtons[(byte)ButtonPos] = new WS_PlayerHelper.TActionButton(row.As <int>("action"), row.As <byte>("type"), 0); } } } finally { if (enumerator2 is IDisposable) { (enumerator2 as IDisposable).Dispose(); } } } }