diff options
author | Unholychick <lucas__jensen@hotmail.com> | 2015-07-24 17:05:11 +0200 |
---|---|---|
committer | LuqJensen <lucas__jensen@hotmail.com> | 2015-08-08 22:11:07 +0200 |
commit | 226a7372339ca7c2f5130933593f72433ab3232c (patch) | |
tree | cba05793e1fc29c9863c7e250f09ecf61c847fca | |
parent | 9f04cbad21da255f800919bac824cc0201572861 (diff) |
[3.3.5] Core/Spells: Fix Shattered Barrier triggering on dispel
Prevents Shattered Barrier talent from triggering when Ice Barrier is dispelled. It should only trigger when Ice Barrier is removed by damage(destroyed).
Closes #14555
Closes #14605
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuras.cpp | 10 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_mage.cpp | 25 |
2 files changed, 25 insertions, 10 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index e6f01dea33e..4eea5eed03d 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1419,16 +1419,6 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b default: break; } - if (!caster) - break; - // Ice barrier - dispel/absorb remove - if (removeMode == AURA_REMOVE_BY_ENEMY_SPELL && GetSpellInfo()->SpellFamilyFlags[1] & 0x1) - { - // Shattered Barrier - if (AuraEffect* dummy = caster->GetDummyAuraEffect(SPELLFAMILY_MAGE, 2945, 0)) - if (roll_chance_i(dummy->GetSpellInfo()->ProcChance)) - caster->CastSpell(target, 55080, true, NULL, GetEffect(0)); - } break; case SPELLFAMILY_WARRIOR: if (!caster) diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index 4edbf8822f7..c45442e1f80 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -45,11 +45,17 @@ enum MageSpells SPELL_MAGE_WORGEN_FORM = 32819, SPELL_MAGE_SHEEP_FORM = 32820, SPELL_MAGE_GLYPH_OF_ETERNAL_WATER = 70937, + SPELL_MAGE_SHATTERED_BARRIER = 55080, SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT = 70908, SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY = 70907, SPELL_MAGE_GLYPH_OF_BLAST_WAVE = 62126, }; +enum MageSpellIcons +{ + SPELL_ICON_MAGE_SHATTERED_BARRIER = 2945 +}; + // Incanter's Absorbtion class spell_mage_incanters_absorbtion_base_AuraScript : public AuraScript { @@ -321,6 +327,13 @@ class spell_mage_ice_barrier : public SpellScriptLoader { PrepareAuraScript(spell_mage_ice_barrier_AuraScript); + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_SHATTERED_BARRIER)) + return false; + return true; + } + void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated) { canBeRecalculated = false; @@ -341,10 +354,22 @@ class spell_mage_ice_barrier : public SpellScriptLoader } } + void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + // Shattered Barrier + // Procs only if removed by damage. + if (aurEff->GetAmount() <= 0) + if (Unit* caster = GetCaster()) + if (AuraEffect* dummy = caster->GetDummyAuraEffect(SPELLFAMILY_MAGE, SPELL_ICON_MAGE_SHATTERED_BARRIER, EFFECT_0)) + if (roll_chance_i(dummy->GetSpellInfo()->ProcChance)) + caster->CastSpell(GetTarget(), SPELL_MAGE_SHATTERED_BARRIER, true, nullptr, aurEff); + } + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_ice_barrier_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); AfterEffectAbsorb += AuraEffectAbsorbFn(spell_mage_ice_barrier_AuraScript::Trigger, EFFECT_0); + AfterEffectRemove += AuraEffectRemoveFn(spell_mage_ice_barrier_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB, AURA_EFFECT_HANDLE_REAL); } }; |