mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-16 10:30:27 +00:00
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:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user