diff options
author | Ovahlord <dreadkiller@gmx.de> | 2024-08-19 04:31:55 +0200 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2024-08-19 04:31:55 +0200 |
commit | 7ed0d6f2286adc6cdbcd9669dccd8d72fd6758ce (patch) | |
tree | 08109d4dda9a66d3acd906888b15a4a07a9b28e3 /src | |
parent | bd366706b720376bb349dacb05bdc6e81eea3493 (diff) |
Core/Player: no longer use the sOctClassCombatRatingScalar game table to calculate rating bonus multipliers to match current live server's values
* this is a 'blizzlike' bug that is causing mastery rating from items to be 25% stronger than it should be
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index f9c55a8457f..4701b43ec5a 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -4889,20 +4889,20 @@ inline float GetGameTableColumnForCombatRating(GtCombatRatingsEntry const* row, float Player::GetRatingMultiplier(CombatRating cr) const { - float combatRatingRatio = GetGameTableColumnForCombatRating(sCombatRatingsGameTable.GetRow(GetLevel()), cr); - if (combatRatingRatio == 0.0f) - return 1.0f; // By default use minimum coefficient (not must be called) + GtCombatRatingsEntry const* Rating = sCombatRatingsGameTable.GetRow(GetLevel()); + if (!Rating) + return 1.0f; - float classRatingRatio = GetGameTableColumnForClass(sOctClassCombatRatingScalarGameTable.GetRow(cr), GetClass()); - if (classRatingRatio == 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) - return classRatingRatio / combatRatingRatio; + return 1.0f / value; } float Player::GetRatingBonusValue(CombatRating cr) const { - float baseResult = float(m_activePlayerData->CombatRatings[cr]) * GetRatingMultiplier(cr); + float baseResult = (float)m_activePlayerData->CombatRatings[cr] * GetRatingMultiplier(cr); if (cr != CR_RESILIENCE_PLAYER_DAMAGE) return baseResult; return float(1.0f - pow(0.99f, baseResult)) * 100.0f; |