diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 6 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_mage.cpp | 56 |
2 files changed, 62 insertions, 0 deletions
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 32776cc27ea..87603c9a888 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -4649,6 +4649,12 @@ void SpellMgr::LoadSpellInfoCorrections() }); }); + // Ray of Frost (Fingers of Frost charges) + ApplySpellFix({ 269748 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx &= ~SPELL_ATTR1_IS_CHANNELLED; + }); + for (SpellInfo const& s : mSpellInfoMap) { SpellInfo* spellInfo = &const_cast<SpellInfo&>(s); diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index ecd0f5a086f..a67e313675b 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -71,6 +71,8 @@ enum MageSpells SPELL_MAGE_LIVING_BOMB_PERIODIC = 217694, SPELL_MAGE_MANA_SURGE = 37445, SPELL_MAGE_MASTER_OF_TIME = 342249, + SPELL_MAGE_RAY_OF_FROST_BONUS = 208141, + SPELL_MAGE_RAY_OF_FROST_FINGERS_OF_FROST = 269748, SPELL_MAGE_REVERBERATE = 281482, SPELL_MAGE_RING_OF_FROST_DUMMY = 91264, SPELL_MAGE_RING_OF_FROST_FREEZE = 82691, @@ -1110,6 +1112,59 @@ class spell_mage_prismatic_barrier : public AuraScript } }; +// 205021 - Ray of Frost +class spell_mage_ray_of_frost : public SpellScript +{ + PrepareSpellScript(spell_mage_ray_of_frost); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo ({ SPELL_MAGE_RAY_OF_FROST_FINGERS_OF_FROST }); + } + + void HandleOnHit() + { + if (Unit* caster = GetCaster()) + caster->CastSpell(caster, SPELL_MAGE_RAY_OF_FROST_FINGERS_OF_FROST, TRIGGERED_IGNORE_CAST_IN_PROGRESS); + } + + void Register() override + { + OnHit += SpellHitFn(spell_mage_ray_of_frost::HandleOnHit); + } +}; + +class spell_mage_ray_of_frost_aura : public AuraScript +{ + PrepareAuraScript(spell_mage_ray_of_frost_aura); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo ({ SPELL_MAGE_RAY_OF_FROST_BONUS, SPELL_MAGE_RAY_OF_FROST_FINGERS_OF_FROST }); + } + + void HandleEffectPeriodic(AuraEffect const* aurEff) + { + if (Unit* caster = GetCaster()) + { + if (aurEff->GetTickNumber() > 1) // First tick should deal base damage + caster->CastSpell(caster, SPELL_MAGE_RAY_OF_FROST_BONUS, true); + } + } + + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Unit* caster = GetCaster()) + caster->RemoveAurasDueToSpell(SPELL_MAGE_RAY_OF_FROST_FINGERS_OF_FROST); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_mage_ray_of_frost_aura::HandleEffectPeriodic, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE); + AfterEffectRemove += AuraEffectRemoveFn(spell_mage_ray_of_frost_aura::OnRemove, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); + } +}; + // 136511 - Ring of Frost class spell_mage_ring_of_frost : public AuraScript { @@ -1380,6 +1435,7 @@ void AddSC_mage_spell_scripts() RegisterSpellScript(spell_mage_living_bomb_periodic); RegisterSpellScript(spell_mage_polymorph_visual); RegisterSpellScript(spell_mage_prismatic_barrier); + RegisterSpellAndAuraScriptPair(spell_mage_ray_of_frost, spell_mage_ray_of_frost_aura); RegisterSpellScript(spell_mage_ring_of_frost); RegisterSpellAndAuraScriptPair(spell_mage_ring_of_frost_freeze, spell_mage_ring_of_frost_freeze_AuraScript); RegisterSpellScript(spell_mage_supernova); |