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