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