From 38784337a2569f8b61706cc69e136479ec48660a Mon Sep 17 00:00:00 2001 From: Ovahlord <18347559+ovahlord@users.noreply.github.com> Date: Thu, 11 Jun 2026 15:23:08 +0200 Subject: [PATCH] Core/Auras: refresh combat rating gained from SPELL_AURA_MOD_RATING_FROM_STAT whenever a stat updates --- src/server/game/Entities/Unit/Stats.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/server/game/Entities/Unit/Stats.cpp b/src/server/game/Entities/Unit/Stats.cpp index d8aa10255c..e3b93a19e9 100644 --- a/src/server/game/Entities/Unit/Stats.cpp +++ b/src/server/game/Entities/Unit/Stats.cpp @@ -274,6 +274,26 @@ void Stats::updateStat(StatType statType) default: break; } + + // Whenever a stat changes make sure that SPELL_AURA_MOD_RATING_FROM_STAT is being updated as well + // since it directly depends on the latest stat value + if (_owner->IsPlayer() && _owner->HasAuraType(SPELL_AURA_MOD_RATING_FROM_STAT)) + { + uint32 combatRatingMask = 0; + for (AuraEffect const* aurEff : _owner->GetAuraEffectsByType(SPELL_AURA_MOD_RATING_FROM_STAT)) + { + if (static_cast(aurEff->GetMiscValueB()) == statType) + combatRatingMask |= aurEff->GetMiscValue(); + } + + Player* player = Object::ToPlayer(_owner); + if (combatRatingMask) + { + for (uint32 rating = 0; rating < MAX_COMBAT_RATING; ++rating) + if ((combatRatingMask & (1 << rating)) != 0) + player->ApplyRatingMod(CombatRating(rating), 0, true); + } + } } float Stats::getAuraMultiplierForStatType(AuraType auraType, StatType statType) const