refactor(Scripts/Karazhan): Maiden of Virtue script update (#14836)

This commit is contained in:
Skjalf
2023-02-01 05:25:42 -03:00
committed by GitHub
parent 785bb5ed6b
commit 439c394784
2 changed files with 58 additions and 74 deletions
@@ -39,18 +39,20 @@ enum MaidenOfVirtue
EVENT_KILL_TALK = 5 EVENT_KILL_TALK = 5
}; };
class boss_maiden_of_virtue : public CreatureScript struct boss_maiden_of_virtue : public BossAI
{ {
public: boss_maiden_of_virtue(Creature* creature) : BossAI(creature, DATA_MAIDEN) { }
boss_maiden_of_virtue() : CreatureScript("boss_maiden_of_virtue") { }
struct boss_maiden_of_virtueAI : public BossAI void EnterCombat(Unit* who) override
{ {
boss_maiden_of_virtueAI(Creature* creature) : BossAI(creature, DATA_MAIDEN) { } BossAI::EnterCombat(who);
Talk(SAY_AGGRO);
void Reset() override DoCastAOE(SPELL_HOLY_GROUND, true);
{ events.ScheduleEvent(EVENT_SPELL_REPENTANCE, 25000);
BossAI::Reset(); events.ScheduleEvent(EVENT_SPELL_HOLY_FIRE, 8000);
events.ScheduleEvent(EVENT_SPELL_HOLY_WRATH, 15000);
events.ScheduleEvent(EVENT_SPELL_ENRAGE, 600000);
} }
void KilledUnit(Unit* /*victim*/) override void KilledUnit(Unit* /*victim*/) override
@@ -68,19 +70,6 @@ public:
Talk(SAY_DEATH); Talk(SAY_DEATH);
} }
void EnterCombat(Unit* who) override
{
BossAI::EnterCombat(who);
Talk(SAY_AGGRO);
me->CastSpell(me, SPELL_HOLY_GROUND, true);
events.ScheduleEvent(EVENT_SPELL_REPENTANCE, 25000);
events.ScheduleEvent(EVENT_SPELL_HOLY_FIRE, 8000);
events.ScheduleEvent(EVENT_SPELL_HOLY_WRATH, 15000);
events.ScheduleEvent(EVENT_SPELL_ENRAGE, 600000);
DoZoneInCombat();
}
void UpdateAI(uint32 diff) override void UpdateAI(uint32 diff) override
{ {
if (!UpdateVictim()) if (!UpdateVictim())
@@ -93,35 +82,28 @@ public:
switch (events.ExecuteEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_SPELL_REPENTANCE: case EVENT_SPELL_REPENTANCE:
me->CastSpell(me, SPELL_REPENTANCE, true); DoCastAOE(SPELL_REPENTANCE, true);
Talk(SAY_REPENTANCE);
events.ScheduleEvent(EVENT_SPELL_REPENTANCE, urand(25000, 35000)); events.ScheduleEvent(EVENT_SPELL_REPENTANCE, urand(25000, 35000));
break; break;
case EVENT_SPELL_HOLY_FIRE: case EVENT_SPELL_HOLY_FIRE:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true)) DoCastRandomTarget(SPELL_HOLY_FIRE, 0, 50.0f);
me->CastSpell(target, SPELL_HOLY_FIRE, true);
events.ScheduleEvent(EVENT_SPELL_HOLY_FIRE, urand(8000, 18000)); events.ScheduleEvent(EVENT_SPELL_HOLY_FIRE, urand(8000, 18000));
break; break;
case EVENT_SPELL_HOLY_WRATH: case EVENT_SPELL_HOLY_WRATH:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true)) DoCastRandomTarget(SPELL_HOLY_WRATH, 0, 80.0f);
me->CastSpell(target, SPELL_HOLY_WRATH, true);
events.ScheduleEvent(EVENT_SPELL_HOLY_WRATH, urand(20000, 25000)); events.ScheduleEvent(EVENT_SPELL_HOLY_WRATH, urand(20000, 25000));
break; break;
case EVENT_SPELL_ENRAGE: case EVENT_SPELL_ENRAGE:
me->CastSpell(me, SPELL_BERSERK, true); DoCastSelf(SPELL_BERSERK, true);
break; break;
} }
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetKarazhanAI<boss_maiden_of_virtueAI>(creature);
}
}; };
void AddSC_boss_maiden_of_virtue() void AddSC_boss_maiden_of_virtue()
{ {
new boss_maiden_of_virtue(); RegisterKarazhanCreatureAI(boss_maiden_of_virtue);
} }
@@ -138,4 +138,6 @@ inline AI* GetKarazhanAI(T* obj)
return GetInstanceAI<AI>(obj, KarazhanScriptName); return GetInstanceAI<AI>(obj, KarazhanScriptName);
} }
#define RegisterKarazhanCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetKarazhanAI)
#endif #endif