mirror of
https://github.com/liyunfan1223/azerothcore-wotlk.git
synced 2026-08-08 15:58:04 +00:00
refactor(Scripts/Karazhan): Update Maiden of Virtue (#16683)
* init * .
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user