aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp
index 2b30144149d..13012dc6fbc 100644
--- a/src/server/scripts/Spells/spell_mage.cpp
+++ b/src/server/scripts/Spells/spell_mage.cpp
@@ -45,6 +45,8 @@ enum MageSpells
SPELL_MAGE_BLINK = 1953,
SPELL_MAGE_CAUTERIZE_DOT = 87023,
SPELL_MAGE_CAUTERIZED = 87024,
+ SPELL_MAGE_COMET_STORM_DAMAGE = 153596,
+ SPELL_MAGE_COMET_STORM_VISUAL = 228601,
SPELL_MAGE_CONE_OF_COLD = 120,
SPELL_MAGE_CONE_OF_COLD_SLOW = 212792,
SPELL_MAGE_CONJURE_REFRESHMENT = 116136,
@@ -430,6 +432,75 @@ class spell_mage_cold_snap : public SpellScript
}
};
+class CometStormEvent : public BasicEvent
+{
+public:
+ CometStormEvent(Unit* caster, ObjectGuid originalCastId, Position const& dest) : _caster(caster), _originalCastId(originalCastId), _dest(dest), _count(0) { }
+
+ bool Execute(uint64 time, uint32 /*diff*/) override
+ {
+ Position destPosition = {_dest.GetPositionX() + frand(-3.0f, 3.0f), _dest.GetPositionY() + frand(-3.0f, 3.0f), _dest.GetPositionZ()};
+ _caster->CastSpell(destPosition, SPELL_MAGE_COMET_STORM_VISUAL,
+ CastSpellExtraArgs(TRIGGERED_IGNORE_CAST_IN_PROGRESS).SetOriginalCastId(_originalCastId));
+ ++_count;
+
+ if (_count >= 7)
+ return true;
+
+ _caster->m_Events.AddEvent(this, Milliseconds(time) + randtime(100ms, 275ms));
+ return false;
+ }
+
+private:
+ Unit* _caster;
+ ObjectGuid _originalCastId;
+ Position _dest;
+ uint8 _count;
+};
+
+// 153595 - Comet Storm (launch)
+class spell_mage_comet_storm : public SpellScript
+{
+ PrepareSpellScript(spell_mage_comet_storm);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_COMET_STORM_VISUAL });
+ }
+
+ void EffectHit(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->m_Events.AddEventAtOffset(new CometStormEvent(GetCaster(), GetSpell()->m_castId, *GetHitDest()), randtime(100ms, 275ms));
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_mage_comet_storm::EffectHit, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+};
+
+// 228601 - Comet Storm (damage)
+class spell_mage_comet_storm_damage : public SpellScript
+{
+ PrepareSpellScript(spell_mage_comet_storm_damage);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_COMET_STORM_DAMAGE });
+ }
+
+ void HandleEffectHitTarget(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->CastSpell(*GetHitDest(), SPELL_MAGE_COMET_STORM_DAMAGE,
+ CastSpellExtraArgs(TRIGGERED_IGNORE_CAST_IN_PROGRESS).SetOriginalCastId(GetSpell()->m_originalCastId));
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_mage_comet_storm_damage::HandleEffectHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+};
+
// 120 - Cone of Cold
class spell_mage_cone_of_cold : public SpellScript
{
@@ -1226,6 +1297,8 @@ void AddSC_mage_spell_scripts()
RegisterSpellScript(spell_mage_burning_determination);
RegisterSpellAndAuraScriptPair(spell_mage_cauterize, spell_mage_cauterize_AuraScript);
RegisterSpellScript(spell_mage_cold_snap);
+ RegisterSpellScript(spell_mage_comet_storm);
+ RegisterSpellScript(spell_mage_comet_storm_damage);
RegisterSpellScript(spell_mage_cone_of_cold);
RegisterSpellScript(spell_mage_conjure_refreshment);
RegisterSpellScript(spell_mage_fingers_of_frost);