diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard_kolurg.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard_kolurg.cpp index 3e73dda8e..6f7559285 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard_kolurg.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard_kolurg.cpp @@ -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()