aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-08-26 23:04:57 +0200
committerShauren <shauren.trinity@gmail.com>2017-08-26 23:04:57 +0200
commitee0e9c8578486879a27059b82f30618ef2ebb4fd (patch)
tree3982e0852c0593656c6d08972365e7bbd5881a01
parent6cae8a52a0234d7e7067547a58976ebb61f88292 (diff)
Core/Spells: Updated mage spell scripts
-rw-r--r--sql/updates/world/master/2017_08_26_01_world.sql28
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp2
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp1356
3 files changed, 464 insertions, 922 deletions
diff --git a/sql/updates/world/master/2017_08_26_01_world.sql b/sql/updates/world/master/2017_08_26_01_world.sql
new file mode 100644
index 00000000000..70ad20c9ae4
--- /dev/null
+++ b/sql/updates/world/master/2017_08_26_01_world.sql
@@ -0,0 +1,28 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName` IN (
+'spell_mage_nether_vortex',
+'spell_mage_master_of_elements',
+'spell_mage_permafrost',
+'spell_mage_ignite',
+'spell_mage_arcane_brilliance',
+'spell_mage_cold_snap',
+'spell_mage_focus_magic',
+'spell_mage_glyph_of_icy_veins',
+'spell_mage_glyph_of_polymorph',
+'spell_mage_dalaran_brilliance',
+'spell_mage_ring_of_frost',
+'spell_mage_living_bomb_explosion',
+'spell_mage_living_bomb_periodic',
+'spell_mage_nether_vortex',
+'spell_mage_master_of_elements',
+'spell_mage_focus_magic',
+'spell_mage_glyph_of_icy_veins',
+'spell_mage_glyph_of_polymorph',
+'spell_mage_hot_streak',
+'spell_mage_permafrost',
+'spell_mage_polymorph');
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(235219,'spell_mage_cold_snap'),
+(12846,'spell_mage_ignite'),
+(44461,'spell_mage_living_bomb_explosion'),
+(217694,'spell_mage_living_bomb_periodic'),
+(136511,'spell_mage_ring_of_frost');
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 9e1f4d2dd87..8e9035e5a40 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -4583,8 +4583,6 @@ void AddSC_generic_spell_scripts()
new spell_gen_increase_stats_buff("spell_dru_mark_of_the_wild");
new spell_gen_increase_stats_buff("spell_pri_power_word_fortitude");
new spell_gen_increase_stats_buff("spell_pri_shadow_protection");
- new spell_gen_increase_stats_buff("spell_mage_arcane_brilliance");
- new spell_gen_increase_stats_buff("spell_mage_dalaran_brilliance");
new spell_gen_interrupt();
new spell_gen_lifebloom("spell_hexlord_lifebloom", SPELL_HEXLORD_MALACRASS_LIFEBLOOM_FINAL_HEAL);
new spell_gen_lifebloom("spell_tur_ragepaw_lifebloom", SPELL_TUR_RAGEPAW_LIFEBLOOM_FINAL_HEAL);
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp
index f4efe94d241..a870223bc74 100644
--- a/src/server/scripts/Spells/spell_mage.cpp
+++ b/src/server/scripts/Spells/spell_mage.cpp
@@ -34,738 +34,352 @@
enum MageSpells
{
SPELL_MAGE_BLAZING_BARRIER_TRIGGER = 235314,
- SPELL_MAGE_COLD_SNAP = 11958,
+ SPELL_MAGE_CONE_OF_COLD = 120,
+ SPELL_MAGE_CONE_OF_COLD_SLOW = 212792,
SPELL_MAGE_CONJURE_REFRESHMENT = 116136,
SPELL_MAGE_CONJURE_REFRESHMENT_TABLE = 167145,
+ SPELL_MAGE_DRAGONHAWK_FORM = 32818,
SPELL_MAGE_FINGERS_OF_FROST = 44544,
- SPELL_MAGE_FOCUS_MAGIC_PROC = 54648,
SPELL_MAGE_FROST_NOVA = 122,
- SPELL_MAGE_IMPROVED_POLYMORPH_RANK_1 = 11210,
- SPELL_MAGE_IMPROVED_POLYMORPH_STUN_RANK_1 = 83046,
- SPELL_MAGE_IMPROVED_POLYMORPH_MARKER = 87515,
+ SPELL_MAGE_GIRAFFE_FORM = 32816,
+ SPELL_MAGE_ICE_BARRIER = 11426,
+ SPELL_MAGE_ICE_BLOCK = 45438,
SPELL_MAGE_IGNITE = 12654,
+ SPELL_MAGE_LIVING_BOMB_EXPLOSION = 44461,
+ SPELL_MAGE_LIVING_BOMB_PERIODIC = 217694,
SPELL_MAGE_MANA_SURGE = 37445,
- SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE = 29077,
- SPELL_MAGE_PERMAFROST = 91394,
- SPELL_MAGE_SLOW = 31589,
- SPELL_MAGE_SQUIRREL_FORM = 32813,
- SPELL_MAGE_GIRAFFE_FORM = 32816,
+ SPELL_MAGE_RING_OF_FROST_DUMMY = 91264,
+ SPELL_MAGE_RING_OF_FROST_FREEZE = 82691,
+ SPELL_MAGE_RING_OF_FROST_SUMMON = 113724,
SPELL_MAGE_SERPENT_FORM = 32817,
- SPELL_MAGE_DRAGONHAWK_FORM = 32818,
- SPELL_MAGE_WORGEN_FORM = 32819,
SPELL_MAGE_SHEEP_FORM = 32820,
- SPELL_MAGE_CONE_OF_COLD_AURA_R1 = 11190,
- SPELL_MAGE_CONE_OF_COLD_AURA_R2 = 12489,
- SPELL_MAGE_CONE_OF_COLD_TRIGGER_R1 = 83301,
- SPELL_MAGE_CONE_OF_COLD_TRIGGER_R2 = 83302,
- SPELL_MAGE_RING_OF_FROST_SUMMON = 82676,
- SPELL_MAGE_RING_OF_FROST_FREEZE = 82691,
- SPELL_MAGE_RING_OF_FROST_DUMMY = 91264,
+ SPELL_MAGE_SQUIRREL_FORM = 32813,
SPELL_MAGE_TEMPORAL_DISPLACEMENT = 80354,
+ SPELL_MAGE_WORGEN_FORM = 32819,
SPELL_PET_NETHERWINDS_FATIGUED = 160455,
};
enum MiscSpells
{
SPELL_HUNTER_INSANITY = 95809,
- SPELL_PRIEST_SHADOW_WORD_DEATH = 32409,
SPELL_SHAMAN_EXHAUSTION = 57723,
SPELL_SHAMAN_SATED = 57724,
SPELL_MAGE_CHILLED = 205708
};
// 235313 - Blazing Barrier
-class spell_mage_blazing_barrier : public SpellScriptLoader
+class spell_mage_blazing_barrier : public AuraScript
{
- public:
- spell_mage_blazing_barrier() : SpellScriptLoader("spell_mage_blazing_barrier") { }
+ PrepareAuraScript(spell_mage_blazing_barrier);
- class spell_mage_blazing_barrier_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mage_blazing_barrier_AuraScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo
- ({
- SPELL_MAGE_BLAZING_BARRIER_TRIGGER
- });
- }
-
- void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
- {
- canBeRecalculated = false;
- if (Unit* caster = GetCaster())
- amount = int32(caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()) * 7.0f);
- }
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_BLAZING_BARRIER_TRIGGER });
+ }
- void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
- {
- PreventDefaultAction();
- Unit* caster = eventInfo.GetDamageInfo()->GetVictim();
- Unit* target = eventInfo.GetDamageInfo()->GetAttacker();
+ void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
+ {
+ canBeRecalculated = false;
+ if (Unit* caster = GetCaster())
+ amount = int32(caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()) * 7.0f);
+ }
- if (caster && target)
- caster->CastSpell(target, SPELL_MAGE_BLAZING_BARRIER_TRIGGER, true);
- }
+ void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
+ {
+ PreventDefaultAction();
+ Unit* caster = eventInfo.GetDamageInfo()->GetVictim();
+ Unit* target = eventInfo.GetDamageInfo()->GetAttacker();
- void Register() override
- {
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_blazing_barrier_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
- OnEffectProc += AuraEffectProcFn(spell_mage_blazing_barrier_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_PROC_TRIGGER_SPELL);
- }
- };
+ if (caster && target)
+ caster->CastSpell(target, SPELL_MAGE_BLAZING_BARRIER_TRIGGER, true);
+ }
- AuraScript* GetAuraScript() const override
- {
- return new spell_mage_blazing_barrier_AuraScript();
- }
+ void Register() override
+ {
+ DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_blazing_barrier::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
+ OnEffectProc += AuraEffectProcFn(spell_mage_blazing_barrier::HandleProc, EFFECT_1, SPELL_AURA_PROC_TRIGGER_SPELL);
+ }
};
// 198063 - 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);
+ }
};
-// 11958 - Cold Snap
-class spell_mage_cold_snap : public SpellScriptLoader
+// 235219 - Cold Snap
+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;
- }
+ PrepareSpellScript(spell_mage_cold_snap);
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- GetCaster()->GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr)
- {
- 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);
- }
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo
+ ({
+ SPELL_MAGE_CONE_OF_COLD,
+ SPELL_MAGE_FROST_NOVA,
+ SPELL_MAGE_ICE_BARRIER,
+ SPELL_MAGE_ICE_BLOCK
+ });
+ }
- void Register() override
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr)
+ {
+ switch (itr->first)
{
- OnEffectHit += SpellEffectFn(spell_mage_cold_snap_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ case SPELL_MAGE_CONE_OF_COLD:
+ case SPELL_MAGE_FROST_NOVA:
+ case SPELL_MAGE_ICE_BARRIER:
+ case SPELL_MAGE_ICE_BLOCK:
+ return true;
+ default:
+ break;
}
- };
+ return false;
+ }, true);
+ }
- SpellScript* GetSpellScript() const override
- {
- return new spell_mage_cold_snap_SpellScript();
- }
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_mage_cold_snap::HandleDummy, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
};
// 120 - Cone of Cold
-/// Updated 4.3.4
-class spell_mage_cone_of_cold : public SpellScriptLoader
+class spell_mage_cone_of_cold : public SpellScript
{
- public:
- spell_mage_cone_of_cold() : SpellScriptLoader("spell_mage_cone_of_cold") { }
-
- class spell_mage_cone_of_cold_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mage_cone_of_cold_SpellScript);
+ PrepareSpellScript(spell_mage_cone_of_cold);
- void HandleConeOfColdScript(SpellEffIndex /*effIndex*/)
- {
- Unit* caster = GetCaster();
- if (Unit* unitTarget = GetHitUnit())
- {
- if (caster->HasAura(SPELL_MAGE_CONE_OF_COLD_AURA_R1)) // Improved Cone of Cold Rank 1
- unitTarget->CastSpell(unitTarget, SPELL_MAGE_CONE_OF_COLD_TRIGGER_R1, true);
- else if (caster->HasAura(SPELL_MAGE_CONE_OF_COLD_AURA_R2)) // Improved Cone of Cold Rank 2
- unitTarget->CastSpell(unitTarget, SPELL_MAGE_CONE_OF_COLD_TRIGGER_R2, true);
- }
- }
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_CONE_OF_COLD_SLOW });
+ }
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_mage_cone_of_cold_SpellScript::HandleConeOfColdScript, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
- }
- };
+ void HandleSlow(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_MAGE_CONE_OF_COLD_SLOW, true);
+ }
- SpellScript* GetSpellScript() const override
- {
- return new spell_mage_cone_of_cold_SpellScript();
- }
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_mage_cone_of_cold::HandleSlow, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ }
};
// 190336 - Conjure Refreshment
-class spell_mage_conjure_refreshment : public SpellScriptLoader
+class spell_mage_conjure_refreshment : public SpellScript
{
-public:
- spell_mage_conjure_refreshment() : SpellScriptLoader("spell_mage_conjure_refreshment") { }
+ PrepareSpellScript(spell_mage_conjure_refreshment);
- class spell_mage_conjure_refreshment_SpellScript : public SpellScript
+ bool Validate(SpellInfo const* /*spellInfo*/) override
{
- PrepareSpellScript(spell_mage_conjure_refreshment_SpellScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo
- ({
- SPELL_MAGE_CONJURE_REFRESHMENT,
- SPELL_MAGE_CONJURE_REFRESHMENT_TABLE
- });
- }
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- if (Player* caster = GetCaster()->ToPlayer())
- {
- Group* group = caster->GetGroup();
- if (group)
- caster->CastSpell(caster, SPELL_MAGE_CONJURE_REFRESHMENT_TABLE, true);
- else
- caster->CastSpell(caster, SPELL_MAGE_CONJURE_REFRESHMENT, true);
- }
- }
+ return ValidateSpellInfo
+ ({
+ SPELL_MAGE_CONJURE_REFRESHMENT,
+ SPELL_MAGE_CONJURE_REFRESHMENT_TABLE
+ });
+ }
- void Register() override
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ if (Player* caster = GetCaster()->ToPlayer())
{
- OnEffectHitTarget += SpellEffectFn(spell_mage_conjure_refreshment_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ Group* group = caster->GetGroup();
+ if (group)
+ caster->CastSpell(caster, SPELL_MAGE_CONJURE_REFRESHMENT_TABLE, true);
+ else
+ caster->CastSpell(caster, SPELL_MAGE_CONJURE_REFRESHMENT, true);
}
- };
+ }
- SpellScript* GetSpellScript() const override
+ void Register() override
{
- return new spell_mage_conjure_refreshment_SpellScript();
+ OnEffectHitTarget += SpellEffectFn(spell_mage_conjure_refreshment::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
-// 54646 - Focus Magic
-class spell_mage_focus_magic : public SpellScriptLoader
-{
- public:
- spell_mage_focus_magic() : SpellScriptLoader("spell_mage_focus_magic") { }
-
- class spell_mage_focus_magic_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mage_focus_magic_AuraScript);
-
- public:
- spell_mage_focus_magic_AuraScript()
- {
- _procTarget = nullptr;
- }
-
- private:
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_MAGE_FOCUS_MAGIC_PROC });
- }
-
- bool CheckProc(ProcEventInfo& /*eventInfo*/)
- {
- _procTarget = GetCaster();
- return _procTarget && _procTarget->IsAlive();
- }
-
- void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
- {
- PreventDefaultAction();
- GetTarget()->CastSpell(_procTarget, SPELL_MAGE_FOCUS_MAGIC_PROC, true, NULL, aurEff);
- }
-
- 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);
- }
-
- private:
- Unit* _procTarget;
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_mage_focus_magic_AuraScript();
- }
-};
-
-// 195283 - Hot Streak
-class spell_mage_hot_streak : public SpellScriptLoader
-{
- public:
- spell_mage_hot_streak() : SpellScriptLoader("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 true;
- }
-
- void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/)
- {
- }
-
- void Register() override
- {
- OnEffectProc += AuraEffectProcFn(spell_mage_hot_streak_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_mage_hot_streak_AuraScript();
- }
-};
-
-// 56374 - Glyph of Icy Veins
-class spell_mage_glyph_of_icy_veins : public SpellScriptLoader
+// 11426 - Ice Barrier
+class spell_mage_ice_barrier : public AuraScript
{
- public:
- spell_mage_glyph_of_icy_veins() : SpellScriptLoader("spell_mage_glyph_of_icy_veins") { }
+ PrepareAuraScript(spell_mage_ice_barrier);
- class spell_mage_glyph_of_icy_veins_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mage_glyph_of_icy_veins_AuraScript);
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo
+ ({
+ SPELL_MAGE_CHILLED
+ });
+ }
- void HandleEffectProc(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/)
- {
- PreventDefaultAction();
+ void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
+ {
+ canBeRecalculated = false;
+ if (Unit* caster = GetCaster())
+ amount += int32(caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()) * 10.0f);
+ }
- GetTarget()->RemoveAurasByType(SPELL_AURA_HASTE_SPELLS, ObjectGuid::Empty, 0, true, false);
- GetTarget()->RemoveAurasByType(SPELL_AURA_MOD_DECREASE_SPEED);
- }
+ void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
+ {
+ Unit* caster = eventInfo.GetDamageInfo()->GetVictim();
+ Unit* target = eventInfo.GetDamageInfo()->GetAttacker();
- void Register() override
- {
- OnEffectProc += AuraEffectProcFn(spell_mage_glyph_of_icy_veins_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY);
- }
- };
+ if (caster && target)
+ caster->CastSpell(target, SPELL_MAGE_CHILLED, true);
+ }
- AuraScript* GetAuraScript() const override
- {
- return new spell_mage_glyph_of_icy_veins_AuraScript();
- }
+ void Register() override
+ {
+ DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_ice_barrier::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
+ OnEffectProc += AuraEffectProcFn(spell_mage_ice_barrier::HandleProc, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
+ }
};
-// 56375 - Glyph of Polymorph
-class spell_mage_glyph_of_polymorph : public SpellScriptLoader
+// 12846 - Ignite
+class spell_mage_ignite : public AuraScript
{
- public:
- spell_mage_glyph_of_polymorph() : SpellScriptLoader("spell_mage_glyph_of_polymorph") { }
+ PrepareAuraScript(spell_mage_ignite);
- class spell_mage_glyph_of_polymorph_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mage_glyph_of_polymorph_AuraScript);
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_IGNITE });
+ }
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_PRIEST_SHADOW_WORD_DEATH });
- }
+ bool CheckProc(ProcEventInfo& eventInfo)
+ {
+ return eventInfo.GetProcTarget() != nullptr;
+ }
- void HandleEffectProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
- {
- PreventDefaultAction();
- Unit* target = eventInfo.GetProcTarget();
+ void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
+ {
+ PreventDefaultAction();
- target->RemoveAurasByType(SPELL_AURA_PERIODIC_DAMAGE, ObjectGuid::Empty, target->GetAura(SPELL_PRIEST_SHADOW_WORD_DEATH)); // SW:D shall not be removed.
- target->RemoveAurasByType(SPELL_AURA_PERIODIC_DAMAGE_PERCENT);
- target->RemoveAurasByType(SPELL_AURA_PERIODIC_LEECH);
- }
+ SpellInfo const* igniteDot = sSpellMgr->AssertSpellInfo(SPELL_MAGE_IGNITE);
+ int32 pct = aurEff->GetAmount();
- void Register() override
- {
- OnEffectProc += AuraEffectProcFn(spell_mage_glyph_of_polymorph_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY);
- }
- };
+ int32 amount = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), pct) / igniteDot->GetMaxTicks(DIFFICULTY_NONE));
+ amount += eventInfo.GetProcTarget()->GetRemainingPeriodicAmount(eventInfo.GetActor()->GetGUID(), SPELL_MAGE_IGNITE, SPELL_AURA_PERIODIC_DAMAGE);
+ GetTarget()->CastCustomSpell(SPELL_MAGE_IGNITE, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, nullptr, aurEff);
+ }
- AuraScript* GetAuraScript() const override
- {
- return new spell_mage_glyph_of_polymorph_AuraScript();
- }
+ void Register() override
+ {
+ DoCheckProc += AuraCheckProcFn(spell_mage_ignite::CheckProc);
+ OnEffectProc += AuraEffectProcFn(spell_mage_ignite::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
+ }
};
// 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") { }
+ PrepareAuraScript(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 });
- }
-
- void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
- {
- PreventDefaultAction();
- eventInfo.GetActor()->CastSpell((Unit*)nullptr, SPELL_MAGE_MANA_SURGE, true);
- }
+ 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((Unit*)nullptr, SPELL_MAGE_MANA_SURGE, true);
+ }
- 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_DUMMY);
+ }
};
// 44457 - Living Bomb
-class spell_mage_living_bomb : public SpellScriptLoader
+class spell_mage_living_bomb : public SpellScript
{
- public:
- spell_mage_living_bomb() : SpellScriptLoader("spell_mage_living_bomb") { }
-
- class spell_mage_living_bomb_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mage_living_bomb_AuraScript);
-
- bool Validate(SpellInfo const* spellInfo) override
- {
- if (!spellInfo->GetEffect(EFFECT_1))
- return false;
- return ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_1)->CalcValue()) });
- }
+ PrepareSpellScript(spell_mage_living_bomb);
- void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
- {
- AuraRemoveMode removeMode = GetTargetApplication()->GetRemoveMode();
- if (removeMode != AURA_REMOVE_BY_ENEMY_SPELL && removeMode != AURA_REMOVE_BY_EXPIRE)
- return;
-
- if (Unit* caster = GetCaster())
- caster->CastSpell(GetTarget(), uint32(aurEff->GetAmount()), true, NULL, aurEff);
- }
-
- void Register() override
- {
- AfterEffectRemove += AuraEffectRemoveFn(spell_mage_living_bomb_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_mage_living_bomb_AuraScript();
- }
-};
-
-// 11426 - Ice Barrier
-class spell_mage_ice_barrier : public SpellScriptLoader
-{
- public:
- spell_mage_ice_barrier() : SpellScriptLoader("spell_mage_ice_barrier") { }
-
- class spell_mage_ice_barrier_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mage_ice_barrier_AuraScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo
- ({
- SPELL_MAGE_CHILLED
- });
- }
-
- void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
- {
- canBeRecalculated = false;
- if (Unit* caster = GetCaster())
- amount += int32(caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()) * 10.0f);
- }
-
- void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
- {
- Unit* caster = eventInfo.GetDamageInfo()->GetVictim();
- Unit* target = eventInfo.GetDamageInfo()->GetAttacker();
-
- if (caster && target)
- caster->CastSpell(target, SPELL_MAGE_CHILLED, true);
- }
-
- void Register() override
- {
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_ice_barrier_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
- OnEffectProc += AuraEffectProcFn(spell_mage_ice_barrier_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_mage_ice_barrier_AuraScript();
- }
-};
-
-// -11119 - Ignite
-class spell_mage_ignite : public SpellScriptLoader
-{
- 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 });
- }
-
- bool CheckProc(ProcEventInfo& eventInfo)
- {
- return eventInfo.GetProcTarget() != nullptr;
- }
-
- void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
- {
- PreventDefaultAction();
-
- SpellInfo const* igniteDot = sSpellMgr->AssertSpellInfo(SPELL_MAGE_IGNITE);
- int32 pct = 8 * GetSpellInfo()->GetRank();
-
- int32 amount = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), pct) / igniteDot->GetMaxTicks(DIFFICULTY_NONE));
- amount += eventInfo.GetProcTarget()->GetRemainingPeriodicAmount(eventInfo.GetActor()->GetGUID(), SPELL_MAGE_IGNITE, SPELL_AURA_PERIODIC_DAMAGE);
- GetTarget()->CastCustomSpell(SPELL_MAGE_IGNITE, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, NULL, aurEff);
- }
-
- void Register() override
- {
- DoCheckProc += AuraCheckProcFn(spell_mage_ignite_AuraScript::CheckProc);
- OnEffectProc += AuraEffectProcFn(spell_mage_ignite_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_mage_ignite_AuraScript();
- }
-};
-
-// -29074 - Master of Elements
-class spell_mage_master_of_elements : public SpellScriptLoader
-{
- 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);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE });
- }
-
- bool CheckProc(ProcEventInfo& eventInfo)
- {
- return eventInfo.GetProcSpell() != nullptr;
- }
-
- void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
- {
- PreventDefaultAction();
-
- std::vector<SpellPowerCost> const& costs = eventInfo.GetProcSpell()->GetPowerCost();
- auto m = std::find_if(costs.begin(), costs.end(), [](SpellPowerCost const& cost) { return cost.Power == POWER_MANA; });
- if (m != costs.end())
- {
- int32 mana = CalculatePct(m->Amount, aurEff->GetAmount());
- if (mana > 0)
- GetTarget()->CastCustomSpell(SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, NULL, aurEff);
- }
- }
-
- 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);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_mage_master_of_elements_AuraScript();
- }
-};
-
-// 86181 - Nether Vortex
-class spell_mage_nether_vortex : public SpellScriptLoader
-{
- public:
- spell_mage_nether_vortex() : SpellScriptLoader("spell_mage_nether_vortex") { }
-
- class spell_mage_nether_vortex_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mage_nether_vortex_AuraScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_MAGE_SLOW });
- }
-
- bool DoCheck(ProcEventInfo& eventInfo)
- {
- if (Aura* aura = eventInfo.GetProcTarget()->GetAura(SPELL_MAGE_SLOW))
- if (aura->GetCasterGUID() != GetTarget()->GetGUID())
- return false;
-
- return true;
- }
-
- void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
- {
- PreventDefaultAction();
- GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_MAGE_SLOW, true, NULL, aurEff);
- }
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_LIVING_BOMB_PERIODIC });
+ }
- void Register() override
- {
- DoCheckProc += AuraCheckProcFn(spell_mage_nether_vortex_AuraScript::DoCheck);
- OnEffectProc += AuraEffectProcFn(spell_mage_nether_vortex_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY);
- }
- };
+ void HandleDummy(SpellEffIndex effIndex)
+ {
+ PreventHitDefaultEffect(effIndex);
+ GetCaster()->CastCustomSpell(SPELL_MAGE_LIVING_BOMB_PERIODIC, SPELLVALUE_BASE_POINT2, 1, GetHitUnit(), TRIGGERED_FULL_MASK);
+ }
- AuraScript* GetAuraScript() const override
- {
- return new spell_mage_nether_vortex_AuraScript();
- }
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_mage_living_bomb::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
};
-// -11175 - Permafrost
-class spell_mage_permafrost : public SpellScriptLoader
+// 44461 - Living Bomb
+class spell_mage_living_bomb_explosion : public SpellScript
{
- public:
- spell_mage_permafrost() : SpellScriptLoader("spell_mage_permafrost") { }
-
- class spell_mage_permafrost_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mage_permafrost_AuraScript);
+ PrepareSpellScript(spell_mage_living_bomb_explosion);
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_MAGE_PERMAFROST });
- }
-
- bool DoCheck(ProcEventInfo& eventInfo)
- {
- return GetTarget()->GetGuardianPet() && eventInfo.GetDamageInfo()->GetDamage();
- }
-
- void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
- {
- PreventDefaultAction();
+ bool Validate(SpellInfo const* spellInfo) override
+ {
+ return spellInfo->NeedsExplicitUnitTarget() && ValidateSpellInfo({ SPELL_MAGE_LIVING_BOMB_PERIODIC });
+ }
- int32 heal = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount()));
- GetTarget()->CastCustomSpell(SPELL_MAGE_PERMAFROST, SPELLVALUE_BASE_POINT0, heal, (Unit*)NULL, true, NULL, aurEff);
- }
+ void FilterTargets(std::list<WorldObject*>& targets)
+ {
+ targets.remove(GetExplTargetWorldObject());
+ }
- void Register() override
- {
- DoCheckProc += AuraCheckProcFn(spell_mage_permafrost_AuraScript::DoCheck);
- OnEffectProc += AuraEffectProcFn(spell_mage_permafrost_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY);
- }
- };
+ void HandleSpread(SpellEffIndex /*effIndex*/)
+ {
+ if (GetSpellValue()->EffectBasePoints[EFFECT_0] > 0)
+ GetCaster()->CastCustomSpell(SPELL_MAGE_LIVING_BOMB_PERIODIC, SPELLVALUE_BASE_POINT2, 0, GetHitUnit(), TRIGGERED_FULL_MASK);
+ }
- AuraScript* GetAuraScript() const override
- {
- return new spell_mage_permafrost_AuraScript();
- }
+ void Register() override
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mage_living_bomb_explosion::FilterTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENEMY);
+ OnEffectHitTarget += SpellEffectFn(spell_mage_living_bomb_explosion::HandleSpread, EFFECT_1, SPELL_EFFECT_SCHOOL_DAMAGE);
+ }
};
-// 118 - Polymorph
-class spell_mage_polymorph : public SpellScriptLoader
+// 217694 - Living Bomb
+class spell_mage_living_bomb_periodic : public AuraScript
{
- public:
- spell_mage_polymorph() : SpellScriptLoader("spell_mage_polymorph") { }
-
- class spell_mage_polymorph_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mage_polymorph_AuraScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo(
- {
- SPELL_MAGE_IMPROVED_POLYMORPH_RANK_1,
- SPELL_MAGE_IMPROVED_POLYMORPH_STUN_RANK_1,
- SPELL_MAGE_IMPROVED_POLYMORPH_MARKER
- });
- }
-
- bool DoCheck(ProcEventInfo& eventInfo)
- {
- _caster = GetCaster();
- return _caster && eventInfo.GetDamageInfo();
- }
+ PrepareAuraScript(spell_mage_living_bomb_periodic);
- void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
- {
- PreventDefaultAction();
- // Improved Polymorph
- if (AuraEffect const* improvedPolymorph = _caster->GetAuraEffectOfRankedSpell(SPELL_MAGE_IMPROVED_POLYMORPH_RANK_1, EFFECT_0))
- {
- if (_caster->HasAura(SPELL_MAGE_IMPROVED_POLYMORPH_MARKER))
- return;
-
- GetTarget()->CastSpell(GetTarget(), sSpellMgr->GetSpellWithRank(SPELL_MAGE_IMPROVED_POLYMORPH_STUN_RANK_1, improvedPolymorph->GetSpellInfo()->GetRank()), true, NULL, aurEff);
- _caster->CastSpell(_caster, SPELL_MAGE_IMPROVED_POLYMORPH_MARKER, true, NULL, aurEff);
- }
- }
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_LIVING_BOMB_EXPLOSION });
+ }
- void Register() override
- {
- DoCheckProc += AuraCheckProcFn(spell_mage_polymorph_AuraScript::DoCheck);
- OnEffectProc += AuraEffectProcFn(spell_mage_polymorph_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_MOD_CONFUSE);
- }
+ void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ {
+ if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
+ return;
- private:
- Unit* _caster = nullptr;
- };
+ if (Unit* caster = GetCaster())
+ caster->CastCustomSpell(SPELL_MAGE_LIVING_BOMB_EXPLOSION, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), TRIGGERED_FULL_MASK);
+ }
- AuraScript* GetAuraScript() const override
- {
- return new spell_mage_polymorph_AuraScript();
- }
+ void Register() override
+ {
+ AfterEffectRemove += AuraEffectRemoveFn(spell_mage_living_bomb_periodic::AfterRemove, EFFECT_2, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
};
enum SilvermoonPolymorph
@@ -775,43 +389,32 @@ enum SilvermoonPolymorph
/// @todo move out of here and rename - not a mage spell
// 32826 - Polymorph (Visual)
-class spell_mage_polymorph_cast_visual : public SpellScriptLoader
+class spell_mage_polymorph_visual : public SpellScript
{
- public:
- spell_mage_polymorph_cast_visual() : SpellScriptLoader("spell_mage_polymorph_visual") { }
-
- class spell_mage_polymorph_cast_visual_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mage_polymorph_cast_visual_SpellScript);
+ PrepareSpellScript(spell_mage_polymorph_visual);
- static const uint32 PolymorhForms[6];
+ static const uint32 PolymorhForms[6];
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo(PolymorhForms);
- }
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- if (Unit* target = GetCaster()->FindNearestCreature(NPC_AUROSALIA, 30.0f))
- if (target->GetTypeId() == TYPEID_UNIT)
- target->CastSpell(target, PolymorhForms[urand(0, 5)], true);
- }
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo(PolymorhForms);
+ }
- void Register() override
- {
- // add dummy effect spell handler to Polymorph visual
- OnEffectHitTarget += SpellEffectFn(spell_mage_polymorph_cast_visual_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
- };
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ if (Unit* target = GetCaster()->FindNearestCreature(NPC_AUROSALIA, 30.0f))
+ if (target->GetTypeId() == TYPEID_UNIT)
+ target->CastSpell(target, PolymorhForms[urand(0, 5)], true);
+ }
- SpellScript* GetSpellScript() const override
- {
- return new spell_mage_polymorph_cast_visual_SpellScript();
- }
+ void Register() override
+ {
+ // add dummy effect spell handler to Polymorph visual
+ OnEffectHitTarget += SpellEffectFn(spell_mage_polymorph_visual::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
};
-uint32 const spell_mage_polymorph_cast_visual::spell_mage_polymorph_cast_visual_SpellScript::PolymorhForms[6] =
+uint32 const spell_mage_polymorph_visual::PolymorhForms[6] =
{
SPELL_MAGE_SQUIRREL_FORM,
SPELL_MAGE_GIRAFFE_FORM,
@@ -822,324 +425,237 @@ uint32 const spell_mage_polymorph_cast_visual::spell_mage_polymorph_cast_visual_
};
// 235450 - Prismatic Barrier
-class spell_mage_prismatic_barrier : public SpellScriptLoader
+class spell_mage_prismatic_barrier : public AuraScript
{
- public:
- spell_mage_prismatic_barrier() : SpellScriptLoader("spell_mage_prismatic_barrier") { }
-
- class spell_mage_prismatic_barrier_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mage_prismatic_barrier_AuraScript);
-
- void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
- {
- canBeRecalculated = false;
- if (Unit* caster = GetCaster())
- amount += int32(caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()) * 7.0f);
- }
+ PrepareAuraScript(spell_mage_prismatic_barrier);
- void Register() override
- {
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_prismatic_barrier_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
- }
- };
+ void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
+ {
+ canBeRecalculated = false;
+ if (Unit* caster = GetCaster())
+ amount += int32(caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()) * 7.0f);
+ }
- AuraScript* GetAuraScript() const override
- {
- return new spell_mage_prismatic_barrier_AuraScript();
- }
+ void Register() override
+ {
+ DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_prismatic_barrier::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
+ }
};
-// 82676 - Ring of Frost
-/// Updated 4.3.4
-class spell_mage_ring_of_frost : public SpellScriptLoader
+// 136511 - Ring of Frost
+class spell_mage_ring_of_frost : public AuraScript
{
- public:
- spell_mage_ring_of_frost() : SpellScriptLoader("spell_mage_ring_of_frost") { }
+ PrepareAuraScript(spell_mage_ring_of_frost);
- class spell_mage_ring_of_frost_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mage_ring_of_frost_AuraScript);
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_RING_OF_FROST_SUMMON, SPELL_MAGE_RING_OF_FROST_FREEZE });
+ }
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo(
- {
- SPELL_MAGE_RING_OF_FROST_SUMMON,
- SPELL_MAGE_RING_OF_FROST_FREEZE,
- SPELL_MAGE_RING_OF_FROST_DUMMY
- });
- }
+ void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
+ {
+ if (TempSummon* ringOfFrost = GetRingOfFrostMinion())
+ GetTarget()->CastSpell(ringOfFrost->GetPositionX(), ringOfFrost->GetPositionY(), ringOfFrost->GetPositionZ(), SPELL_MAGE_RING_OF_FROST_FREEZE, true);
+ }
- void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
- {
- if (TempSummon* ringOfFrost = GetRingOfFrostMinion())
- if (GetMaxDuration() - int32(ringOfFrost->GetTimer()) >= sSpellMgr->AssertSpellInfo(SPELL_MAGE_RING_OF_FROST_DUMMY)->GetDuration())
- GetTarget()->CastSpell(ringOfFrost->GetPositionX(), ringOfFrost->GetPositionY(), ringOfFrost->GetPositionZ(), SPELL_MAGE_RING_OF_FROST_FREEZE, true);
- }
+ void Apply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ std::list<TempSummon*> minions;
+ GetTarget()->GetAllMinionsByEntry(minions, sSpellMgr->AssertSpellInfo(SPELL_MAGE_RING_OF_FROST_SUMMON)->GetEffect(EFFECT_0)->MiscValue);
- void Apply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ // Get the last summoned RoF, save it and despawn older ones
+ for (TempSummon* summon : minions)
+ {
+ if (TempSummon* ringOfFrost = GetRingOfFrostMinion())
{
- std::list<TempSummon*> MinionList;
- GetTarget()->GetAllMinionsByEntry(MinionList, GetSpellInfo()->GetEffect(EFFECT_0)->MiscValue);
-
- // Get the last summoned RoF, save it and despawn older ones
- for (std::list<TempSummon*>::iterator itr = MinionList.begin(); itr != MinionList.end(); ++itr)
+ if (summon->GetTimer() > ringOfFrost->GetTimer())
{
- TempSummon* summon = (*itr);
-
- if (TempSummon* ringOfFrost = GetRingOfFrostMinion())
- {
- if (summon->GetTimer() > ringOfFrost->GetTimer())
- {
- ringOfFrost->DespawnOrUnsummon();
- _ringOfFrostGUID = summon->GetGUID();
- }
- else
- summon->DespawnOrUnsummon();
- }
- else
- _ringOfFrostGUID = summon->GetGUID();
+ ringOfFrost->DespawnOrUnsummon();
+ _ringOfFrostGUID = summon->GetGUID();
}
+ else
+ summon->DespawnOrUnsummon();
}
+ else
+ _ringOfFrostGUID = summon->GetGUID();
+ }
+ }
- void Register() override
- {
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_mage_ring_of_frost_AuraScript::HandleEffectPeriodic, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
- OnEffectApply += AuraEffectApplyFn(spell_mage_ring_of_frost_AuraScript::Apply, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
- }
-
- private:
- TempSummon* GetRingOfFrostMinion() const
- {
- if (Creature* creature = ObjectAccessor::GetCreature(*GetOwner(), _ringOfFrostGUID))
- return creature->ToTempSummon();
- return nullptr;
- }
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_mage_ring_of_frost::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
+ OnEffectApply += AuraEffectApplyFn(spell_mage_ring_of_frost::Apply, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ }
- ObjectGuid _ringOfFrostGUID;
- };
+private:
+ TempSummon* GetRingOfFrostMinion() const
+ {
+ if (Creature* creature = ObjectAccessor::GetCreature(*GetOwner(), _ringOfFrostGUID))
+ return creature->ToTempSummon();
+ return nullptr;
+ }
- AuraScript* GetAuraScript() const override
- {
- return new spell_mage_ring_of_frost_AuraScript();
- }
+ ObjectGuid _ringOfFrostGUID;
};
// 82691 - Ring of Frost (freeze efect)
-/// Updated 4.3.4
-class spell_mage_ring_of_frost_freeze : public SpellScriptLoader
+class spell_mage_ring_of_frost_freeze : public SpellScript
{
- public:
- spell_mage_ring_of_frost_freeze() : SpellScriptLoader("spell_mage_ring_of_frost_freeze") { }
-
- class spell_mage_ring_of_frost_freeze_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mage_ring_of_frost_freeze_SpellScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_MAGE_RING_OF_FROST_SUMMON, SPELL_MAGE_RING_OF_FROST_FREEZE });
- }
-
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- WorldLocation const* dest = GetExplTargetDest();
- float outRadius = sSpellMgr->AssertSpellInfo(SPELL_MAGE_RING_OF_FROST_SUMMON)->GetEffect(EFFECT_0)->CalcRadius();
- float inRadius = 4.7f;
+ PrepareSpellScript(spell_mage_ring_of_frost_freeze);
- targets.remove_if([dest, outRadius, inRadius](WorldObject* target)
- {
- Unit* unit = target->ToUnit();
- if (!unit)
- return true;
- return unit->HasAura(SPELL_MAGE_RING_OF_FROST_DUMMY) || unit->HasAura(SPELL_MAGE_RING_OF_FROST_FREEZE) || unit->GetExactDist(dest) > outRadius || unit->GetExactDist(dest) < inRadius;
- });
- }
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_RING_OF_FROST_SUMMON, SPELL_MAGE_RING_OF_FROST_FREEZE });
+ }
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mage_ring_of_frost_freeze_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
- }
- };
+ void FilterTargets(std::list<WorldObject*>& targets)
+ {
+ WorldLocation const* dest = GetExplTargetDest();
+ float outRadius = sSpellMgr->AssertSpellInfo(SPELL_MAGE_RING_OF_FROST_SUMMON)->GetEffect(EFFECT_0)->CalcRadius();
+ float inRadius = 6.5f;
- SpellScript* GetSpellScript() const override
+ targets.remove_if([dest, outRadius, inRadius](WorldObject* target)
{
- return new spell_mage_ring_of_frost_freeze_SpellScript();
- }
+ Unit* unit = target->ToUnit();
+ if (!unit)
+ return true;
+ return unit->HasAura(SPELL_MAGE_RING_OF_FROST_DUMMY) || unit->HasAura(SPELL_MAGE_RING_OF_FROST_FREEZE) || unit->GetExactDist(dest) > outRadius || unit->GetExactDist(dest) < inRadius;
+ });
+ }
- class spell_mage_ring_of_frost_freeze_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mage_ring_of_frost_freeze_AuraScript);
+ void Register() override
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mage_ring_of_frost_freeze::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
+ }
+};
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_MAGE_RING_OF_FROST_DUMMY });
- }
+class spell_mage_ring_of_frost_freeze_AuraScript : public AuraScript
+{
+ PrepareAuraScript(spell_mage_ring_of_frost_freeze_AuraScript);
- void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
- if (GetCaster())
- GetCaster()->CastSpell(GetTarget(), SPELL_MAGE_RING_OF_FROST_DUMMY, true);
- }
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_RING_OF_FROST_DUMMY });
+ }
- void Register() override
- {
- AfterEffectRemove += AuraEffectRemoveFn(spell_mage_ring_of_frost_freeze_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL);
- }
- };
+ void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
+ if (GetCaster())
+ GetCaster()->CastSpell(GetTarget(), SPELL_MAGE_RING_OF_FROST_DUMMY, true);
+ }
- AuraScript* GetAuraScript() const override
- {
- return new spell_mage_ring_of_frost_freeze_AuraScript();
- }
+ void Register() override
+ {
+ AfterEffectRemove += AuraEffectRemoveFn(spell_mage_ring_of_frost_freeze_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL);
+ }
};
// 80353 - Time Warp
-class spell_mage_time_warp : public SpellScriptLoader
+class spell_mage_time_warp : public SpellScript
{
- public:
- spell_mage_time_warp() : SpellScriptLoader("spell_mage_time_warp") { }
+ PrepareSpellScript(spell_mage_time_warp);
- class spell_mage_time_warp_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mage_time_warp_SpellScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo(
- {
- SPELL_MAGE_TEMPORAL_DISPLACEMENT,
- SPELL_HUNTER_INSANITY,
- SPELL_SHAMAN_EXHAUSTION,
- SPELL_SHAMAN_SATED,
- SPELL_PET_NETHERWINDS_FATIGUED
- });
- }
-
- void RemoveInvalidTargets(std::list<WorldObject*>& targets)
- {
- targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_MAGE_TEMPORAL_DISPLACEMENT));
- targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_HUNTER_INSANITY));
- targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_SHAMAN_EXHAUSTION));
- targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_SHAMAN_SATED));
- }
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo(
+ {
+ SPELL_MAGE_TEMPORAL_DISPLACEMENT,
+ SPELL_HUNTER_INSANITY,
+ SPELL_SHAMAN_EXHAUSTION,
+ SPELL_SHAMAN_SATED,
+ SPELL_PET_NETHERWINDS_FATIGUED
+ });
+ }
- void ApplyDebuff()
- {
- if (Unit* target = GetHitUnit())
- target->CastSpell(target, SPELL_MAGE_TEMPORAL_DISPLACEMENT, true);
- }
+ void RemoveInvalidTargets(std::list<WorldObject*>& targets)
+ {
+ targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_MAGE_TEMPORAL_DISPLACEMENT));
+ targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_HUNTER_INSANITY));
+ targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_SHAMAN_EXHAUSTION));
+ targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_SHAMAN_SATED));
+ }
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mage_time_warp_SpellScript::RemoveInvalidTargets, EFFECT_ALL, TARGET_UNIT_CASTER_AREA_RAID);
- AfterHit += SpellHitFn(spell_mage_time_warp_SpellScript::ApplyDebuff);
- }
- };
+ void ApplyDebuff()
+ {
+ if (Unit* target = GetHitUnit())
+ target->CastSpell(target, SPELL_MAGE_TEMPORAL_DISPLACEMENT, true);
+ }
- SpellScript* GetSpellScript() const override
- {
- return new spell_mage_time_warp_SpellScript();
- }
+ void Register() override
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mage_time_warp::RemoveInvalidTargets, EFFECT_ALL, TARGET_UNIT_CASTER_AREA_RAID);
+ AfterHit += SpellHitFn(spell_mage_time_warp::ApplyDebuff);
+ }
};
/* 228597 - Frostbolt
84721 - Frozen Orb
190357 - Blizzard */
-class spell_mage_trigger_chilled : public SpellScriptLoader
+class spell_mage_trigger_chilled : public SpellScript
{
- public:
- spell_mage_trigger_chilled() : SpellScriptLoader("spell_mage_trigger_chilled") { }
-
- class spell_mage_trigger_chilled_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mage_trigger_chilled_SpellScript);
+ PrepareSpellScript(spell_mage_trigger_chilled);
- bool Validate(SpellInfo const* /*spell*/) override
- {
- return ValidateSpellInfo({ SPELL_MAGE_CHILLED });
- }
-
- void HandleChilled()
- {
- if (Unit* target = GetHitUnit())
- GetCaster()->CastSpell(target, SPELL_MAGE_CHILLED, true);
- }
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_CHILLED });
+ }
- void Register() override
- {
- OnHit += SpellHitFn(spell_mage_trigger_chilled_SpellScript::HandleChilled);
- }
- };
+ void HandleChilled()
+ {
+ if (Unit* target = GetHitUnit())
+ GetCaster()->CastSpell(target, SPELL_MAGE_CHILLED, true);
+ }
- SpellScript* GetSpellScript() const override
- {
- return new spell_mage_trigger_chilled_SpellScript();
- }
+ void Register() override
+ {
+ OnHit += SpellHitFn(spell_mage_trigger_chilled::HandleChilled);
+ }
};
// 33395 Water Elemental's Freeze
-class spell_mage_water_elemental_freeze : public SpellScriptLoader
+class spell_mage_water_elemental_freeze : public SpellScript
{
- public:
- spell_mage_water_elemental_freeze() : SpellScriptLoader("spell_mage_water_elemental_freeze") { }
-
- class spell_mage_water_elemental_freeze_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mage_water_elemental_freeze_SpellScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_MAGE_FINGERS_OF_FROST });
- }
-
- void HandleImprovedFreeze()
- {
- Unit* owner = GetCaster()->GetOwner();
- if (!owner)
- return;
-
- owner->CastSpell(owner, SPELL_MAGE_FINGERS_OF_FROST, true);
- }
-
- void Register() override
- {
- AfterHit += SpellHitFn(spell_mage_water_elemental_freeze_SpellScript::HandleImprovedFreeze);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mage_water_elemental_freeze_SpellScript();
- }
+ PrepareSpellScript(spell_mage_water_elemental_freeze);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_FINGERS_OF_FROST });
+ }
+
+ void HandleImprovedFreeze()
+ {
+ Unit* owner = GetCaster()->GetOwner();
+ if (!owner)
+ return;
+
+ owner->CastSpell(owner, SPELL_MAGE_FINGERS_OF_FROST, true);
+ }
+
+ void Register() override
+ {
+ AfterHit += SpellHitFn(spell_mage_water_elemental_freeze::HandleImprovedFreeze);
+ }
};
void AddSC_mage_spell_scripts()
{
- new spell_mage_blazing_barrier();
- new spell_mage_burning_determination();
- new spell_mage_cold_snap();
- new spell_mage_cone_of_cold();
- new spell_mage_conjure_refreshment();
- new spell_mage_focus_magic();
- new spell_mage_hot_streak();
- new spell_mage_ice_barrier();
- new spell_mage_ignite();
- new spell_mage_glyph_of_icy_veins();
- new spell_mage_glyph_of_polymorph();
- new spell_mage_imp_mana_gems();
- new spell_mage_living_bomb();
- new spell_mage_master_of_elements();
- new spell_mage_nether_vortex();
- new spell_mage_permafrost();
- new spell_mage_polymorph();
- new spell_mage_polymorph_cast_visual();
- new spell_mage_prismatic_barrier();
- new spell_mage_ring_of_frost();
- new spell_mage_ring_of_frost_freeze();
- new spell_mage_time_warp();
- new spell_mage_trigger_chilled();
- new spell_mage_water_elemental_freeze();
+ RegisterAuraScript(spell_mage_blazing_barrier);
+ RegisterAuraScript(spell_mage_burning_determination);
+ RegisterSpellScript(spell_mage_cold_snap);
+ RegisterSpellScript(spell_mage_cone_of_cold);
+ RegisterSpellScript(spell_mage_conjure_refreshment);
+ RegisterAuraScript(spell_mage_ice_barrier);
+ RegisterAuraScript(spell_mage_ignite);
+ RegisterAuraScript(spell_mage_imp_mana_gems);
+ RegisterSpellScript(spell_mage_living_bomb);
+ RegisterSpellScript(spell_mage_living_bomb_explosion);
+ RegisterAuraScript(spell_mage_living_bomb_periodic);
+ RegisterSpellScript(spell_mage_polymorph_visual);
+ RegisterAuraScript(spell_mage_prismatic_barrier);
+ RegisterAuraScript(spell_mage_ring_of_frost);
+ RegisterSpellAndAuraScriptPair(spell_mage_ring_of_frost_freeze, spell_mage_ring_of_frost_freeze_AuraScript);
+ RegisterSpellScript(spell_mage_time_warp);
+ RegisterSpellScript(spell_mage_trigger_chilled);
+ RegisterSpellScript(spell_mage_water_elemental_freeze);
}