Scripts/Spells: Implement mage Alter Time

This commit is contained in:
sueastward
2021-05-27 12:56:10 +02:00
committed by Shauren
parent 480039f913
commit 28c075765b
2 changed files with 93 additions and 0 deletions
@@ -0,0 +1,7 @@
-- mage Alter Time spell
DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_mage_alter_time_aura', 'spell_mage_alter_time_active');
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
(110909,'spell_mage_alter_time_aura'),
(127140,'spell_mage_alter_time_active'),
(342246,'spell_mage_alter_time_aura'),
(342247,'spell_mage_alter_time_active');
+86
View File
@@ -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);