diff options
author | Ovahlord <dreadkiller@gmx.de> | 2024-09-14 18:21:09 +0200 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2024-09-14 18:21:09 +0200 |
commit | 3c2aa264c02e86f756e3b0d2bd44f2cb31813994 (patch) | |
tree | b4954459e99d967d52d525ac7ae311e203b57ae9 /src | |
parent | 768e63ad1a50b87d2da0a769e509f4bc3660d400 (diff) |
Core/DataStores: extract, load and use NpcTotalHp and NpcDamageByClass game tables to initialize the damage and health values of creatures
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/DataStores/GameTables.cpp | 10 | ||||
-rw-r--r-- | src/server/game/DataStores/GameTables.h | 32 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/CreatureData.h | 4 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 25 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 2 | ||||
-rw-r--r-- | src/tools/map_extractor/System.cpp | 8 |
6 files changed, 63 insertions, 18 deletions
diff --git a/src/server/game/DataStores/GameTables.cpp b/src/server/game/DataStores/GameTables.cpp index e47033e3655..3c7e1a71f63 100644 --- a/src/server/game/DataStores/GameTables.cpp +++ b/src/server/game/DataStores/GameTables.cpp @@ -31,6 +31,8 @@ GameTable<GtChanceToSpellCritEntry> sChanceToSpellCritGameTable; GameTable<GtChanceToSpellCritBaseEntry> sChanceToSpellCritBaseGameTable; GameTable<GtCombatRatingsEntry> sCombatRatingsGameTable; GameTable<GtNpcManaCostScalerEntry> sNpcManaCostScalerGameTable; +GameTable<GtNpcDamageByClassEntry> sNpcDamageByClassGameTable[MAX_CLASSIC_EXPANSIONS]; +GameTable<GtNpcTotalHpEntry> sNpcTotalHpGameTable[MAX_CLASSIC_EXPANSIONS]; GameTable<GtOctBaseHpByClassEntry> sOctBaseHpByClassGameTable; GameTable<GtOctBaseMpByClassEntry> sOctBaseMpByClassGameTable; GameTable<GtOctClassCombatRatingScalarEntry> sOctClassCombatRatingScalarGameTable; @@ -127,6 +129,14 @@ void LoadGameTables(std::string const& dataPath) LOAD_GT(sChanceToSpellCritBaseGameTable, "ChanceToSpellCritBase.txt"); LOAD_GT(sCombatRatingsGameTable, "CombatRatings.txt"); LOAD_GT(sNpcManaCostScalerGameTable, "NPCManaCostScaler.txt"); + LOAD_GT(sNpcDamageByClassGameTable[0], "NpcDamageByClass.txt"); + LOAD_GT(sNpcDamageByClassGameTable[1], "NpcDamageByClassExp1.txt"); + LOAD_GT(sNpcDamageByClassGameTable[2], "NpcDamageByClassExp2.txt"); + LOAD_GT(sNpcDamageByClassGameTable[3], "NpcDamageByClassExp3.txt"); + LOAD_GT(sNpcTotalHpGameTable[0], "NpcTotalHp.txt"); + LOAD_GT(sNpcTotalHpGameTable[1], "NpcTotalHpExp1.txt"); + LOAD_GT(sNpcTotalHpGameTable[2], "NpcTotalHpExp2.txt"); + LOAD_GT(sNpcTotalHpGameTable[3], "NpcTotalHpExp3.txt"); LOAD_GT(sOctBaseHpByClassGameTable, "OCTBaseHPByClass.txt"); LOAD_GT(sOctBaseMpByClassGameTable, "OCTBaseMPByClass.txt"); LOAD_GT(sOctClassCombatRatingScalarGameTable, "OCTClassCombatRatingScalar.txt"); diff --git a/src/server/game/DataStores/GameTables.h b/src/server/game/DataStores/GameTables.h index 9a1889d1845..d7bc69c9116 100644 --- a/src/server/game/DataStores/GameTables.h +++ b/src/server/game/DataStores/GameTables.h @@ -130,6 +130,36 @@ struct GtNpcManaCostScalerEntry float Scaler = 0.0f; }; +struct GtNpcTotalHpEntry +{ + float Warrior = 0.0f; + float Paladin = 0.0f; + float Hunter = 0.0f; + float Rogue = 0.0f; + float Priest = 0.0f; + float DeathKnight = 0.0f; + float Shaman = 0.0f; + float Mage = 0.0f; + float Warlock = 0.0f; + float Monk = 0.0f; + float Druid = 0.0f; +}; + +struct GtNpcDamageByClassEntry +{ + float Warrior = 0.0f; + float Paladin = 0.0f; + float Hunter = 0.0f; + float Rogue = 0.0f; + float Priest = 0.0f; + float DeathKnight = 0.0f; + float Shaman = 0.0f; + float Mage = 0.0f; + float Warlock = 0.0f; + float Monk = 0.0f; + float Druid = 0.0f; +}; + struct GtOctBaseHpByClassEntry { float Warrior = 0.0f; @@ -301,6 +331,8 @@ TC_GAME_API extern GameTable<GtChanceToSpellCritEntry> sChanceToSpe TC_GAME_API extern GameTable<GtChanceToSpellCritBaseEntry> sChanceToSpellCritBaseGameTable; TC_GAME_API extern GameTable<GtCombatRatingsEntry> sCombatRatingsGameTable; TC_GAME_API extern GameTable<GtNpcManaCostScalerEntry> sNpcManaCostScalerGameTable; +TC_GAME_API extern GameTable<GtNpcDamageByClassEntry> sNpcDamageByClassGameTable[MAX_CLASSIC_EXPANSIONS]; +TC_GAME_API extern GameTable<GtNpcTotalHpEntry> sNpcTotalHpGameTable[MAX_CLASSIC_EXPANSIONS]; TC_GAME_API extern GameTable<GtOctBaseHpByClassEntry> sOctBaseHpByClassGameTable; TC_GAME_API extern GameTable<GtOctBaseMpByClassEntry> sOctBaseMpByClassGameTable; TC_GAME_API extern GameTable<GtOctClassCombatRatingScalarEntry> sOctClassCombatRatingScalarGameTable; diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h index 97cde1515c2..3df1c7d4cf0 100644 --- a/src/server/game/Entities/Creature/CreatureData.h +++ b/src/server/game/Entities/Creature/CreatureData.h @@ -564,12 +564,12 @@ struct TC_GAME_API CreatureTemplate // Defines base stats for creatures (used to calculate HP/mana/armor/attackpower/rangedattackpower/all damage). struct TC_GAME_API CreatureBaseStats { - std::array<uint32, CURRENT_EXPANSION + 1> BaseHealth; + std::array<uint32, MAX_CLASSIC_EXPANSIONS> BaseHealth; uint32 BaseMana = 0; uint32 BaseArmor = 0; uint32 AttackPower = 0; uint32 RangedAttackPower = 0; - std::array<float, CURRENT_EXPANSION + 1> BaseDamage; + std::array<float, MAX_CLASSIC_EXPANSIONS> BaseDamage; // Helpers diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index f9a4c0cc290..ab9e82c147f 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -9852,8 +9852,8 @@ CreatureBaseStats const* ObjectMgr::GetCreatureBaseStats(uint8 level, uint8 unit void ObjectMgr::LoadCreatureClassLevelStats() { uint32 oldMSTime = getMSTime(); - // 0 1 2 3 4 5 6 7 8 9 10 12 13 14 - QueryResult result = WorldDatabase.Query("SELECT level, class, basehp0, basehp1, basehp2, basehp3, basemana, basearmor, attackpower, rangedattackpower, damage_base, damage_exp1, damage_exp2, damage_exp3 FROM creature_classlevelstats"); + // 0 1 2 3 4 5 + QueryResult result = WorldDatabase.Query("SELECT level, class, basemana, basearmor, attackpower, rangedattackpower FROM creature_classlevelstats"); if (!result) { @@ -9874,17 +9874,10 @@ void ObjectMgr::LoadCreatureClassLevelStats() CreatureBaseStats stats; - for (uint8 i = 0; i <= CURRENT_EXPANSION; ++i) + for (uint8 i = 0; i < MAX_CLASSIC_EXPANSIONS; ++i) { - stats.BaseHealth[i] = fields[2 + i].GetUInt32(); - - if (stats.BaseHealth[i] == 0) - { - TC_LOG_ERROR("sql.sql", "Creature base stats for class {}, level {} has invalid zero base HP[{}] - set to 1", Class, Level, i); - stats.BaseHealth[i] = 1; - } - - stats.BaseDamage[i] = fields[10 + i].GetFloat(); + stats.BaseHealth[i] = GetGameTableColumnForClass(sNpcTotalHpGameTable[i].GetRow(Level), Class); + stats.BaseDamage[i] = GetGameTableColumnForClass(sNpcDamageByClassGameTable[i].GetRow(Level), Class); if (stats.BaseDamage[i] < 0.0f) { TC_LOG_ERROR("sql.sql", "Creature base stats for class {}, level {} has invalid negative base damage[{}] - set to 0.0", Class, Level, i); @@ -9892,11 +9885,11 @@ void ObjectMgr::LoadCreatureClassLevelStats() } } - stats.BaseMana = fields[6].GetUInt32(); - stats.BaseArmor = fields[7].GetUInt32(); + stats.BaseMana = fields[2].GetUInt32(); + stats.BaseArmor = fields[3].GetUInt32(); - stats.AttackPower = fields[8].GetUInt16(); - stats.RangedAttackPower = fields[9].GetUInt16(); + stats.AttackPower = fields[4].GetUInt16(); + stats.RangedAttackPower = fields[5].GetUInt16(); _creatureBaseStatsStore[MAKE_PAIR16(Level, Class)] = stats; diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 43665c1da5a..eec7e2c16fe 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -91,6 +91,8 @@ enum Expansions EXPANSION_THE_BURNING_CRUSADE = 1, EXPANSION_WRATH_OF_THE_LICH_KING = 2, EXPANSION_CATACLYSM = 3, + MAX_CLASSIC_EXPANSIONS, + EXPANSION_MISTS_OF_PANDARIA = 4, EXPANSION_WARLORDS_OF_DRAENOR = 5, EXPANSION_LEGION = 6, diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp index 59499aab599..13b72a5d38a 100644 --- a/src/tools/map_extractor/System.cpp +++ b/src/tools/map_extractor/System.cpp @@ -1340,6 +1340,14 @@ void ExtractGameTables() { 3999264, "ChanceToSpellCritBase.txt" }, { 1391669, "CombatRatings.txt" }, { 1391651, "NPCManaCostScaler.txt" }, + { 1391644, "NpcDamageByClass.txt" }, + { 1391645, "NpcDamageByClassExp1.txt" }, + { 1391646, "NpcDamageByClassExp2.txt" }, + { 1391647, "NpcDamageByClassExp3.txt" }, + { 1391652, "NpcTotalHp.txt" }, + { 1391653, "NpcTotalHpExp1.txt" }, + { 1391654, "NpcTotalHpExp2.txt" }, + { 1391655, "NpcTotalHpExp3.txt" }, { 5464960, "OCTBaseHPByClass.txt" }, { 4049853, "OCTBaseMPByClass.txt" }, { 4526467, "OCTClassCombatRatingScalar.txt" }, |