From a53cc2319e743510affa5c528aadf2136c46d907 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sat, 14 Nov 2020 01:04:35 +0100 Subject: [PATCH] Core/Spells: make SPELL_AURA_MOD_RESISTANCE respect stacking rules --- src/server/game/Spells/Auras/SpellAuraEffects.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index dc10d12079..cfa7dcffd0 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -3367,14 +3367,22 @@ void AuraEffect::HandleAuraModBaseResistancePCT(AuraApplication const* aurApp, u return; Unit* target = aurApp->GetTarget(); + int32 spellGroupVal = target->GetHighestExclusiveSameEffectSpellGroupValue(this, SPELL_AURA_MOD_RESISTANCE); + if (abs(spellGroupVal) >= abs(GetAmount())) + return; // only players and pets have base stats if (target->GetTypeId() == TYPEID_PLAYER || target->IsPet()) { - for (int8 x = SPELL_SCHOOL_NORMAL; x < MAX_SPELL_SCHOOL; x++) + for (int8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; i++) { - if (GetMiscValue() & int32(1<HandleStatModifier(UnitMods(UNIT_MOD_RESISTANCE_START + x), BASE_PCT, float(GetAmount()), apply); + if (GetMiscValue() & int32(1 << i)) + { + if (spellGroupVal) + target->HandleStatModifier(UnitMods(UNIT_MOD_RESISTANCE_START + i), BASE_PCT, (float)spellGroupVal, !apply); + + target->HandleStatModifier(UnitMods(UNIT_MOD_RESISTANCE_START + i), BASE_PCT, float(GetAmount()), apply); + } } } }