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