refactor(Scripts/TheNexus): Update Command Kolurg script (#20783)

This commit is contained in:
Andrew
2024-11-30 16:52:57 -03:00
committed by GitHub
parent 4a8247824e
commit bef9e46e9b

View File

@@ -27,15 +27,6 @@ enum Spells
SPELL_WHIRLWIND = 38618
};
enum Events
{
EVENT_BATTLE_SHOUT = 1,
EVENT_FRIGHTENING_SHOUT = 2,
EVENT_WHIRLWIND = 3,
EVENT_COMMANDER_CHARGE = 4,
EVENT_KILL_TALK = 5
};
enum Says
{
SAY_AGGRO = 0,
@@ -45,32 +36,40 @@ enum Says
struct boss_commander_stoutbeard : public BossAI
{
boss_commander_stoutbeard(Creature* creature) : BossAI(creature, DATA_COMMANDER_EVENT) {}
void Reset() override
{
BossAI::Reset();
}
boss_commander_stoutbeard(Creature* creature) : BossAI(creature, DATA_COMMANDER_EVENT) { }
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
Talk(SAY_AGGRO);
events.ScheduleEvent(EVENT_BATTLE_SHOUT, 0ms);
events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 10s);
events.ScheduleEvent(EVENT_WHIRLWIND, 15s);
events.ScheduleEvent(EVENT_COMMANDER_CHARGE, 1s);
me->RemoveAllAuras();
ScheduleTimedEvent(1s, [&]
{
DoCastSelf(SPELL_BATTLE_SHOUT, true);
}, 2min);
ScheduleTimedEvent(10s, [&]
{
DoCastVictim(SPELL_FRIGHTENING_SHOUT);
}, 15s, 20s);
ScheduleTimedEvent(15s, [&]
{
DoCastAOE(SPELL_WHIRLWIND);
}, 16s);
ScheduleTimedEvent(1s, [&]
{
if (Unit* target = SelectTarget(SelectTargetMethod::MinDistance, 0, 25.0f))
DoCast(target, SPELL_CHARGE);
}, 20s);
}
void KilledUnit(Unit*) override
{
if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
{
Talk(SAY_KILL);
events.ScheduleEvent(EVENT_KILL_TALK, 6s);
}
Talk(SAY_KILL);
}
void JustDied(Unit* killer) override
@@ -78,39 +77,6 @@ struct boss_commander_stoutbeard : public BossAI
BossAI::JustDied(killer);
Talk(SAY_DEATH);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_BATTLE_SHOUT:
me->CastSpell(me, SPELL_BATTLE_SHOUT, true);
events.ScheduleEvent(EVENT_BATTLE_SHOUT, 2min);
break;
case EVENT_FRIGHTENING_SHOUT:
me->CastSpell(me->GetVictim(), SPELL_FRIGHTENING_SHOUT, false);
events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 15s, 20s);
break;
case EVENT_WHIRLWIND:
me->CastSpell(me, SPELL_WHIRLWIND, false);
events.ScheduleEvent(EVENT_WHIRLWIND, 16s);
break;
case EVENT_COMMANDER_CHARGE:
if (Unit* target = SelectTarget(SelectTargetMethod::MinDistance, 0, 25.0f))
me->CastSpell(target, SPELL_CHARGE, false);
events.ScheduleEvent(EVENT_COMMANDER_CHARGE, 20s);
break;
}
DoMeleeAttackIfReady();
}
};
void AddSC_boss_commander_stoutbeard()