#include "ScriptMgr.h"
#include "Creature.h"
#include "CreatureAI.h"
#include "ScriptedCreature.h"
enum Spells
{
SPELL_VoidStrike = 91021,
SPELL_VoidBlast = 91020,
SPELL_VoidBolt = 91022,
SPELL_ShadowZone = 91023,
SPELL_berserk = 45078,
};
enum Events
{
EVENT_VoidStrike = 1,
EVENT_VoidBlast = 2,
EVENT_ShadowZone = 3,
EVENT_VoidBolt = 4,
EVENT_Berserk = 5,
};
class WorldBoss_TheVoid : public CreatureScript
{
public:
WorldBoss_TheVoid() : CreatureScript("WorldBoss_TheVoid") { }
struct WorldBoss_TheVoidAI : public BossAI
{
WorldBoss_TheVoidAI(Creature* creature) : BossAI(creature, 0)
{
}
void Reset() override
{
events.Reset();
}
void EnterCombat(Unit* /*who*/) override
{
events.ScheduleEvent(EVENT_VoidStrike, 8000);
events.ScheduleEvent(EVENT_VoidBlast, 15000);
events.ScheduleEvent(EVENT_ShadowZone, 54000);
events.ScheduleEvent(EVENT_VoidBolt, 12000);
events.ScheduleEvent(EVENT_Berserk, 600000);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
//phase 1
case EVENT_VoidStrike:
DoCastVictim(SPELL_VoidStrike);
events.ScheduleEvent(EVENT_VoidStrike, 18000);
break;
case EVENT_VoidBlast:
DoCastVictim(SPELL_VoidBlast);
events.ScheduleEvent(EVENT_VoidBlast, 42000);
break;
case EVENT_VoidBolt:
DoCastVictim(SPELL_VoidBolt);
events.ScheduleEvent(EVENT_VoidBolt, 30000);
break;
case EVENT_ShadowZone:
if (Unit *target = SelectTarget(SELECT_TARGET_RANDOM, 0))
DoCastVictim(SPELL_ShadowZone);
events.ScheduleEvent(EVENT_ShadowZone, 54000);
break;
case EVENT_Berserk:
DoCast(me, SPELL_berserk);
events.ScheduleEvent(EVENT_Berserk, 600000);
break;
default:
break;
}
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return new WorldBoss_TheVoidAI(creature);
}
};
void AddSC_WorldBoss_TheVoid()
{
new WorldBoss_TheVoid();
}