diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Spells/spell_mage.cpp | 1555 |
1 files changed, 629 insertions, 926 deletions
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index 79fd6e203f6..a7fc940a3bf 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -140,311 +140,223 @@ public: }; // -31571 - Arcane Potency -class spell_mage_arcane_potency : public SpellScriptLoader +class spell_mage_arcane_potency : public AuraScript { - public: - spell_mage_arcane_potency() : SpellScriptLoader("spell_mage_arcane_potency") { } + PrepareAuraScript(spell_mage_arcane_potency); - class spell_mage_arcane_potency_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( { - PrepareAuraScript(spell_mage_arcane_potency_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo( - { - SPELL_MAGE_ARCANE_POTENCY_RANK_1, - SPELL_MAGE_ARCANE_POTENCY_RANK_2 - }); - } - - bool CheckProc(ProcEventInfo& eventInfo) - { - // due to family mask sharing with brain freeze/missile barrage proc, we need to filter out by icon id - SpellInfo const* spellInfo = eventInfo.GetSpellInfo(); - if (!spellInfo || (spellInfo->SpellIconID != SPELL_ICON_MAGE_CLEARCASTING && spellInfo->SpellIconID != SPELL_ICON_MAGE_PRESENCE_OF_MIND)) - return false; + SPELL_MAGE_ARCANE_POTENCY_RANK_1, + SPELL_MAGE_ARCANE_POTENCY_RANK_2 + }); + } - return true; - } + bool CheckProc(ProcEventInfo& eventInfo) + { + // due to family mask sharing with brain freeze/missile barrage proc, we need to filter out by icon id + SpellInfo const* spellInfo = eventInfo.GetSpellInfo(); + if (!spellInfo || (spellInfo->SpellIconID != SPELL_ICON_MAGE_CLEARCASTING && spellInfo->SpellIconID != SPELL_ICON_MAGE_PRESENCE_OF_MIND)) + return false; - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) - { - static uint32 const triggerSpell[2] = { SPELL_MAGE_ARCANE_POTENCY_RANK_1, SPELL_MAGE_ARCANE_POTENCY_RANK_2 }; + return true; + } - PreventDefaultAction(); - Unit* caster = eventInfo.GetActor(); - uint32 spellId = triggerSpell[GetSpellInfo()->GetRank() - 1]; - caster->CastSpell(caster, spellId, aurEff); - } + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + static uint32 const triggerSpell[2] = { SPELL_MAGE_ARCANE_POTENCY_RANK_1, SPELL_MAGE_ARCANE_POTENCY_RANK_2 }; - void Register() override - { - DoCheckProc += AuraCheckProcFn(spell_mage_arcane_potency_AuraScript::CheckProc); - OnEffectProc += AuraEffectProcFn(spell_mage_arcane_potency_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; + PreventDefaultAction(); + Unit* caster = eventInfo.GetActor(); + uint32 spellId = triggerSpell[GetSpellInfo()->GetRank() - 1]; + caster->CastSpell(caster, spellId, aurEff); + } - AuraScript* GetAuraScript() const override - { - return new spell_mage_arcane_potency_AuraScript(); - } + void Register() override + { + DoCheckProc += AuraCheckProcFn(spell_mage_arcane_potency::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_mage_arcane_potency::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } }; // -11113 - Blast Wave -class spell_mage_blast_wave : public SpellScriptLoader +class spell_mage_blast_wave : public SpellScript { - public: - spell_mage_blast_wave() : SpellScriptLoader("spell_mage_blast_wave") { } - - class spell_mage_blast_wave_SpellScript : public SpellScript - { - PrepareSpellScript(spell_mage_blast_wave_SpellScript); + PrepareSpellScript(spell_mage_blast_wave); - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MAGE_GLYPH_OF_BLAST_WAVE }); - } - - void HandleKnockBack(SpellEffIndex effIndex) - { - if (GetCaster()->HasAura(SPELL_MAGE_GLYPH_OF_BLAST_WAVE)) - PreventHitDefaultEffect(effIndex); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MAGE_GLYPH_OF_BLAST_WAVE }); + } - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_mage_blast_wave_SpellScript::HandleKnockBack, EFFECT_2, SPELL_EFFECT_KNOCK_BACK); - } - }; + void HandleKnockBack(SpellEffIndex effIndex) + { + if (GetCaster()->HasAura(SPELL_MAGE_GLYPH_OF_BLAST_WAVE)) + PreventHitDefaultEffect(effIndex); + } - SpellScript* GetSpellScript() const override - { - return new spell_mage_blast_wave_SpellScript(); - } + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_mage_blast_wave::HandleKnockBack, EFFECT_2, SPELL_EFFECT_KNOCK_BACK); + } }; // -31641 - Blazing Speed -class spell_mage_blazing_speed : public SpellScriptLoader +class spell_mage_blazing_speed : public AuraScript { -public: - spell_mage_blazing_speed() : SpellScriptLoader("spell_mage_blazing_speed") { } + PrepareAuraScript(spell_mage_blazing_speed); - class spell_mage_blazing_speed_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareAuraScript(spell_mage_blazing_speed_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MAGE_BLAZING_SPEED }); - } - - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - if (Unit* target = eventInfo.GetActionTarget()) - target->CastSpell(target, SPELL_MAGE_BLAZING_SPEED, aurEff); - } + return ValidateSpellInfo({ SPELL_MAGE_BLAZING_SPEED }); + } - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_mage_blazing_speed_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); - } - }; + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + if (Unit* target = eventInfo.GetActionTarget()) + target->CastSpell(target, SPELL_MAGE_BLAZING_SPEED, aurEff); + } - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_mage_blazing_speed_AuraScript(); + OnEffectProc += AuraEffectProcFn(spell_mage_blazing_speed::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); } }; // -54747 - Burning Determination // 54748 - Burning Determination -class spell_mage_burning_determination : public SpellScriptLoader +class spell_mage_burning_determination : public AuraScript { - public: - spell_mage_burning_determination() : SpellScriptLoader("spell_mage_burning_determination") { } - - class spell_mage_burning_determination_AuraScript : public AuraScript - { - PrepareAuraScript(spell_mage_burning_determination_AuraScript); - - bool CheckProc(ProcEventInfo& eventInfo) - { - if (SpellInfo const* spellInfo = eventInfo.GetSpellInfo()) - if (spellInfo->GetAllEffectsMechanicMask() & ((1 << MECHANIC_INTERRUPT) | (1 << MECHANIC_SILENCE))) - return true; + PrepareAuraScript(spell_mage_burning_determination); - return false; - } + bool CheckProc(ProcEventInfo& eventInfo) + { + if (SpellInfo const* spellInfo = eventInfo.GetSpellInfo()) + if (spellInfo->GetAllEffectsMechanicMask() & ((1 << MECHANIC_INTERRUPT) | (1 << MECHANIC_SILENCE))) + return true; - void Register() override - { - DoCheckProc += AuraCheckProcFn(spell_mage_burning_determination_AuraScript::CheckProc); - } - }; + return false; + } - AuraScript* GetAuraScript() const override - { - return new spell_mage_burning_determination_AuraScript(); - } + void Register() override + { + DoCheckProc += AuraCheckProcFn(spell_mage_burning_determination::CheckProc); + } }; // -44449 - Burnout -class spell_mage_burnout : public SpellScriptLoader +class spell_mage_burnout : public AuraScript { - public: - spell_mage_burnout() : SpellScriptLoader("spell_mage_burnout") { } - - class spell_mage_burnout_AuraScript : public AuraScript - { - PrepareAuraScript(spell_mage_burnout_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MAGE_BURNOUT }); - } + PrepareAuraScript(spell_mage_burnout); - bool CheckProc(ProcEventInfo& eventInfo) - { - DamageInfo* damageInfo = eventInfo.GetDamageInfo(); - if (!damageInfo || !damageInfo->GetSpellInfo()) - return false; + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MAGE_BURNOUT }); + } - return true; - } + bool CheckProc(ProcEventInfo& eventInfo) + { + DamageInfo* damageInfo = eventInfo.GetDamageInfo(); + if (!damageInfo || !damageInfo->GetSpellInfo()) + return false; - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); + return true; + } - int32 mana = eventInfo.GetDamageInfo()->GetSpellInfo()->CalcPowerCost(GetTarget(), eventInfo.GetDamageInfo()->GetSchoolMask()); - mana = CalculatePct(mana, aurEff->GetAmount()); + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); - CastSpellExtraArgs args(aurEff); - args.AddSpellBP0(mana); - GetTarget()->CastSpell(GetTarget(), SPELL_MAGE_BURNOUT, args); - } + int32 mana = eventInfo.GetDamageInfo()->GetSpellInfo()->CalcPowerCost(GetTarget(), eventInfo.GetDamageInfo()->GetSchoolMask()); + mana = CalculatePct(mana, aurEff->GetAmount()); - void Register() override - { - DoCheckProc += AuraCheckProcFn(spell_mage_burnout_AuraScript::CheckProc); - OnEffectProc += AuraEffectProcFn(spell_mage_burnout_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_DUMMY); - } - }; + CastSpellExtraArgs args(aurEff); + args.AddSpellBP0(mana); + GetTarget()->CastSpell(GetTarget(), SPELL_MAGE_BURNOUT, args); + } - AuraScript* GetAuraScript() const override - { - return new spell_mage_burnout_AuraScript(); - } + void Register() override + { + DoCheckProc += AuraCheckProcFn(spell_mage_burnout::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_mage_burnout::HandleProc, EFFECT_1, SPELL_AURA_DUMMY); + } }; // 11958 - Cold Snap -class spell_mage_cold_snap : public SpellScriptLoader +class spell_mage_cold_snap : public SpellScript { - public: - spell_mage_cold_snap() : SpellScriptLoader("spell_mage_cold_snap") { } - - class spell_mage_cold_snap_SpellScript : public SpellScript - { - PrepareSpellScript(spell_mage_cold_snap_SpellScript); - - bool Load() override - { - return GetCaster()->GetTypeId() == TYPEID_PLAYER; - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - GetCaster()->GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr) -> bool - { - SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(itr->first); - return spellInfo->SpellFamilyName == SPELLFAMILY_MAGE && (spellInfo->GetSchoolMask() & SPELL_SCHOOL_MASK_FROST) && - spellInfo->Id != SPELL_MAGE_COLD_SNAP && spellInfo->GetRecoveryTime() > 0; - }, true); - } + PrepareSpellScript(spell_mage_cold_snap); - void Register() override - { - OnEffectHit += SpellEffectFn(spell_mage_cold_snap_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; + bool Load() override + { + return GetCaster()->GetTypeId() == TYPEID_PLAYER; + } - SpellScript* GetSpellScript() const override + void HandleDummy(SpellEffIndex /*effIndex*/) + { + GetCaster()->GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr) -> bool { - return new spell_mage_cold_snap_SpellScript(); - } + SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(itr->first); + return spellInfo->SpellFamilyName == SPELLFAMILY_MAGE && (spellInfo->GetSchoolMask() & SPELL_SCHOOL_MASK_FROST) && + spellInfo->Id != SPELL_MAGE_COLD_SNAP && spellInfo->GetRecoveryTime() > 0; + }, true); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_mage_cold_snap::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } }; // 11129 - Combustion -class spell_mage_combustion : public SpellScriptLoader +class spell_mage_combustion : public AuraScript { - public: - spell_mage_combustion() : SpellScriptLoader("spell_mage_combustion") { } - - class spell_mage_combustion_AuraScript : public AuraScript - { - PrepareAuraScript(spell_mage_combustion_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MAGE_COMBUSTION_PROC }); - } - - bool CheckProc(ProcEventInfo& eventInfo) - { - // Do not take charges, add a stack of crit buff - if (!(eventInfo.GetHitMask() & PROC_HIT_CRITICAL)) - { - eventInfo.GetActor()->CastSpell(nullptr, SPELL_MAGE_COMBUSTION_PROC, true); - return false; - } + PrepareAuraScript(spell_mage_combustion); - return true; - } - - void Register() override - { - DoCheckProc += AuraCheckProcFn(spell_mage_combustion_AuraScript::CheckProc); - } - }; + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MAGE_COMBUSTION_PROC }); + } - AuraScript* GetAuraScript() const override + bool CheckProc(ProcEventInfo& eventInfo) + { + // Do not take charges, add a stack of crit buff + if (!(eventInfo.GetHitMask() & PROC_HIT_CRITICAL)) { - return new spell_mage_combustion_AuraScript(); + eventInfo.GetActor()->CastSpell(nullptr, SPELL_MAGE_COMBUSTION_PROC, true); + return false; } + + return true; + } + + void Register() override + { + DoCheckProc += AuraCheckProcFn(spell_mage_combustion::CheckProc); + } }; // 28682 - Combustion proc -class spell_mage_combustion_proc : public SpellScriptLoader +class spell_mage_combustion_proc : public AuraScript { - public: - spell_mage_combustion_proc() : SpellScriptLoader("spell_mage_combustion_proc") { } + PrepareAuraScript(spell_mage_combustion_proc); - class spell_mage_combustion_proc_AuraScript : public AuraScript - { - PrepareAuraScript(spell_mage_combustion_proc_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MAGE_COMBUSTION }); - } - - void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetTarget()->RemoveAurasDueToSpell(SPELL_MAGE_COMBUSTION); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MAGE_COMBUSTION }); + } - void Register() override - { - AfterEffectRemove += AuraEffectRemoveFn(spell_mage_combustion_proc_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_ADD_FLAT_MODIFIER, AURA_EFFECT_HANDLE_REAL); - } - }; + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_MAGE_COMBUSTION); + } - AuraScript* GetAuraScript() const override - { - return new spell_mage_combustion_proc_AuraScript(); - } + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_mage_combustion_proc::OnRemove, EFFECT_0, SPELL_AURA_ADD_FLAT_MODIFIER, AURA_EFFECT_HANDLE_REAL); + } }; // -31661 - Dragon's Breath @@ -468,227 +380,172 @@ class spell_mage_dragon_breath : public AuraScript }; // -11185 - Improved Blizzard -class spell_mage_imp_blizzard : public SpellScriptLoader +class spell_mage_imp_blizzard : public AuraScript { - public: - spell_mage_imp_blizzard() : SpellScriptLoader("spell_mage_imp_blizzard") { } - - class spell_mage_imp_blizzard_AuraScript : public AuraScript - { - PrepareAuraScript(spell_mage_imp_blizzard_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MAGE_CHILLED }); - } + PrepareAuraScript(spell_mage_imp_blizzard); - void HandleChill(AuraEffect const* aurEff, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - uint32 triggerSpellId = sSpellMgr->GetSpellWithRank(SPELL_MAGE_CHILLED, GetSpellInfo()->GetRank()); - eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), triggerSpellId, aurEff); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MAGE_CHILLED }); + } - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_mage_imp_blizzard_AuraScript::HandleChill, EFFECT_0, SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); - } - }; + void HandleChill(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + uint32 triggerSpellId = sSpellMgr->GetSpellWithRank(SPELL_MAGE_CHILLED, GetSpellInfo()->GetRank()); + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), triggerSpellId, aurEff); + } - AuraScript* GetAuraScript() const override - { - return new spell_mage_imp_blizzard_AuraScript(); - } + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_mage_imp_blizzard::HandleChill, EFFECT_0, SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); + } }; // 37447 - Improved Mana Gems // 61062 - Improved Mana Gems -class spell_mage_imp_mana_gems : public SpellScriptLoader +class spell_mage_imp_mana_gems : public AuraScript { - public: - spell_mage_imp_mana_gems() : SpellScriptLoader("spell_mage_imp_mana_gems") { } - - class spell_mage_imp_mana_gems_AuraScript : public AuraScript - { - PrepareAuraScript(spell_mage_imp_mana_gems_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MAGE_MANA_SURGE }); - } + PrepareAuraScript(spell_mage_imp_mana_gems); - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - eventInfo.GetActor()->CastSpell(nullptr, SPELL_MAGE_MANA_SURGE, aurEff); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MAGE_MANA_SURGE }); + } - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_mage_imp_mana_gems_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); - } - }; + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + eventInfo.GetActor()->CastSpell(nullptr, SPELL_MAGE_MANA_SURGE, aurEff); + } - AuraScript* GetAuraScript() const override - { - return new spell_mage_imp_mana_gems_AuraScript(); - } + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_mage_imp_mana_gems::HandleProc, EFFECT_1, SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); + } }; // -31656 - Empowered Fire -class spell_mage_empowered_fire : public SpellScriptLoader +class spell_mage_empowered_fire : public AuraScript { - public: - spell_mage_empowered_fire() : SpellScriptLoader("spell_mage_empowered_fire") { } - - class spell_mage_empowered_fire_AuraScript : public AuraScript - { - PrepareAuraScript(spell_mage_empowered_fire_AuraScript); + PrepareAuraScript(spell_mage_empowered_fire); - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MAGE_EMPOWERED_FIRE_PROC }); - } - - bool CheckProc(ProcEventInfo& eventInfo) - { - if (SpellInfo const* spellInfo = eventInfo.GetSpellInfo()) - if (spellInfo->Id == SPELL_MAGE_IGNITE) - return true; + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MAGE_EMPOWERED_FIRE_PROC }); + } - return false; - } + bool CheckProc(ProcEventInfo& eventInfo) + { + if (SpellInfo const* spellInfo = eventInfo.GetSpellInfo()) + if (spellInfo->Id == SPELL_MAGE_IGNITE) + return true; - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) - { - PreventDefaultAction(); + return false; + } - Unit* target = GetTarget(); - CastSpellExtraArgs args(aurEff); - uint8 percent = sSpellMgr->AssertSpellInfo(SPELL_MAGE_EMPOWERED_FIRE_PROC)->Effects[EFFECT_0].CalcValue(); - args.AddSpellBP0(CalculatePct(target->GetCreateMana(), percent)); - target->CastSpell(target, SPELL_MAGE_EMPOWERED_FIRE_PROC, args); - } + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); - void Register() override - { - DoCheckProc += AuraCheckProcFn(spell_mage_empowered_fire_AuraScript::CheckProc); - OnEffectProc += AuraEffectProcFn(spell_mage_empowered_fire_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_ADD_FLAT_MODIFIER); - } - }; + Unit* target = GetTarget(); + CastSpellExtraArgs args(aurEff); + uint8 percent = sSpellMgr->AssertSpellInfo(SPELL_MAGE_EMPOWERED_FIRE_PROC)->Effects[EFFECT_0].CalcValue(); + args.AddSpellBP0(CalculatePct(target->GetCreateMana(), percent)); + target->CastSpell(target, SPELL_MAGE_EMPOWERED_FIRE_PROC, args); + } - AuraScript* GetAuraScript() const override - { - return new spell_mage_empowered_fire_AuraScript(); - } + void Register() override + { + DoCheckProc += AuraCheckProcFn(spell_mage_empowered_fire::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_mage_empowered_fire::HandleProc, EFFECT_0, SPELL_AURA_ADD_FLAT_MODIFIER); + } }; // 74396 - Fingers of Frost -class spell_mage_fingers_of_frost : public SpellScriptLoader +class spell_mage_fingers_of_frost : public AuraScript { - public: - spell_mage_fingers_of_frost() : SpellScriptLoader("spell_mage_fingers_of_frost") { } - - class spell_mage_fingers_of_frost_AuraScript : public AuraScript - { - PrepareAuraScript(spell_mage_fingers_of_frost_AuraScript); + PrepareAuraScript(spell_mage_fingers_of_frost); - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MAGE_FINGERS_OF_FROST_AURASTATE_AURA }); - } - - void HandleDummy(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - eventInfo.GetActor()->RemoveAuraFromStack(GetId()); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MAGE_FINGERS_OF_FROST_AURASTATE_AURA }); + } - void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetTarget()->RemoveAurasDueToSpell(SPELL_MAGE_FINGERS_OF_FROST_AURASTATE_AURA); - } + void HandleDummy(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + eventInfo.GetActor()->RemoveAuraFromStack(GetId()); + } - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_mage_fingers_of_frost_AuraScript::HandleDummy, EFFECT_0, SPELL_AURA_DUMMY); - AfterEffectRemove += AuraEffectRemoveFn(spell_mage_fingers_of_frost_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - } - }; + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_MAGE_FINGERS_OF_FROST_AURASTATE_AURA); + } - AuraScript* GetAuraScript() const override - { - return new spell_mage_fingers_of_frost_AuraScript(); - } + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_mage_fingers_of_frost::HandleDummy, EFFECT_0, SPELL_AURA_DUMMY); + AfterEffectRemove += AuraEffectRemoveFn(spell_mage_fingers_of_frost::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } }; // -543 - Fire Ward // -6143 - Frost Ward -class spell_mage_fire_frost_ward : public SpellScriptLoader +class spell_mage_fire_frost_ward : public spell_mage_incanters_absorbtion_base_AuraScript { - public: - spell_mage_fire_frost_ward() : SpellScriptLoader("spell_mage_fire_frost_ward") { } + PrepareAuraScript(spell_mage_fire_frost_ward); - class spell_mage_fire_frost_ward_AuraScript : public spell_mage_incanters_absorbtion_base_AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( { - PrepareAuraScript(spell_mage_fire_frost_ward_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo( - { - SPELL_MAGE_FROST_WARDING_TRIGGERED, - SPELL_MAGE_FROST_WARDING_R1 - }); - } + SPELL_MAGE_FROST_WARDING_TRIGGERED, + SPELL_MAGE_FROST_WARDING_R1 + }); + } - void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated) - { - canBeRecalculated = false; - if (Unit* caster = GetCaster()) - { - // +80.68% from sp bonus - float bonus = 0.8068f; + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated) + { + canBeRecalculated = false; + if (Unit* caster = GetCaster()) + { + // +80.68% from sp bonus + float bonus = 0.8068f; - bonus *= caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()); - bonus *= caster->CalculateSpellpowerCoefficientLevelPenalty(GetSpellInfo()); + bonus *= caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()); + bonus *= caster->CalculateSpellpowerCoefficientLevelPenalty(GetSpellInfo()); - amount += int32(bonus); - } - } + amount += int32(bonus); + } + } - void Absorb(AuraEffect* aurEff, DamageInfo& dmgInfo, uint32& absorbAmount) - { - Unit* target = GetTarget(); - if (AuraEffect* talentAurEff = target->GetAuraEffectOfRankedSpell(SPELL_MAGE_FROST_WARDING_R1, EFFECT_0)) - { - int32 chance = talentAurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue(); // SPELL_EFFECT_DUMMY with NO_TARGET - - if (roll_chance_i(chance)) - { - int32 bp = dmgInfo.GetDamage(); - dmgInfo.AbsorbDamage(bp); - CastSpellExtraArgs args(aurEff); - args.AddSpellBP0(bp); - target->CastSpell(target, SPELL_MAGE_FROST_WARDING_TRIGGERED, args); - absorbAmount = 0; - PreventDefaultAction(); - } - } - } + void Absorb(AuraEffect* aurEff, DamageInfo& dmgInfo, uint32& absorbAmount) + { + Unit* target = GetTarget(); + if (AuraEffect* talentAurEff = target->GetAuraEffectOfRankedSpell(SPELL_MAGE_FROST_WARDING_R1, EFFECT_0)) + { + int32 chance = talentAurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue(); // SPELL_EFFECT_DUMMY with NO_TARGET - void Register() override + if (roll_chance_i(chance)) { - DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_fire_frost_ward_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); - OnEffectAbsorb += AuraEffectAbsorbFn(spell_mage_fire_frost_ward_AuraScript::Absorb, EFFECT_0); - AfterEffectAbsorb += AuraEffectAbsorbFn(spell_mage_fire_frost_ward_AuraScript::Trigger, EFFECT_0); + int32 bp = dmgInfo.GetDamage(); + dmgInfo.AbsorbDamage(bp); + CastSpellExtraArgs args(aurEff); + args.AddSpellBP0(bp); + target->CastSpell(target, SPELL_MAGE_FROST_WARDING_TRIGGERED, args); + absorbAmount = 0; + PreventDefaultAction(); } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_mage_fire_frost_ward_AuraScript(); } + } + + void Register() override + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_fire_frost_ward::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); + OnEffectAbsorb += AuraEffectAbsorbFn(spell_mage_fire_frost_ward::Absorb, EFFECT_0); + AfterEffectAbsorb += AuraEffectAbsorbFn(spell_mage_fire_frost_ward::Trigger, EFFECT_0); + } }; // -44614 - Frostfire Bolt @@ -720,312 +577,235 @@ class spell_mage_frostfire_bolt : public AuraScript }; // 54646 - Focus Magic -class spell_mage_focus_magic : public SpellScriptLoader +class spell_mage_focus_magic : public AuraScript { - public: - spell_mage_focus_magic() : SpellScriptLoader("spell_mage_focus_magic") { } - - class spell_mage_focus_magic_AuraScript : public AuraScript - { - PrepareAuraScript(spell_mage_focus_magic_AuraScript); + PrepareAuraScript(spell_mage_focus_magic); - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MAGE_FOCUS_MAGIC_PROC }); - } - - bool CheckProc(ProcEventInfo& /*eventInfo*/) - { - _procTarget = GetCaster(); - return _procTarget && _procTarget->IsAlive(); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MAGE_FOCUS_MAGIC_PROC }); + } - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) - { - PreventDefaultAction(); - GetTarget()->CastSpell(_procTarget, SPELL_MAGE_FOCUS_MAGIC_PROC, aurEff); - } + bool CheckProc(ProcEventInfo& /*eventInfo*/) + { + _procTarget = GetCaster(); + return _procTarget && _procTarget->IsAlive(); + } - void Register() override - { - DoCheckProc += AuraCheckProcFn(spell_mage_focus_magic_AuraScript::CheckProc); - OnEffectProc += AuraEffectProcFn(spell_mage_focus_magic_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_MOD_SPELL_CRIT_CHANCE); - } + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + GetTarget()->CastSpell(_procTarget, SPELL_MAGE_FOCUS_MAGIC_PROC, aurEff); + } - Unit* _procTarget = nullptr; - }; + void Register() override + { + DoCheckProc += AuraCheckProcFn(spell_mage_focus_magic::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_mage_focus_magic::HandleProc, EFFECT_0, SPELL_AURA_MOD_SPELL_CRIT_CHANCE); + } - AuraScript* GetAuraScript() const override - { - return new spell_mage_focus_magic_AuraScript(); - } + Unit* _procTarget = nullptr; }; // 48108 - Hot Streak // 57761 - Fireball! -class spell_mage_gen_extra_effects : public SpellScriptLoader +class spell_mage_gen_extra_effects : public AuraScript { - public: - spell_mage_gen_extra_effects() : SpellScriptLoader("spell_mage_gen_extra_effects") { } + PrepareAuraScript(spell_mage_gen_extra_effects); - class spell_mage_gen_extra_effects_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( { - PrepareAuraScript(spell_mage_gen_extra_effects_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo( - { - SPELL_MAGE_T10_2P_BONUS, - SPELL_MAGE_T10_2P_BONUS_EFFECT, - SPELL_MAGE_T8_4P_BONUS - }); - } - - bool CheckProc(ProcEventInfo& eventInfo) - { - Unit* caster = eventInfo.GetActor(); - // Prevent double proc for Arcane missiles - if (caster == eventInfo.GetProcTarget()) - return false; + SPELL_MAGE_T10_2P_BONUS, + SPELL_MAGE_T10_2P_BONUS_EFFECT, + SPELL_MAGE_T8_4P_BONUS + }); + } - // Proc chance is unknown, we'll just use dummy aura amount - if (AuraEffect const* aurEff = caster->GetAuraEffect(SPELL_MAGE_T8_4P_BONUS, EFFECT_0)) - if (roll_chance_i(aurEff->GetAmount())) - return false; + bool CheckProc(ProcEventInfo& eventInfo) + { + Unit* caster = eventInfo.GetActor(); + // Prevent double proc for Arcane missiles + if (caster == eventInfo.GetProcTarget()) + return false; - return true; - } + // Proc chance is unknown, we'll just use dummy aura amount + if (AuraEffect const* aurEff = caster->GetAuraEffect(SPELL_MAGE_T8_4P_BONUS, EFFECT_0)) + if (roll_chance_i(aurEff->GetAmount())) + return false; - void HandleProc(ProcEventInfo& eventInfo) - { - Unit* caster = eventInfo.GetActor(); + return true; + } - if (caster->HasAura(SPELL_MAGE_T10_2P_BONUS)) - caster->CastSpell(nullptr, SPELL_MAGE_T10_2P_BONUS_EFFECT, true); - } + void HandleProc(ProcEventInfo& eventInfo) + { + Unit* caster = eventInfo.GetActor(); - void Register() override - { - DoCheckProc += AuraCheckProcFn(spell_mage_gen_extra_effects_AuraScript::CheckProc); - OnProc += AuraProcFn(spell_mage_gen_extra_effects_AuraScript::HandleProc); - } - }; + if (caster->HasAura(SPELL_MAGE_T10_2P_BONUS)) + caster->CastSpell(nullptr, SPELL_MAGE_T10_2P_BONUS_EFFECT, true); + } - AuraScript* GetAuraScript() const override - { - return new spell_mage_gen_extra_effects_AuraScript(); - } + void Register() override + { + DoCheckProc += AuraCheckProcFn(spell_mage_gen_extra_effects::CheckProc); + OnProc += AuraProcFn(spell_mage_gen_extra_effects::HandleProc); + } }; // 56375 - Glyph of Polymorph -class spell_mage_glyph_of_polymorph : public SpellScriptLoader +class spell_mage_glyph_of_polymorph : public AuraScript { - public: - spell_mage_glyph_of_polymorph() : SpellScriptLoader("spell_mage_glyph_of_polymorph") { } - - class spell_mage_glyph_of_polymorph_AuraScript : public AuraScript - { - PrepareAuraScript(spell_mage_glyph_of_polymorph_AuraScript); - - void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - Unit* target = eventInfo.GetProcTarget(); - target->RemoveAurasByType(SPELL_AURA_PERIODIC_DAMAGE, ObjectGuid::Empty, target->GetAura(32409)); // SW:D shall not be removed. - target->RemoveAurasByType(SPELL_AURA_PERIODIC_DAMAGE_PERCENT); - target->RemoveAurasByType(SPELL_AURA_PERIODIC_LEECH); - } + PrepareAuraScript(spell_mage_glyph_of_polymorph); - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_mage_glyph_of_polymorph_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; + void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + Unit* target = eventInfo.GetProcTarget(); + target->RemoveAurasByType(SPELL_AURA_PERIODIC_DAMAGE, ObjectGuid::Empty, target->GetAura(32409)); // SW:D shall not be removed. + target->RemoveAurasByType(SPELL_AURA_PERIODIC_DAMAGE_PERCENT); + target->RemoveAurasByType(SPELL_AURA_PERIODIC_LEECH); + } - AuraScript* GetAuraScript() const override - { - return new spell_mage_glyph_of_polymorph_AuraScript(); - } + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_mage_glyph_of_polymorph::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } }; // 56374 - Glyph of Icy Veins -class spell_mage_glyph_of_icy_veins : public SpellScriptLoader +class spell_mage_glyph_of_icy_veins : public AuraScript { - public: - spell_mage_glyph_of_icy_veins() : SpellScriptLoader("spell_mage_glyph_of_icy_veins") { } - - class spell_mage_glyph_of_icy_veins_AuraScript : public AuraScript - { - PrepareAuraScript(spell_mage_glyph_of_icy_veins_AuraScript); + PrepareAuraScript(spell_mage_glyph_of_icy_veins); - void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - Unit* caster = eventInfo.GetActor(); - caster->RemoveAurasByType(SPELL_AURA_HASTE_SPELLS, ObjectGuid::Empty, 0, true, false); - caster->RemoveAurasByType(SPELL_AURA_MOD_DECREASE_SPEED); - } - - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_mage_glyph_of_icy_veins_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; + void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + Unit* caster = eventInfo.GetActor(); + caster->RemoveAurasByType(SPELL_AURA_HASTE_SPELLS, ObjectGuid::Empty, 0, true, false); + caster->RemoveAurasByType(SPELL_AURA_MOD_DECREASE_SPEED); + } - AuraScript* GetAuraScript() const override - { - return new spell_mage_glyph_of_icy_veins_AuraScript(); - } + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_mage_glyph_of_icy_veins::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } }; // 56372 - Glyph of Ice Block -class spell_mage_glyph_of_ice_block : public SpellScriptLoader +class spell_mage_glyph_of_ice_block : public AuraScript { - public: - spell_mage_glyph_of_ice_block() : SpellScriptLoader("spell_mage_glyph_of_ice_block") { } + PrepareAuraScript(spell_mage_glyph_of_ice_block); - class spell_mage_glyph_of_ice_block_AuraScript : public AuraScript + void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + Unit* caster = eventInfo.GetActor(); + caster->GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr) -> bool { - PrepareAuraScript(spell_mage_glyph_of_ice_block_AuraScript); - - void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - Unit* caster = eventInfo.GetActor(); - caster->GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr) -> bool - { - SpellInfo const* cdSpell = sSpellMgr->GetSpellInfo(itr->first); - if (!cdSpell || cdSpell->SpellFamilyName != SPELLFAMILY_MAGE - || !(cdSpell->SpellFamilyFlags[0] & 0x00000040)) - return false; - return true; - }, true); - } - - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_mage_glyph_of_ice_block_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; + SpellInfo const* cdSpell = sSpellMgr->GetSpellInfo(itr->first); + if (!cdSpell || cdSpell->SpellFamilyName != SPELLFAMILY_MAGE + || !(cdSpell->SpellFamilyFlags[0] & 0x00000040)) + return false; + return true; + }, true); + } - AuraScript* GetAuraScript() const override - { - return new spell_mage_glyph_of_ice_block_AuraScript(); - } + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_mage_glyph_of_ice_block::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } }; // -44445 - Hot Streak -class spell_mage_hot_streak : public SpellScriptLoader +class spell_mage_hot_streak : public AuraScript { - public: - spell_mage_hot_streak() : SpellScriptLoader("spell_mage_hot_streak") { } + PrepareAuraScript(spell_mage_hot_streak); - class spell_mage_hot_streak_AuraScript : public AuraScript - { - PrepareAuraScript(spell_mage_hot_streak_AuraScript); + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MAGE_HOT_STREAK_PROC }); + } - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MAGE_HOT_STREAK_PROC }); - } + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + AuraEffect* counter = GetEffect(EFFECT_1); + if (!counter) + return; - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - AuraEffect* counter = GetEffect(EFFECT_1); - if (!counter) - return; - - // Count spell criticals in a row in second aura - if (eventInfo.GetHitMask() & PROC_HIT_CRITICAL) - { - counter->SetAmount(counter->GetAmount() * 2); - if (counter->GetAmount() < 100) // not enough - return; - - // roll chance - if (!roll_chance_i(aurEff->GetAmount())) - return; - - Unit* caster = eventInfo.GetActor(); - caster->CastSpell(caster, SPELL_MAGE_HOT_STREAK_PROC, aurEff); - } - - // reset counter - counter->SetAmount(25); - } + // Count spell criticals in a row in second aura + if (eventInfo.GetHitMask() & PROC_HIT_CRITICAL) + { + counter->SetAmount(counter->GetAmount() * 2); + if (counter->GetAmount() < 100) // not enough + return; - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_mage_hot_streak_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; + // roll chance + if (!roll_chance_i(aurEff->GetAmount())) + return; - AuraScript* GetAuraScript() const override - { - return new spell_mage_hot_streak_AuraScript(); + Unit* caster = eventInfo.GetActor(); + caster->CastSpell(caster, SPELL_MAGE_HOT_STREAK_PROC, aurEff); } + + // reset counter + counter->SetAmount(25); + } + + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_mage_hot_streak::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } }; // -11426 - Ice Barrier -class spell_mage_ice_barrier : public SpellScriptLoader +class spell_mage_ice_barrier : public spell_mage_incanters_absorbtion_base_AuraScript { - public: - spell_mage_ice_barrier() : SpellScriptLoader("spell_mage_ice_barrier") { } - - class spell_mage_ice_barrier_AuraScript : public spell_mage_incanters_absorbtion_base_AuraScript - { - PrepareAuraScript(spell_mage_ice_barrier_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MAGE_SHATTERED_BARRIER }); - } + PrepareAuraScript(spell_mage_ice_barrier); - void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated) - { - canBeRecalculated = false; - if (Unit* caster = GetCaster()) - { - // +80.68% from sp bonus - float bonus = 0.8068f; + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MAGE_SHATTERED_BARRIER }); + } - bonus *= caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()); + void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated) + { + canBeRecalculated = false; + if (Unit* caster = GetCaster()) + { + // +80.68% from sp bonus + float bonus = 0.8068f; - // Glyph of Ice Barrier: its weird having a SPELLMOD_ALL_EFFECTS here but its blizzards doing :) - // Glyph of Ice Barrier is only applied at the spell damage bonus because it was already applied to the base value in CalculateSpellDamage - bonus = caster->ApplyEffectModifiers(GetSpellInfo(), aurEff->GetEffIndex(), bonus); + bonus *= caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()); - bonus *= caster->CalculateSpellpowerCoefficientLevelPenalty(GetSpellInfo()); + // Glyph of Ice Barrier: its weird having a SPELLMOD_ALL_EFFECTS here but its blizzards doing :) + // Glyph of Ice Barrier is only applied at the spell damage bonus because it was already applied to the base value in CalculateSpellDamage + bonus = caster->ApplyEffectModifiers(GetSpellInfo(), aurEff->GetEffIndex(), bonus); - amount += int32(bonus); - } - } + bonus *= caster->CalculateSpellpowerCoefficientLevelPenalty(GetSpellInfo()); - 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, aurEff); - } + amount += int32(bonus); + } + } - 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); - } - }; + 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, aurEff); + } - AuraScript* GetAuraScript() const override - { - return new spell_mage_ice_barrier_AuraScript(); - } + void Register() override + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_ice_barrier::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); + AfterEffectAbsorb += AuraEffectAbsorbFn(spell_mage_ice_barrier::Trigger, EFFECT_0); + AfterEffectRemove += AuraEffectRemoveFn(spell_mage_ice_barrier::AfterRemove, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB, AURA_EFFECT_HANDLE_REAL); + } }; // 45438 - Ice Block @@ -1050,229 +830,174 @@ class spell_mage_ice_block : public SpellScript }; // -11119 - Ignite -class spell_mage_ignite : public SpellScriptLoader +class spell_mage_ignite : public AuraScript { - public: - spell_mage_ignite() : SpellScriptLoader("spell_mage_ignite") { } - - class spell_mage_ignite_AuraScript : public AuraScript - { - PrepareAuraScript(spell_mage_ignite_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MAGE_IGNITE }); - } + PrepareAuraScript(spell_mage_ignite); - bool CheckProc(ProcEventInfo& eventInfo) - { - return eventInfo.GetDamageInfo() && eventInfo.GetProcTarget(); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MAGE_IGNITE }); + } - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); + bool CheckProc(ProcEventInfo& eventInfo) + { + return eventInfo.GetDamageInfo() && eventInfo.GetProcTarget(); + } - SpellInfo const* igniteDot = sSpellMgr->AssertSpellInfo(SPELL_MAGE_IGNITE); - int32 pct = 8 * GetSpellInfo()->GetRank(); + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); - ASSERT(igniteDot->GetMaxTicks() > 0); - int32 amount = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), pct) / igniteDot->GetMaxTicks()); + SpellInfo const* igniteDot = sSpellMgr->AssertSpellInfo(SPELL_MAGE_IGNITE); + int32 pct = 8 * GetSpellInfo()->GetRank(); - CastSpellExtraArgs args(aurEff); - args.AddSpellBP0(amount); - GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_MAGE_IGNITE, args); - } + ASSERT(igniteDot->GetMaxTicks() > 0); + int32 amount = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), pct) / igniteDot->GetMaxTicks()); - void Register() override - { - DoCheckProc += AuraCheckProcFn(spell_mage_ignite_AuraScript::CheckProc); - OnEffectProc += AuraEffectProcFn(spell_mage_ignite_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; + CastSpellExtraArgs args(aurEff); + args.AddSpellBP0(amount); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_MAGE_IGNITE, args); + } - AuraScript* GetAuraScript() const override - { - return new spell_mage_ignite_AuraScript(); - } + void Register() override + { + DoCheckProc += AuraCheckProcFn(spell_mage_ignite::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_mage_ignite::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } }; // -44457 - Living Bomb -class spell_mage_living_bomb : public SpellScriptLoader +class spell_mage_living_bomb : public AuraScript { - public: - spell_mage_living_bomb() : SpellScriptLoader("spell_mage_living_bomb") { } - - class spell_mage_living_bomb_AuraScript : public AuraScript - { - PrepareAuraScript(spell_mage_living_bomb_AuraScript); + PrepareAuraScript(spell_mage_living_bomb); - bool Validate(SpellInfo const* spell) override - { - return ValidateSpellInfo({ static_cast<uint32>(spell->Effects[EFFECT_1].CalcValue()) }); - } - - void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) - { - AuraRemoveMode removeMode = GetTargetApplication()->GetRemoveMode(); - if (removeMode != AURA_REMOVE_BY_ENEMY_SPELL && removeMode != AURA_REMOVE_BY_EXPIRE) - return; + bool Validate(SpellInfo const* spell) override + { + return ValidateSpellInfo({ static_cast<uint32>(spell->Effects[EFFECT_1].CalcValue()) }); + } - if (Unit* caster = GetCaster()) - caster->CastSpell(GetTarget(), uint32(aurEff->GetAmount()), aurEff); - } + void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + AuraRemoveMode removeMode = GetTargetApplication()->GetRemoveMode(); + if (removeMode != AURA_REMOVE_BY_ENEMY_SPELL && removeMode != AURA_REMOVE_BY_EXPIRE) + return; - void Register() override - { - AfterEffectRemove += AuraEffectRemoveFn(spell_mage_living_bomb_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - } - }; + if (Unit* caster = GetCaster()) + caster->CastSpell(GetTarget(), uint32(aurEff->GetAmount()), aurEff); + } - AuraScript* GetAuraScript() const override - { - return new spell_mage_living_bomb_AuraScript(); - } + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_mage_living_bomb::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } }; // -29441 - Magic Absorption -class spell_mage_magic_absorption : public SpellScriptLoader +class spell_mage_magic_absorption : public AuraScript { - public: - spell_mage_magic_absorption() : SpellScriptLoader("spell_mage_magic_absorption") { } - - class spell_mage_magic_absorption_AuraScript : public AuraScript - { - PrepareAuraScript(spell_mage_magic_absorption_AuraScript); + PrepareAuraScript(spell_mage_magic_absorption); - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MAGE_MAGIC_ABSORPTION_MANA }); - } - - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MAGE_MAGIC_ABSORPTION_MANA }); + } - Unit* caster = eventInfo.GetActionTarget(); - CastSpellExtraArgs args(aurEff); - args.AddSpellBP0(CalculatePct(caster->GetMaxPower(POWER_MANA), aurEff->GetAmount())); - caster->CastSpell(caster, SPELL_MAGE_MAGIC_ABSORPTION_MANA, args); - } + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_mage_magic_absorption_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; + Unit* caster = eventInfo.GetActionTarget(); + CastSpellExtraArgs args(aurEff); + args.AddSpellBP0(CalculatePct(caster->GetMaxPower(POWER_MANA), aurEff->GetAmount())); + caster->CastSpell(caster, SPELL_MAGE_MAGIC_ABSORPTION_MANA, args); + } - AuraScript* GetAuraScript() const override - { - return new spell_mage_magic_absorption_AuraScript(); - } + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_mage_magic_absorption::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } }; // -1463 - Mana Shield -class spell_mage_mana_shield : public SpellScriptLoader +class spell_mage_mana_shield : public spell_mage_incanters_absorbtion_base_AuraScript { - public: - spell_mage_mana_shield() : SpellScriptLoader("spell_mage_mana_shield") { } + PrepareAuraScript(spell_mage_mana_shield); - class spell_mage_mana_shield_AuraScript : public spell_mage_incanters_absorbtion_base_AuraScript - { - PrepareAuraScript(spell_mage_mana_shield_AuraScript); - - bool Validate(SpellInfo const* spellInfo) override - { - return ValidateSpellInfo({ SPELL_MAGE_ARCANE_SURGE }) && - spell_mage_incanters_absorbtion_base_AuraScript::Validate(spellInfo); - } - - void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated) - { - canBeRecalculated = false; - if (Unit* caster = GetCaster()) - { - // +80.53% from sp bonus - float bonus = 0.8053f; + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellInfo({ SPELL_MAGE_ARCANE_SURGE }) && + spell_mage_incanters_absorbtion_base_AuraScript::Validate(spellInfo); + } - bonus *= caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()); - bonus *= caster->CalculateSpellpowerCoefficientLevelPenalty(GetSpellInfo()); + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated) + { + canBeRecalculated = false; + if (Unit* caster = GetCaster()) + { + // +80.53% from sp bonus + float bonus = 0.8053f; - amount += int32(bonus); - } - } + bonus *= caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()); + bonus *= caster->CalculateSpellpowerCoefficientLevelPenalty(GetSpellInfo()); - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) - { - Unit* caster = eventInfo.GetActionTarget(); - caster->CastSpell(caster, SPELL_MAGE_ARCANE_SURGE, aurEff); - } + amount += int32(bonus); + } + } - void Register() override - { - DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_mana_shield_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MANA_SHIELD); - AfterEffectManaShield += AuraEffectManaShieldFn(spell_mage_mana_shield_AuraScript::Trigger, EFFECT_0); + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + Unit* caster = eventInfo.GetActionTarget(); + caster->CastSpell(caster, SPELL_MAGE_ARCANE_SURGE, aurEff); + } - OnEffectProc += AuraEffectProcFn(spell_mage_mana_shield_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_MANA_SHIELD); - } - }; + void Register() override + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_mana_shield::CalculateAmount, EFFECT_0, SPELL_AURA_MANA_SHIELD); + AfterEffectManaShield += AuraEffectManaShieldFn(spell_mage_mana_shield::Trigger, EFFECT_0); - AuraScript* GetAuraScript() const override - { - return new spell_mage_mana_shield_AuraScript(); - } + OnEffectProc += AuraEffectProcFn(spell_mage_mana_shield::HandleProc, EFFECT_0, SPELL_AURA_MANA_SHIELD); + } }; // -29074 - Master of Elements -class spell_mage_master_of_elements : public SpellScriptLoader +class spell_mage_master_of_elements : public AuraScript { - public: - spell_mage_master_of_elements() : SpellScriptLoader("spell_mage_master_of_elements") { } - - class spell_mage_master_of_elements_AuraScript : public AuraScript - { - PrepareAuraScript(spell_mage_master_of_elements_AuraScript); + PrepareAuraScript(spell_mage_master_of_elements); - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE }); - } - - bool CheckProc(ProcEventInfo& eventInfo) - { - DamageInfo* damageInfo = eventInfo.GetDamageInfo(); - if (!damageInfo || !damageInfo->GetSpellInfo()) - return false; - - return true; - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE }); + } - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); + bool CheckProc(ProcEventInfo& eventInfo) + { + DamageInfo* damageInfo = eventInfo.GetDamageInfo(); + if (!damageInfo || !damageInfo->GetSpellInfo()) + return false; - int32 mana = eventInfo.GetDamageInfo()->GetSpellInfo()->CalcPowerCost(GetTarget(), eventInfo.GetDamageInfo()->GetSchoolMask()); - mana = CalculatePct(mana, aurEff->GetAmount()); + return true; + } - if (mana > 0) - { - CastSpellExtraArgs args(aurEff); - args.AddSpellBP0(mana); - GetTarget()->CastSpell(GetTarget(), SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE, args); - } - } + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); - void Register() override - { - DoCheckProc += AuraCheckProcFn(spell_mage_master_of_elements_AuraScript::CheckProc); - OnEffectProc += AuraEffectProcFn(spell_mage_master_of_elements_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; + int32 mana = eventInfo.GetDamageInfo()->GetSpellInfo()->CalcPowerCost(GetTarget(), eventInfo.GetDamageInfo()->GetSchoolMask()); + mana = CalculatePct(mana, aurEff->GetAmount()); - AuraScript* GetAuraScript() const override + if (mana > 0) { - return new spell_mage_master_of_elements_AuraScript(); + CastSpellExtraArgs args(aurEff); + args.AddSpellBP0(mana); + GetTarget()->CastSpell(GetTarget(), SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE, args); } + } + + void Register() override + { + DoCheckProc += AuraCheckProcFn(spell_mage_master_of_elements::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_mage_master_of_elements::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } }; // 55342 - Mirror Image @@ -1298,39 +1023,28 @@ class spell_mage_mirror_image : public AuraScript }; // -44404 - Missile Barrage -class spell_mage_missile_barrage : public SpellScriptLoader +class spell_mage_missile_barrage : public AuraScript { - public: - spell_mage_missile_barrage() : SpellScriptLoader("spell_mage_missile_barrage") { } + PrepareAuraScript(spell_mage_missile_barrage); - class spell_mage_missile_barrage_AuraScript : public AuraScript - { - PrepareAuraScript(spell_mage_missile_barrage_AuraScript); - - bool CheckProc(ProcEventInfo& eventInfo) - { - SpellInfo const* spellInfo = eventInfo.GetSpellInfo(); - if (!spellInfo) - return false; - - // Arcane Blast - full chance - if (spellInfo->SpellFamilyFlags[0] & 0x20000000) - return true; + bool CheckProc(ProcEventInfo& eventInfo) + { + SpellInfo const* spellInfo = eventInfo.GetSpellInfo(); + if (!spellInfo) + return false; - // Rest of spells have half chance - return roll_chance_i(50); - } + // Arcane Blast - full chance + if (spellInfo->SpellFamilyFlags[0] & 0x20000000) + return true; - void Register() override - { - DoCheckProc += AuraCheckProcFn(spell_mage_missile_barrage_AuraScript::CheckProc); - } - }; + // Rest of spells have half chance + return roll_chance_i(50); + } - AuraScript* GetAuraScript() const override - { - return new spell_mage_missile_barrage_AuraScript(); - } + void Register() override + { + DoCheckProc += AuraCheckProcFn(spell_mage_missile_barrage::CheckProc); + } }; // 44401 - Missile Barrage @@ -1430,81 +1144,70 @@ const uint32 spell_mage_polymorph_cast_visual::spell_mage_polymorph_cast_visual_ }; // 31687 - Summon Water Elemental -class spell_mage_summon_water_elemental : public SpellScriptLoader +class spell_mage_summon_water_elemental : public SpellScript { - public: - spell_mage_summon_water_elemental() : SpellScriptLoader("spell_mage_summon_water_elemental") { } + PrepareSpellScript(spell_mage_summon_water_elemental); - class spell_mage_summon_water_elemental_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( { - PrepareSpellScript(spell_mage_summon_water_elemental_SpellScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo( - { - SPELL_MAGE_GLYPH_OF_ETERNAL_WATER, - SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY, - SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT - }); - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - Unit* caster = GetCaster(); - // Glyph of Eternal Water - if (caster->HasAura(SPELL_MAGE_GLYPH_OF_ETERNAL_WATER)) - caster->CastSpell(caster, SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT, true); - else - caster->CastSpell(caster, SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY, true); - } + SPELL_MAGE_GLYPH_OF_ETERNAL_WATER, + SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY, + SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT + }); + } - void Register() override - { - OnEffectHit += SpellEffectFn(spell_mage_summon_water_elemental_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + // Glyph of Eternal Water + if (caster->HasAura(SPELL_MAGE_GLYPH_OF_ETERNAL_WATER)) + caster->CastSpell(caster, SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT, true); + else + caster->CastSpell(caster, SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY, true); + } - SpellScript* GetSpellScript() const override - { - return new spell_mage_summon_water_elemental_SpellScript(); - } + void Register() override + { + OnEffectHit += SpellEffectFn(spell_mage_summon_water_elemental::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } }; void AddSC_mage_spell_scripts() { - new spell_mage_arcane_potency(); + RegisterSpellScript(spell_mage_arcane_potency); RegisterSpellScript(spell_mage_arcane_missiles); - new spell_mage_blast_wave(); - new spell_mage_blazing_speed(); - new spell_mage_burning_determination(); - new spell_mage_burnout(); - new spell_mage_cold_snap(); - new spell_mage_combustion(); - new spell_mage_combustion_proc(); + RegisterSpellScript(spell_mage_blast_wave); + RegisterSpellScript(spell_mage_blazing_speed); + RegisterSpellScript(spell_mage_burning_determination); + RegisterSpellScript(spell_mage_burnout); + RegisterSpellScript(spell_mage_cold_snap); + RegisterSpellScript(spell_mage_combustion); + RegisterSpellScript(spell_mage_combustion_proc); RegisterSpellScript(spell_mage_dragon_breath); - new spell_mage_imp_blizzard(); - new spell_mage_imp_mana_gems(); - new spell_mage_empowered_fire(); - new spell_mage_fingers_of_frost(); - new spell_mage_fire_frost_ward(); + RegisterSpellScript(spell_mage_imp_blizzard); + RegisterSpellScript(spell_mage_imp_mana_gems); + RegisterSpellScript(spell_mage_empowered_fire); + RegisterSpellScript(spell_mage_fingers_of_frost); + RegisterSpellScript(spell_mage_fire_frost_ward); RegisterSpellScript(spell_mage_frostfire_bolt); - new spell_mage_focus_magic(); - new spell_mage_gen_extra_effects(); - new spell_mage_glyph_of_polymorph(); - new spell_mage_glyph_of_icy_veins(); - new spell_mage_glyph_of_ice_block(); - new spell_mage_hot_streak(); - new spell_mage_ice_barrier(); + RegisterSpellScript(spell_mage_focus_magic); + RegisterSpellScript(spell_mage_gen_extra_effects); + RegisterSpellScript(spell_mage_glyph_of_polymorph); + RegisterSpellScript(spell_mage_glyph_of_icy_veins); + RegisterSpellScript(spell_mage_glyph_of_ice_block); + RegisterSpellScript(spell_mage_hot_streak); + RegisterSpellScript(spell_mage_ice_barrier); RegisterSpellScript(spell_mage_ice_block); - new spell_mage_ignite(); - new spell_mage_living_bomb(); - new spell_mage_magic_absorption(); - new spell_mage_mana_shield(); - new spell_mage_master_of_elements(); + RegisterSpellScript(spell_mage_ignite); + RegisterSpellScript(spell_mage_living_bomb); + RegisterSpellScript(spell_mage_magic_absorption); + RegisterSpellScript(spell_mage_mana_shield); + RegisterSpellScript(spell_mage_master_of_elements); RegisterSpellScript(spell_mage_mirror_image); - new spell_mage_missile_barrage(); + RegisterSpellScript(spell_mage_missile_barrage); RegisterSpellScript(spell_mage_missile_barrage_proc); new spell_mage_polymorph_cast_visual(); - new spell_mage_summon_water_elemental(); + RegisterSpellScript(spell_mage_summon_water_elemental); } |