refactor(Scripts/MagisterTerrace): Update Vexallus script (#17892)

* refactor(Scripts/MagisterTerrace): Update Vexallus script

* Update src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp
This commit is contained in:
Andrew
2023-11-29 16:34:11 -03:00
committed by GitHub
parent 635288b5c5
commit 4552e89bfd

View File

@@ -48,37 +48,36 @@ enum Spells
enum Misc
{
NPC_PURE_ENERGY = 24745,
INTERVAL_MODIFIER = 15,
INTERVAL_SWITCH = 6,
EVENT_SPELL_CHAIN_LIGHTNING = 1,
EVENT_SPELL_ARCANE_SHOCK = 2,
EVENT_HEALTH_CHECK = 3,
NPC_PURE_ENERGY = 24745
};
struct boss_vexallus : public ScriptedAI
struct boss_vexallus : public BossAI
{
boss_vexallus(Creature* creature) : ScriptedAI(creature), summons(me)
{
instance = creature->GetInstanceScript();
}
InstanceScript* instance;
EventMap events;
SummonList summons;
uint8 IntervalHealthAmount;
bool Enraged;
boss_vexallus(Creature* creature) : BossAI(creature, DATA_VEXALLUS) { }
void Reset() override
{
summons.DespawnAll();
IntervalHealthAmount = 1;
_Reset();
instance->SetBossState(DATA_VEXALLUS, NOT_STARTED);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ENERGY_FEEDBACK);
ScheduleHealthCheckEvent({ 85, 70, 55, 40 }, [&]
{
Talk(SAY_ENERGY);
Talk(EMOTE_DISCHARGE_ENERGY);
if (IsHeroic())
{
DoCastSelf(SPELL_SUMMON_PURE_ENERGY_H1);
DoCastSelf(SPELL_SUMMON_PURE_ENERGY_H2);
}
else
DoCastSelf(SPELL_SUMMON_PURE_ENERGY_N);
});
ScheduleHealthCheckEvent(20, [&]
{
scheduler.CancelAll();
DoCastSelf(SPELL_OVERLOAD, true);
});
}
void KilledUnit(Unit* victim) override
@@ -87,21 +86,20 @@ struct boss_vexallus : public ScriptedAI
Talk(SAY_KILL);
}
void JustDied(Unit* /*killer*/) override
{
summons.DespawnAll();
instance->SetBossState(DATA_VEXALLUS, DONE);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ENERGY_FEEDBACK);
}
void JustEngagedWith(Unit* /*who*/) override
{
_JustEngagedWith();
Talk(SAY_AGGRO);
instance->SetBossState(DATA_VEXALLUS, IN_PROGRESS);
events.ScheduleEvent(EVENT_SPELL_CHAIN_LIGHTNING, 8000);
events.ScheduleEvent(EVENT_SPELL_ARCANE_SHOCK, 5000);
events.ScheduleEvent(EVENT_HEALTH_CHECK, 1000);
ScheduleTimedEvent(8s, [&]
{
DoCastRandomTarget(DUNGEON_MODE(SPELL_CHAIN_LIGHTNING_N, SPELL_CHAIN_LIGHTNING_H));
}, 8s, 8s);
ScheduleTimedEvent(5s, [&]
{
DoCastRandomTarget(DUNGEON_MODE(SPELL_ARCANE_SHOCK_N, SPELL_ARCANE_SHOCK_H));
}, 8s, 8s);
}
void JustSummoned(Creature* summon) override
@@ -121,56 +119,6 @@ struct boss_vexallus : public ScriptedAI
if (killer)
killer->CastSpell(killer, SPELL_ENERGY_FEEDBACK, true, 0, 0, summon->GetGUID());
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_HEALTH_CHECK:
//used for check, when Vexallus cast adds 85%, 70%, 55%, 40%
if (!HealthAbovePct(100 - INTERVAL_MODIFIER * IntervalHealthAmount))
{
if (IntervalHealthAmount++ == INTERVAL_SWITCH)
{
events.Reset();
me->CastSpell(me, SPELL_OVERLOAD, true);
return;
}
Talk(SAY_ENERGY);
Talk(EMOTE_DISCHARGE_ENERGY);
if (IsHeroic())
{
me->CastSpell(me, SPELL_SUMMON_PURE_ENERGY_H1, false);
me->CastSpell(me, SPELL_SUMMON_PURE_ENERGY_H2, false);
}
else
me->CastSpell(me, SPELL_SUMMON_PURE_ENERGY_N, false);
}
events.ScheduleEvent(EVENT_HEALTH_CHECK, 0);
break;
case EVENT_SPELL_CHAIN_LIGHTNING:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
me->CastSpell(target, DUNGEON_MODE(SPELL_CHAIN_LIGHTNING_N, SPELL_CHAIN_LIGHTNING_H), false);
events.ScheduleEvent(EVENT_SPELL_CHAIN_LIGHTNING, 8000);
break;
case EVENT_SPELL_ARCANE_SHOCK:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 20.0f))
me->CastSpell(target, DUNGEON_MODE(SPELL_ARCANE_SHOCK_N, SPELL_ARCANE_SHOCK_H), false);
events.ScheduleEvent(EVENT_SPELL_ARCANE_SHOCK, 8000);
break;
}
DoMeleeAttackIfReady();
}
};
void AddSC_boss_vexallus()