diff options
-rw-r--r-- | src/server/game/DataStores/GameTables.cpp | 4 | ||||
-rw-r--r-- | src/server/game/DataStores/GameTables.h | 41 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 58 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 6 |
4 files changed, 54 insertions, 55 deletions
diff --git a/src/server/game/DataStores/GameTables.cpp b/src/server/game/DataStores/GameTables.cpp index a3ce7e1b08a..e47033e3655 100644 --- a/src/server/game/DataStores/GameTables.cpp +++ b/src/server/game/DataStores/GameTables.cpp @@ -33,7 +33,7 @@ GameTable<GtCombatRatingsEntry> sCombatRatingsGameTable; GameTable<GtNpcManaCostScalerEntry> sNpcManaCostScalerGameTable; GameTable<GtOctBaseHpByClassEntry> sOctBaseHpByClassGameTable; GameTable<GtOctBaseMpByClassEntry> sOctBaseMpByClassGameTable; -GameTable<GtOctClassCombatRatingScalarEntry> sOctClassCombatRazingScalarGameTable; +GameTable<GtOctClassCombatRatingScalarEntry> sOctClassCombatRatingScalarGameTable; GameTable<GtOctHpPerStaminaEntry> sOctHpPerStaminaGameTable; GameTable<GtOctRegenHpEntry> sOctRegenHpGameTable; GameTable<GtOctRegenMpEntry> sOctRegenMpGameTable; @@ -129,7 +129,7 @@ void LoadGameTables(std::string const& dataPath) LOAD_GT(sNpcManaCostScalerGameTable, "NPCManaCostScaler.txt"); LOAD_GT(sOctBaseHpByClassGameTable, "OCTBaseHPByClass.txt"); LOAD_GT(sOctBaseMpByClassGameTable, "OCTBaseMPByClass.txt"); - LOAD_GT(sOctClassCombatRazingScalarGameTable, "OCTClassCombatRatingScalar.txt"); + LOAD_GT(sOctClassCombatRatingScalarGameTable, "OCTClassCombatRatingScalar.txt"); LOAD_GT(sOctHpPerStaminaGameTable, "OCTHPPerStamina.txt"); LOAD_GT(sOctRegenHpGameTable, "OCTRegenHP.txt"); LOAD_GT(sOctRegenMpGameTable, "OCTRegenMP.txt"); diff --git a/src/server/game/DataStores/GameTables.h b/src/server/game/DataStores/GameTables.h index ab4f7a18470..713b8233178 100644 --- a/src/server/game/DataStores/GameTables.h +++ b/src/server/game/DataStores/GameTables.h @@ -22,6 +22,7 @@ #include "Common.h" #include <vector> +enum CombatRating : uint8; enum InventoryType : uint8; struct GtBarberShopCostBaseEntry @@ -303,7 +304,7 @@ TC_GAME_API extern GameTable<GtCombatRatingsEntry> sCombatRatin TC_GAME_API extern GameTable<GtNpcManaCostScalerEntry> sNpcManaCostScalerGameTable; TC_GAME_API extern GameTable<GtOctBaseHpByClassEntry> sOctBaseHpByClassGameTable; TC_GAME_API extern GameTable<GtOctBaseMpByClassEntry> sOctBaseMpByClassGameTable; -TC_GAME_API extern GameTable<GtOctClassCombatRatingScalarEntry> sOctClassCombatRazingScalarGameTable; +TC_GAME_API extern GameTable<GtOctClassCombatRatingScalarEntry> sOctClassCombatRatingScalarGameTable; TC_GAME_API extern GameTable<GtOctHpPerStaminaEntry> sOctHpPerStaminaGameTable; TC_GAME_API extern GameTable<GtOctRegenHpEntry> sOctRegenHpGameTable; TC_GAME_API extern GameTable<GtOctRegenMpEntry> sOctRegenMpGameTable; @@ -387,4 +388,42 @@ inline float GetSpellScalingColumnForClass(GtSpellScalingEntry const* row, int32 return 0.0f; } +template<class T> +inline float GetGameTableColumnForCombatRating(T const* row, CombatRating combatRating) +{ + switch (combatRating) + { + case CR_DEFENSE_SKILL: + return row->DefenseSkill; + case CR_DODGE: + return row->Dodge; + case CR_PARRY: + return row->Parry; + case CR_BLOCK: + return row->Block; + case CR_HIT_MELEE: + return row->HitMelee; + case CR_HIT_RANGED: + return row->HitRanged; + case CR_HIT_SPELL: + return row->HitSpell; + case CR_CRIT_MELEE: + return row->CritMelee; + case CR_CRIT_RANGED: + return row->CritRanged; + case CR_CRIT_SPELL: + return row->CritSpell; + case CR_HASTE_MELEE: + return row->HasteMelee; + case CR_HASTE_RANGED: + return row->HasteRanged; + case CR_HASTE_SPELL: + return row->HasteSpell; + default: + break; + } + + return 0.0f; +}; + #endif // GameTables_h__ diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 83aaf6d35d9..07ec1487a44 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -5108,54 +5108,17 @@ void Player::GetDodgeFromAgility(float &/*diminishing*/, float &/*nondiminishing //nondiminishing = 100.0f * (dodge_base[pclass-1] + base_agility * dodgeRatio->ratio * crit_to_dodge[pclass-1]); } -inline float GetGameTableColumnForCombatRating(GtCombatRatingsEntry const* row, uint32 rating) -{ - switch (rating) - { - case CR_DEFENSE_SKILL: - return row->DefenseSkill; - case CR_DODGE: - return row->Dodge; - case CR_PARRY: - return row->Parry; - case CR_BLOCK: - return row->Block; - case CR_HIT_MELEE: - return row->HitMelee; - case CR_HIT_RANGED: - return row->HitRanged; - case CR_HIT_SPELL: - return row->HitSpell; - case CR_CRIT_MELEE: - return row->CritMelee; - case CR_CRIT_RANGED: - return row->CritRanged; - case CR_CRIT_SPELL: - return row->CritSpell; - case CR_HASTE_MELEE: - return row->HasteMelee; - case CR_HASTE_RANGED: - return row->HasteRanged; - case CR_HASTE_SPELL: - return row->HasteSpell; - default: - break; - } - - return 1.0f; -} - float Player::GetRatingMultiplier(CombatRating cr) const { - GtCombatRatingsEntry const* Rating = sCombatRatingsGameTable.GetRow(GetLevel()); - if (!Rating) - return 1.0f; + float combatRatingRatio = GetGameTableColumnForCombatRating(sCombatRatingsGameTable.GetRow(GetLevel()), cr); + if (combatRatingRatio == 0.0f) + return 1.0f; // By default use minimum coefficient (not must be called) - float value = GetGameTableColumnForCombatRating(Rating, cr); - if (!value) - return 1.0f; // By default use minimum coefficient (not must be called) + float classRatingRatio = GetGameTableColumnForClass(sOctClassCombatRatingScalarGameTable.GetRow(cr), GetClass()); + if (classRatingRatio == 0.0f) + return 1.0f; // By default use minimum coefficient (not must be called) - return 1.0f / value; + return classRatingRatio / combatRatingRatio; } float Player::GetRatingBonusValue(CombatRating cr) const @@ -5271,7 +5234,7 @@ void Player::UpdateRating(CombatRating cr) switch (cr) { - case CR_AMPLIFY: + case CR_UNUSED_0: case CR_DEFENSE_SKILL: break; case CR_DODGE: @@ -5366,7 +5329,7 @@ void Player::UpdateRating(CombatRating cr) UpdateMastery(); break; case CR_PVP_POWER: - case CR_CLEAVE: + case CR_UNUSED_27: break; case CR_VERSATILITY_DAMAGE_DONE: UpdateVersatilityDamageDone(); @@ -7727,9 +7690,6 @@ void Player::_ApplyItemBonuses(Item* item, uint8 slot, bool apply) return; uint32 itemLevel = item->GetItemLevel(this); - //float combatRatingMultiplier = 1.0f; - //if (GtCombatRatingsMultByILvl const* ratingMult = sCombatRatingsMultByILvlGameTable.GetRow(itemLevel)) - // combatRatingMultiplier = GetIlvlStatMultiplier(ratingMult, proto->GetInventoryType()); for (uint8 i = 0; i < MAX_ITEM_PROTO_STATS; ++i) { diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index bef14e1f976..367a5c775bb 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -308,9 +308,9 @@ enum UnitState : uint32 TC_GAME_API extern float baseMoveSpeed[MAX_MOVE_TYPE]; TC_GAME_API extern float playerBaseMoveSpeed[MAX_MOVE_TYPE]; -enum CombatRating +enum CombatRating : uint8 { - CR_AMPLIFY = 0, + CR_UNUSED_0 = 0, CR_DEFENSE_SKILL = 1, CR_DODGE = 2, CR_PARRY = 3, @@ -337,7 +337,7 @@ enum CombatRating CR_ARMOR_PENETRATION = 24, CR_MASTERY = 25, CR_PVP_POWER = 26, - CR_CLEAVE = 27, + CR_UNUSED_27 = 27, CR_VERSATILITY_DAMAGE_DONE = 28, CR_VERSATILITY_HEALING_DONE = 29, CR_VERSATILITY_DAMAGE_TAKEN = 30, |