diff --git a/data/sql/updates/pending_db_world/rev_1714650326089446105.sql b/data/sql/updates/pending_db_world/rev_1714650326089446105.sql new file mode 100644 index 000000000..9e128a556 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1714650326089446105.sql @@ -0,0 +1,3 @@ +-- +DELETE FROM `spell_script_names` WHERE `spell_id` = 30166; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (30166, 'spell_magtheridon_shadow_grasp_visual'); diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp index 1994fefce..09183cc5d 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp @@ -52,6 +52,7 @@ enum Spells SPELL_BERSERK = 27680, SPELL_SHADOW_GRASP = 30410, SPELL_SHADOW_GRASP_VISUAL = 30166, + SPELL_SHADOW_CAGE_STUN = 30168, SPELL_MIND_EXHAUSTION = 44032, SPELL_QUAKE = 30657, SPELL_QUAKE_KNOCKBACK = 30571, @@ -65,13 +66,13 @@ enum Spells enum Groups { - GROUP_INTERRUPT_CHECK = 0, - GROUP_EARLY_RELEASE_CHECK = 1 + GROUP_EARLY_RELEASE_CHECK = 0 }; enum Actions { - ACTION_INCREASE_HELLFIRE_CHANNELER_DEATH_COUNT = 1 + ACTION_INCREASE_HELLFIRE_CHANNELER_DEATH_COUNT = 1, + ACTION_BANISH_SELF = 2 }; struct boss_magtheridon : public BossAI @@ -188,21 +189,6 @@ struct boss_magtheridon : public BossAI { DoCastSelf(SPELL_BLAST_NOVA); scheduler.DelayAll(10s); - - _interruptScheduler.Schedule(50ms, GROUP_INTERRUPT_CHECK, [this](TaskContext context) - { - if (me->GetAuraCount(SPELL_SHADOW_GRASP_VISUAL) == 5) - { - Talk(SAY_BANISH); - me->InterruptNonMeleeSpells(true); - scheduler.CancelGroup(GROUP_INTERRUPT_CHECK); - } - else - context.Repeat(50ms); - }).Schedule(12s, GROUP_INTERRUPT_CHECK, [this](TaskContext /*context*/) - { - _interruptScheduler.CancelGroup(GROUP_INTERRUPT_CHECK); - }); context.Repeat(54350ms, 55400ms); }).Schedule(22min, [this](TaskContext /*context*/) { @@ -228,6 +214,11 @@ struct boss_magtheridon : public BossAI }); } } + else if (action == ACTION_BANISH_SELF ) + { + Talk(SAY_BANISH); + me->CastSpell(me, SPELL_SHADOW_CAGE_STUN, true); + } } void JustEngagedWith(Unit* who) override @@ -350,6 +341,30 @@ class spell_magtheridon_shadow_grasp : public AuraScript } }; +class spell_magtheridon_shadow_grasp_visual : public AuraScript +{ + PrepareAuraScript(spell_magtheridon_shadow_grasp_visual); + + void HandleDummyApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (GetTarget()->GetAuraCount(SPELL_SHADOW_GRASP_VISUAL) == 5) + { + GetTarget()->GetAI()->DoAction(ACTION_BANISH_SELF); + } + } + + void HandleDummyRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_SHADOW_CAGE_STUN); + } + + void Register() override + { + OnEffectApply += AuraEffectApplyFn(spell_magtheridon_shadow_grasp_visual::HandleDummyApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + OnEffectRemove += AuraEffectRemoveFn(spell_magtheridon_shadow_grasp_visual::HandleDummyRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + class spell_magtheridon_quake : public SpellScript { PrepareSpellScript(spell_magtheridon_quake); @@ -417,6 +432,7 @@ void AddSC_boss_magtheridon() RegisterMagtheridonsLairCreatureAI(npc_target_trigger); RegisterSpellScript(spell_magtheridon_blaze); RegisterSpellScript(spell_magtheridon_shadow_grasp); + RegisterSpellScript(spell_magtheridon_shadow_grasp_visual); RegisterSpellScript(spell_magtheridon_quake); RegisterSpellScript(spell_magtheridon_debris_target_selector); new go_manticron_cube();