aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game/SpellAuras.cpp3
-rw-r--r--src/game/SpellMgr.cpp6
2 files changed, 8 insertions, 1 deletions
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index a43d748849b..f7fa9c18287 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -7388,7 +7388,8 @@ void AuraEffect::HandleReflectSpells( bool Apply, bool Real , bool /*changeAmoun
// implemented in Unit::SpellHitResult
// only special case
- if(!Apply && Real && m_spellProto->SpellFamilyName == SPELLFAMILY_WARRIOR && m_spellProto->SpellFamilyFlags[1] & 0x2)
+ if(!Apply && Real && GetParentAura()->GetRemoveMode() != AURA_REMOVE_BY_DEFAULT
+ && m_spellProto->SpellFamilyName == SPELLFAMILY_WARRIOR && m_spellProto->SpellFamilyFlags[1] & 0x2)
{
if (Unit * caster = GetCaster())
{
diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp
index a5d5033284e..8110c5a3a1d 100644
--- a/src/game/SpellMgr.cpp
+++ b/src/game/SpellMgr.cpp
@@ -2826,6 +2826,11 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2, bool
for(uint32 i = 0; i < 3; ++i)
if (spellInfo_1->Effect[i] == SPELL_EFFECT_APPLY_AURA
|| spellInfo_1->Effect[i] == SPELL_EFFECT_PERSISTENT_AREA_AURA)
+ {
+ // not channeled AOE effects can stack
+ if(IsAreaEffectTarget[spellInfo_1->EffectImplicitTargetA[i]] || IsAreaEffectTarget[spellInfo_1->EffectImplicitTargetB[i]]
+ && !IsChanneledSpell(spellInfo_1))
+ continue;
// not area auras (shaman totem)
switch(spellInfo_1->EffectApplyAuraName[i])
{
@@ -2844,6 +2849,7 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2, bool
default:
break;
}
+ }
}
spellId_2 = GetLastSpellInChain(spellId_2);