diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/SpellAuras.cpp | 13 | ||||
-rw-r--r-- | src/game/SpellMgr.h | 5 | ||||
-rw-r--r-- | src/game/Unit.cpp | 13 |
3 files changed, 24 insertions, 7 deletions
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 767cc512561..b4bedebbfe9 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -1043,7 +1043,13 @@ void Aura::_RemoveAura() ProcCaster = PROC_FLAG_SUCCESSFUL_NEGATIVE_SPELL_HIT; ProcVictim = PROC_FLAG_TAKEN_NEGATIVE_SPELL_HIT; } - caster->ProcDamageAndSpell(m_target,ProcCaster, ProcVictim, PROC_EX_AURA_REMOVE, 0, BASE_ATTACK, m_spellProto); + uint32 procEx=0; + if (m_removeMode == AURA_REMOVE_BY_DISPEL) + procEx = PROC_EX_AURA_REMOVE_DISPEL; + else if (m_removeMode == AURA_REMOVE_BY_DEFAULT) + procEx = PROC_EX_AURA_REMOVE_EXPIRE; + + caster->ProcDamageAndSpell(m_target,ProcCaster, ProcVictim, procEx, m_modifier.m_amount, BASE_ATTACK, m_spellProto); } } } @@ -2051,9 +2057,10 @@ void Aura::HandleAuraDummy(bool apply, bool Real) // Living Bomb if (m_spellProto->SpellFamilyFlags[1] & 0x20000) { - if(!m_target || !caster || !(m_removeMode == AURA_REMOVE_BY_DISPEL || m_removeMode == AURA_REMOVE_BY_DEFAULT)) + if(!m_target || !(m_removeMode == AURA_REMOVE_BY_DISPEL || m_removeMode == AURA_REMOVE_BY_DEFAULT)) return; - caster->CastSpell(m_target, GetModifier()->m_amount, true, NULL, NULL, GetCasterGUID()); + Unit* target=NULL; + m_target->CastSpell(m_target, GetModifier()->m_amount, true, NULL, NULL, GetCasterGUID()); return; } break; diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index 45e88abe4de..f0bebd5718a 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -603,9 +603,8 @@ enum ProcFlagsEx PROC_EX_ABSORB = 0x0000400, PROC_EX_REFLECT = 0x0000800, PROC_EX_INTERRUPT = 0x0001000, // Melee hit result can be Interrupt (not used) - PROC_EX_AURA_REMOVE = 0x0002000, - PROC_EX_RESERVED2 = 0x0004000, - PROC_EX_RESERVED3 = 0x0008000, + PROC_EX_AURA_REMOVE_DISPEL = 0x0002000, + PROC_EX_AURA_REMOVE_EXPIRE = 0x0004000, PROC_EX_EX_TRIGGER_ALWAYS = 0x0010000, // If set trigger always ( no matter another flags) used for drop charges PROC_EX_EX_ONE_TIME_TRIGGER = 0x0020000 // If set trigger always but only one time (not used) }; diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index aa4ff05828a..d1cf3a14027 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -2181,7 +2181,7 @@ void Unit::CalcAbsorbResist(Unit *pVictim,SpellSchoolMask schoolMask, DamageEffe { if ((*i)->GetModifier()->m_amount<=0) { - pVictim->RemoveAurasDueToSpell((*i)->GetId()); + pVictim->RemoveAurasByCasterSpell((*i)->GetId(), (*i)->GetCasterGUID()); i = vSchoolAbsorb.begin(); } else @@ -5376,6 +5376,17 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu triggered_spell_id = 29077; break; } + // Shattered Barrier + if (dummySpell->SpellIconID == 2945) + { + // only on dispel/remove aura by sestroy + if (procEx & PROC_EX_AURA_REMOVE_EXPIRE && damage) + return false; + target = NULL; + triggered_spell_id = 55080; + CastSpell(target, triggered_spell_id, true); + return true; + } // Hot Streak if (dummySpell->SpellIconID == 2999) { |