aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/DataStores/GameTables.cpp10
-rw-r--r--src/server/game/DataStores/GameTables.h32
-rw-r--r--src/server/game/Entities/Creature/CreatureData.h4
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp25
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h2
-rw-r--r--src/tools/map_extractor/System.cpp8
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" },