diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Spells/spell_mage.cpp | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index 614933b8452..7d26d58b008 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -33,11 +33,15 @@ enum MageSpells { + SPELL_MAGE_ALTER_TIME_AURA = 110909, + SPELL_MAGE_ALTER_TIME_VISUAL = 347402, + SPELL_MAGE_ARCANE_ALTER_TIME_AURA = 342246, SPELL_MAGE_ARCANE_BARRAGE_ENERGIZE = 321529, SPELL_MAGE_ARCANE_BARRAGE_R3 = 321526, SPELL_MAGE_ARCANE_CHARGE = 36032, SPELL_MAGE_ARCANE_MAGE = 137021, SPELL_MAGE_BLAZING_BARRIER_TRIGGER = 235314, + SPELL_MAGE_BLINK = 1953, SPELL_MAGE_CAUTERIZE_DOT = 87023, SPELL_MAGE_CAUTERIZED = 87024, SPELL_MAGE_CONE_OF_COLD = 120, @@ -54,6 +58,7 @@ enum MageSpells SPELL_MAGE_LIVING_BOMB_EXPLOSION = 44461, SPELL_MAGE_LIVING_BOMB_PERIODIC = 217694, SPELL_MAGE_MANA_SURGE = 37445, + SPELL_MAGE_MASTER_OF_TIME = 342249, SPELL_MAGE_REVERBERATE = 281482, SPELL_MAGE_RING_OF_FROST_DUMMY = 91264, SPELL_MAGE_RING_OF_FROST_FREEZE = 82691, @@ -80,6 +85,85 @@ enum MiscSpells SPELL_MAGE_CHILLED = 205708 }; +// 110909 - Alter Time Aura +// 342246 - Alter Time Aura +class spell_mage_alter_time_aura : public AuraScript +{ + PrepareAuraScript(spell_mage_alter_time_aura); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo + ({ + SPELL_MAGE_ALTER_TIME_VISUAL, + SPELL_MAGE_MASTER_OF_TIME, + SPELL_MAGE_BLINK, + }); + } + + void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* unit = GetTarget(); + _health = unit->GetHealth(); + _pos = unit->GetPosition(); + } + + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* unit = GetTarget(); + if (unit->GetDistance(_pos) <= 100.0f && GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE) + { + unit->SetHealth(_health); + unit->NearTeleportTo(_pos); + + if (unit->HasAura(SPELL_MAGE_MASTER_OF_TIME)) + { + SpellInfo const* blink = sSpellMgr->AssertSpellInfo(SPELL_MAGE_BLINK, DIFFICULTY_NONE); + unit->GetSpellHistory()->ResetCharges(blink->ChargeCategoryId); + } + unit->CastSpell(unit, SPELL_MAGE_ALTER_TIME_VISUAL); + } + } + + void Register() override + { + OnEffectApply += AuraEffectApplyFn(spell_mage_alter_time_aura::OnApply, EFFECT_0, SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_mage_alter_time_aura::AfterRemove, EFFECT_0, SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS, AURA_EFFECT_HANDLE_REAL); + } + +private: + uint64 _health = 0; + Position _pos; +}; + +// 127140 - Alter Time Active +// 342247 - Alter Time Active +class spell_mage_alter_time_active : public SpellScript +{ + PrepareSpellScript(spell_mage_alter_time_active); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo + ({ + SPELL_MAGE_ALTER_TIME_AURA, + SPELL_MAGE_ARCANE_ALTER_TIME_AURA, + }); + } + + void RemoveAlterTimeAura(SpellEffIndex /*effIndex*/) + { + Unit* unit = GetCaster(); + unit->RemoveAura(SPELL_MAGE_ALTER_TIME_AURA, ObjectGuid::Empty, 0, AURA_REMOVE_BY_EXPIRE); + unit->RemoveAura(SPELL_MAGE_ARCANE_ALTER_TIME_AURA, ObjectGuid::Empty, 0, AURA_REMOVE_BY_EXPIRE); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_mage_alter_time_active::RemoveAlterTimeAura, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + // 44425 - Arcane Barrage class spell_mage_arcane_barrage : public SpellScript { @@ -982,6 +1066,8 @@ class spell_mage_water_elemental_freeze : public SpellScript void AddSC_mage_spell_scripts() { + RegisterAuraScript(spell_mage_alter_time_aura); + RegisterSpellScript(spell_mage_alter_time_active); RegisterSpellScript(spell_mage_arcane_barrage); RegisterSpellScript(spell_mage_arcane_charge_clear); RegisterSpellScript(spell_mage_arcane_explosion); |