aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAqua Deus <95978183+aquadeus@users.noreply.github.com>2022-07-16 16:04:06 +0200
committerGitHub <noreply@github.com>2022-07-16 16:04:06 +0200
commit2358e51182916d62a300027f6e14f1f566743f49 (patch)
tree1fbe484ccab97f20d62dfdb557477fe1581e0c08
parent8cbc3923a18add49dd483e0e6e9d851f1d4d59f7 (diff)
Scripts/Spells: Fix mage spell Ray of Frost (#28090)
-rw-r--r--sql/updates/world/master/2022_07_16_06_world_mage_ray_of_frost.sql3
-rw-r--r--src/server/game/Spells/SpellMgr.cpp6
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp56
3 files changed, 65 insertions, 0 deletions
diff --git a/sql/updates/world/master/2022_07_16_06_world_mage_ray_of_frost.sql b/sql/updates/world/master/2022_07_16_06_world_mage_ray_of_frost.sql
new file mode 100644
index 00000000000..4686eaf17dd
--- /dev/null
+++ b/sql/updates/world/master/2022_07_16_06_world_mage_ray_of_frost.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_mage_ray_of_frost';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(205021, 'spell_mage_ray_of_frost');
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);