refactor(Scripts/Karazhan): Update Maiden of Virtue (#16683)

* init

* .
This commit is contained in:
Eddy Vega
2023-07-17 05:22:04 -06:00
committed by GitHub
parent 3a7274709b
commit df8de555a3

View File

@@ -19,48 +19,61 @@
#include "ScriptedCreature.h" #include "ScriptedCreature.h"
#include "karazhan.h" #include "karazhan.h"
enum MaidenOfVirtue enum Text
{ {
SAY_AGGRO = 0, SAY_AGGRO = 0,
SAY_SLAY = 1, SAY_SLAY = 1,
SAY_REPENTANCE = 2, SAY_REPENTANCE = 2,
SAY_DEATH = 3, SAY_DEATH = 3
};
SPELL_REPENTANCE = 29511, enum Spells
SPELL_HOLY_FIRE = 29522, {
SPELL_HOLY_WRATH = 32445, SPELL_REPENTANCE = 29511,
SPELL_HOLY_GROUND = 29523, SPELL_HOLY_FIRE = 29522,
SPELL_BERSERK = 26662, SPELL_HOLY_WRATH = 32445,
SPELL_HOLY_GROUND = 29523,
EVENT_SPELL_REPENTANCE = 1, SPELL_BERSERK = 26662
EVENT_SPELL_HOLY_FIRE = 2,
EVENT_SPELL_HOLY_WRATH = 3,
EVENT_SPELL_ENRAGE = 4,
EVENT_KILL_TALK = 5
}; };
struct boss_maiden_of_virtue : public BossAI struct boss_maiden_of_virtue : public BossAI
{ {
boss_maiden_of_virtue(Creature* creature) : BossAI(creature, DATA_MAIDEN) { } boss_maiden_of_virtue(Creature* creature) : BossAI(creature, DATA_MAIDEN) { }
void Reset() override
{
BossAI::Reset();
}
void JustEngagedWith(Unit* who) override void JustEngagedWith(Unit* who) override
{ {
BossAI::JustEngagedWith(who); BossAI::JustEngagedWith(who);
Talk(SAY_AGGRO); Talk(SAY_AGGRO);
DoCastAOE(SPELL_HOLY_GROUND, true); DoCastAOE(SPELL_HOLY_GROUND, true);
events.ScheduleEvent(EVENT_SPELL_REPENTANCE, 25s); scheduler.Schedule(25s, [this](TaskContext context)
events.ScheduleEvent(EVENT_SPELL_HOLY_FIRE, 8s); {
events.ScheduleEvent(EVENT_SPELL_HOLY_WRATH, 15s); DoCastAOE(SPELL_REPENTANCE, true);
events.ScheduleEvent(EVENT_SPELL_ENRAGE, 10min); 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); Talk(SAY_SLAY);
events.ScheduleEvent(EVENT_KILL_TALK, 5s);
} }
} }
@@ -75,30 +88,10 @@ struct boss_maiden_of_virtue : public BossAI
if (!UpdateVictim()) if (!UpdateVictim())
return; return;
events.Update(diff); scheduler.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING)) if (me->HasUnitState(UNIT_STATE_CASTING))
return; 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(); DoMeleeAttackIfReady();
} }
}; };