diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp index fd8978d22..82ccd7030 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp @@ -19,48 +19,61 @@ #include "ScriptedCreature.h" #include "karazhan.h" -enum MaidenOfVirtue +enum Text { - SAY_AGGRO = 0, - SAY_SLAY = 1, - SAY_REPENTANCE = 2, - SAY_DEATH = 3, + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_REPENTANCE = 2, + SAY_DEATH = 3 +}; - SPELL_REPENTANCE = 29511, - SPELL_HOLY_FIRE = 29522, - SPELL_HOLY_WRATH = 32445, - SPELL_HOLY_GROUND = 29523, - SPELL_BERSERK = 26662, - - EVENT_SPELL_REPENTANCE = 1, - EVENT_SPELL_HOLY_FIRE = 2, - EVENT_SPELL_HOLY_WRATH = 3, - EVENT_SPELL_ENRAGE = 4, - EVENT_KILL_TALK = 5 +enum Spells +{ + SPELL_REPENTANCE = 29511, + SPELL_HOLY_FIRE = 29522, + SPELL_HOLY_WRATH = 32445, + SPELL_HOLY_GROUND = 29523, + SPELL_BERSERK = 26662 }; struct boss_maiden_of_virtue : public BossAI { boss_maiden_of_virtue(Creature* creature) : BossAI(creature, DATA_MAIDEN) { } + void Reset() override + { + BossAI::Reset(); + } + void JustEngagedWith(Unit* who) override { BossAI::JustEngagedWith(who); Talk(SAY_AGGRO); - DoCastAOE(SPELL_HOLY_GROUND, true); - events.ScheduleEvent(EVENT_SPELL_REPENTANCE, 25s); - events.ScheduleEvent(EVENT_SPELL_HOLY_FIRE, 8s); - events.ScheduleEvent(EVENT_SPELL_HOLY_WRATH, 15s); - events.ScheduleEvent(EVENT_SPELL_ENRAGE, 10min); + scheduler.Schedule(25s, [this](TaskContext context) + { + DoCastAOE(SPELL_REPENTANCE, true); + Talk(SAY_REPENTANCE); + context.Repeat(25s, 35s); + }).Schedule(8s, [this](TaskContext context) + { + DoCastRandomTarget(SPELL_HOLY_FIRE, 0, 50.0f); + context.Repeat(8s, 18s); + }).Schedule(15s, [this](TaskContext context) + { + DoCastRandomTarget(SPELL_HOLY_WRATH, 0, 80.0f); + context.Repeat(20s, 25s); + }).Schedule(10min, [this](TaskContext /*context*/) + { + DoCastSelf(SPELL_BERSERK, true); + }); } - void KilledUnit(Unit* /*victim*/) override + void KilledUnit(Unit* victim) override { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) + if (victim->GetTypeId() == TYPEID_PLAYER) { Talk(SAY_SLAY); - events.ScheduleEvent(EVENT_KILL_TALK, 5s); } } @@ -75,30 +88,10 @@ struct boss_maiden_of_virtue : public BossAI if (!UpdateVictim()) return; - events.Update(diff); + scheduler.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING)) return; - switch (events.ExecuteEvent()) - { - case EVENT_SPELL_REPENTANCE: - DoCastAOE(SPELL_REPENTANCE, true); - Talk(SAY_REPENTANCE); - events.Repeat(25s, 35s); - break; - case EVENT_SPELL_HOLY_FIRE: - DoCastRandomTarget(SPELL_HOLY_FIRE, 0, 50.0f); - events.Repeat(8s, 18s); - break; - case EVENT_SPELL_HOLY_WRATH: - DoCastRandomTarget(SPELL_HOLY_WRATH, 0, 80.0f); - events.Repeat(20s, 25s); - break; - case EVENT_SPELL_ENRAGE: - DoCastSelf(SPELL_BERSERK, true); - break; - } - DoMeleeAttackIfReady(); } };