aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorOvahlord <dreadkiller@gmx.de>2024-08-19 04:31:55 +0200
committerOvahlord <dreadkiller@gmx.de>2024-08-19 04:31:55 +0200
commit7ed0d6f2286adc6cdbcd9669dccd8d72fd6758ce (patch)
tree08109d4dda9a66d3acd906888b15a4a07a9b28e3 /src
parentbd366706b720376bb349dacb05bdc6e81eea3493 (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.cpp16
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;