diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Spells/spell_mage.cpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index 1294032263a..2db4a8676f3 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -62,6 +62,7 @@ enum MageSpells SPELL_MAGE_FEEL_THE_BURN = 383391, SPELL_MAGE_FINGERS_OF_FROST = 44544, SPELL_MAGE_FIRE_BLAST = 108853, + SPELL_MAGE_FLURRY_DAMAGE = 228596, SPELL_MAGE_FIRESTARTER = 205026, SPELL_MAGE_FROST_NOVA = 122, SPELL_MAGE_GIRAFFE_FORM = 32816, @@ -94,6 +95,7 @@ enum MageSpells SPELL_MAGE_CHAIN_REACTION_DUMMY = 278309, SPELL_MAGE_CHAIN_REACTION = 278310, SPELL_MAGE_TOUCH_OF_THE_MAGI_EXPLODE = 210833, + SPELL_MAGE_WINTERS_CHILL = 228358 }; // 110909 - Alter Time Aura @@ -772,6 +774,73 @@ class spell_mage_flame_on : public AuraScript } }; +// 44614 - Flurry +class spell_mage_flurry : public SpellScript +{ + class FlurryEvent : public BasicEvent + { + public: + FlurryEvent(Unit* caster, ObjectGuid const& target, ObjectGuid const& originalCastId, int32 count) + : _caster(caster), _target(target), _originalCastId(originalCastId), _count(count) { } + + bool Execute(uint64 time, uint32 /*diff*/) override + { + Unit* target = ObjectAccessor::GetUnit(*_caster, _target); + + if (!target) + return true; + + _caster->CastSpell(target, SPELL_MAGE_FLURRY_DAMAGE, CastSpellExtraArgs(TRIGGERED_IGNORE_CAST_IN_PROGRESS).SetOriginalCastId(_originalCastId)); + + if (!--_count) + return true; + + _caster->m_Events.AddEvent(this, Milliseconds(time) + randtime(300ms, 400ms)); + return false; + } + + private: + Unit* _caster; + ObjectGuid _target; + ObjectGuid _originalCastId; + int32 _count; + }; + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MAGE_FLURRY_DAMAGE }); + } + + void EffectHit(SpellEffIndex /*effIndex*/) const + { + GetCaster()->m_Events.AddEventAtOffset(new FlurryEvent(GetCaster(), GetHitUnit()->GetGUID(), GetSpell()->m_castId, GetEffectValue() - 1), randtime(300ms, 400ms)); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_mage_flurry::EffectHit, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 228354 - Flurry (damage) +class spell_mage_flurry_damage : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MAGE_WINTERS_CHILL }); + } + + void HandleDamage(SpellEffIndex /*effIndex*/) const + { + GetCaster()->CastSpell(GetHitUnit(), SPELL_MAGE_WINTERS_CHILL, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_mage_flurry_damage::HandleDamage, EFFECT_1, SPELL_EFFECT_SCHOOL_DAMAGE); + } +}; + // 116 - Frostbolt class spell_mage_frostbolt : public SpellScript { @@ -1467,6 +1536,8 @@ void AddSC_mage_spell_scripts() RegisterSpellScript(spell_mage_firestarter); RegisterSpellScript(spell_mage_firestarter_dots); RegisterSpellScript(spell_mage_flame_on); + RegisterSpellScript(spell_mage_flurry); + RegisterSpellScript(spell_mage_flurry_damage); RegisterSpellScript(spell_mage_frostbolt); RegisterSpellScript(spell_mage_hyper_impact); RegisterSpellScript(spell_mage_ice_barrier); |