aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/SpellMgr.cpp6
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp56
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);