refactor(Scripts/Karazhan): Maiden of Virtue script update (#14836)
This commit is contained in:
@@ -39,89 +39,71 @@ 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
|
||||||
{
|
|
||||||
if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
|
|
||||||
{
|
|
||||||
Talk(SAY_SLAY);
|
|
||||||
events.ScheduleEvent(EVENT_KILL_TALK, 5000);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void JustDied(Unit* killer) override
|
|
||||||
{
|
|
||||||
BossAI::JustDied(killer);
|
|
||||||
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
|
|
||||||
{
|
|
||||||
if (!UpdateVictim())
|
|
||||||
return;
|
|
||||||
|
|
||||||
events.Update(diff);
|
|
||||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
|
||||||
return;
|
|
||||||
|
|
||||||
switch (events.ExecuteEvent())
|
|
||||||
{
|
|
||||||
case EVENT_SPELL_REPENTANCE:
|
|
||||||
me->CastSpell(me, SPELL_REPENTANCE, true);
|
|
||||||
events.ScheduleEvent(EVENT_SPELL_REPENTANCE, urand(25000, 35000));
|
|
||||||
break;
|
|
||||||
case EVENT_SPELL_HOLY_FIRE:
|
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
|
|
||||||
me->CastSpell(target, SPELL_HOLY_FIRE, true);
|
|
||||||
events.ScheduleEvent(EVENT_SPELL_HOLY_FIRE, urand(8000, 18000));
|
|
||||||
break;
|
|
||||||
case EVENT_SPELL_HOLY_WRATH:
|
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
|
|
||||||
me->CastSpell(target, SPELL_HOLY_WRATH, true);
|
|
||||||
events.ScheduleEvent(EVENT_SPELL_HOLY_WRATH, urand(20000, 25000));
|
|
||||||
break;
|
|
||||||
case EVENT_SPELL_ENRAGE:
|
|
||||||
me->CastSpell(me, SPELL_BERSERK, true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
CreatureAI* GetAI(Creature* creature) const override
|
|
||||||
{
|
{
|
||||||
return GetKarazhanAI<boss_maiden_of_virtueAI>(creature);
|
if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
|
||||||
|
{
|
||||||
|
Talk(SAY_SLAY);
|
||||||
|
events.ScheduleEvent(EVENT_KILL_TALK, 5000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void JustDied(Unit* killer) override
|
||||||
|
{
|
||||||
|
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_SPELL_REPENTANCE:
|
||||||
|
DoCastAOE(SPELL_REPENTANCE, true);
|
||||||
|
Talk(SAY_REPENTANCE);
|
||||||
|
events.ScheduleEvent(EVENT_SPELL_REPENTANCE, urand(25000, 35000));
|
||||||
|
break;
|
||||||
|
case EVENT_SPELL_HOLY_FIRE:
|
||||||
|
DoCastRandomTarget(SPELL_HOLY_FIRE, 0, 50.0f);
|
||||||
|
events.ScheduleEvent(EVENT_SPELL_HOLY_FIRE, urand(8000, 18000));
|
||||||
|
break;
|
||||||
|
case EVENT_SPELL_HOLY_WRATH:
|
||||||
|
DoCastRandomTarget(SPELL_HOLY_WRATH, 0, 80.0f);
|
||||||
|
events.ScheduleEvent(EVENT_SPELL_HOLY_WRATH, urand(20000, 25000));
|
||||||
|
break;
|
||||||
|
case EVENT_SPELL_ENRAGE:
|
||||||
|
DoCastSelf(SPELL_BERSERK, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
DoMeleeAttackIfReady();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
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
|
||||||
|
|||||||
Reference in New Issue
Block a user