aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp513
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp98
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp93
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp127
4 files changed, 393 insertions, 438 deletions
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
index e8bbd7139f1..e2cb6e5d13f 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
@@ -159,306 +159,295 @@ enum Events
EVENT_MORTAL_STRIKE = 32,
};
-class boss_rend_blackhand : public CreatureScript
+struct boss_rend_blackhand : public BossAI
{
-public:
- boss_rend_blackhand() : CreatureScript("boss_rend_blackhand") { }
-
- struct boss_rend_blackhandAI : public BossAI
+ boss_rend_blackhand(Creature* creature) : BossAI(creature, DATA_WARCHIEF_REND_BLACKHAND)
{
- boss_rend_blackhandAI(Creature* creature) : BossAI(creature, DATA_WARCHIEF_REND_BLACKHAND)
- {
- gythEvent = false;
- victorGUID.Clear();
- portcullisGUID.Clear();
- }
+ gythEvent = false;
+ victorGUID.Clear();
+ portcullisGUID.Clear();
+ }
- void Reset() override
- {
- _Reset();
- gythEvent = false;
- victorGUID.Clear();
- portcullisGUID.Clear();
- }
+ void Reset() override
+ {
+ _Reset();
+ gythEvent = false;
+ victorGUID.Clear();
+ portcullisGUID.Clear();
+ }
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_WHIRLWIND, 13s, 15s);
- events.ScheduleEvent(EVENT_CLEAVE, 15s, 17s);
- events.ScheduleEvent(EVENT_MORTAL_STRIKE, 17s, 19s);
- }
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_WHIRLWIND, 13s, 15s);
+ events.ScheduleEvent(EVENT_CLEAVE, 15s, 17s);
+ events.ScheduleEvent(EVENT_MORTAL_STRIKE, 17s, 19s);
+ }
- void IsSummonedBy(WorldObject* /*summoner*/) override
- {
- me->SetImmuneToPC(false);
- DoZoneInCombat();
- }
+ void IsSummonedBy(WorldObject* /*summoner*/) override
+ {
+ me->SetImmuneToPC(false);
+ DoZoneInCombat();
+ }
- void JustDied(Unit* /*killer*/) override
- {
- _JustDied();
- if (Creature* victor = me->FindNearestCreature(NPC_LORD_VICTOR_NEFARIUS, 75.0f, true))
- victor->AI()->SetData(1, 2);
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ if (Creature* victor = me->FindNearestCreature(NPC_LORD_VICTOR_NEFARIUS, 75.0f, true))
+ victor->AI()->SetData(1, 2);
+ }
- void SetData(uint32 type, uint32 data) override
+ void SetData(uint32 type, uint32 data) override
+ {
+ if (type == AREATRIGGER && data == AREATRIGGER_BLACKROCK_STADIUM)
{
- if (type == AREATRIGGER && data == AREATRIGGER_BLACKROCK_STADIUM)
+ if (!gythEvent)
{
- if (!gythEvent)
- {
- gythEvent = true;
+ gythEvent = true;
- if (Creature* victor = me->FindNearestCreature(NPC_LORD_VICTOR_NEFARIUS, 5.0f, true))
- victorGUID = victor->GetGUID();
+ if (Creature* victor = me->FindNearestCreature(NPC_LORD_VICTOR_NEFARIUS, 5.0f, true))
+ victorGUID = victor->GetGUID();
- if (GameObject* portcullis = me->FindNearestGameObject(GO_DR_PORTCULLIS, 50.0f))
- portcullisGUID = portcullis->GetGUID();
+ if (GameObject* portcullis = me->FindNearestGameObject(GO_DR_PORTCULLIS, 50.0f))
+ portcullisGUID = portcullis->GetGUID();
- events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0s);
- events.ScheduleEvent(EVENT_START_1, 1s);
- }
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0s);
+ events.ScheduleEvent(EVENT_START_1, 1s);
}
}
+ }
- void MovementInform(uint32 type, uint32 id) override
+ void MovementInform(uint32 type, uint32 id) override
+ {
+ if (type == WAYPOINT_MOTION_TYPE)
{
- if (type == WAYPOINT_MOTION_TYPE)
+ switch (id)
{
- switch (id)
- {
- case 5:
- events.ScheduleEvent(EVENT_TELEPORT_1, 2s);
- break;
- case 11:
- if (Creature* gyth = me->FindNearestCreature(NPC_GYTH, 10.0f, true))
- gyth->AI()->SetData(1, 1);
- me->DespawnOrUnsummon(1s, 7_days);
- break;
- }
+ case 5:
+ events.ScheduleEvent(EVENT_TELEPORT_1, 2s);
+ break;
+ case 11:
+ if (Creature* gyth = me->FindNearestCreature(NPC_GYTH, 10.0f, true))
+ gyth->AI()->SetData(1, 1);
+ me->DespawnOrUnsummon(1s, 7_days);
+ break;
}
}
+ }
- void UpdateAI(uint32 diff) override
+ void UpdateAI(uint32 diff) override
+ {
+ if (gythEvent)
{
- if (gythEvent)
- {
- events.Update(diff);
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_START_1:
- if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
- victor->AI()->Talk(SAY_NEFARIUS_0);
- events.ScheduleEvent(EVENT_START_2, 4s);
- break;
- case EVENT_START_2:
- events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0s);
- if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
- victor->HandleEmoteCommand(EMOTE_ONESHOT_POINT);
- events.ScheduleEvent(EVENT_START_3, 4s);
- break;
- case EVENT_START_3:
- if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
- victor->AI()->Talk(SAY_NEFARIUS_1);
- events.ScheduleEvent(EVENT_WAVE_1, 2s);
- events.ScheduleEvent(EVENT_TURN_TO_REND, 4s);
- events.ScheduleEvent(EVENT_WAVES_TEXT_1, 20s);
- break;
- case EVENT_TURN_TO_REND:
- if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
- {
- victor->SetFacingToObject(me);
- victor->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
- }
- break;
- case EVENT_TURN_TO_PLAYER:
- if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
- if (Unit* player = victor->SelectNearestPlayer(60.0f))
- victor->SetFacingToObject(player);
- break;
- case EVENT_TURN_TO_FACING_1:
- if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
- victor->SetFacingTo(1.518436f);
- break;
- case EVENT_TURN_TO_FACING_2:
- me->SetFacingTo(1.658063f);
- break;
- case EVENT_TURN_TO_FACING_3:
- me->SetFacingTo(1.500983f);
- break;
- case EVENT_WAVES_EMOTE_1:
- if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
- victor->HandleEmoteCommand(EMOTE_ONESHOT_QUESTION);
- break;
- case EVENT_WAVES_EMOTE_2:
- me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
- break;
- case EVENT_WAVES_TEXT_1:
- events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0s);
- if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
- victor->AI()->Talk(SAY_NEFARIUS_2);
- me->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
- events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4s);
- events.ScheduleEvent(EVENT_WAVES_EMOTE_1, 5s);
- events.ScheduleEvent(EVENT_WAVE_2, 2s);
- events.ScheduleEvent(EVENT_WAVES_TEXT_2, 20s);
- break;
- case EVENT_WAVES_TEXT_2:
- events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0s);
- if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
- victor->AI()->Talk(SAY_NEFARIUS_3);
- events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4s);
- events.ScheduleEvent(EVENT_WAVE_3, 2s);
- events.ScheduleEvent(EVENT_WAVES_TEXT_3, 20s);
- break;
- case EVENT_WAVES_TEXT_3:
- events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0s);
- if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
- victor->AI()->Talk(SAY_NEFARIUS_4);
- events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4s);
- events.ScheduleEvent(EVENT_WAVE_4, 2s);
- events.ScheduleEvent(EVENT_WAVES_TEXT_4, 20s);
- break;
- case EVENT_WAVES_TEXT_4:
- Talk(SAY_BLACKHAND_1);
- events.ScheduleEvent(EVENT_WAVES_EMOTE_2, 4s);
- events.ScheduleEvent(EVENT_TURN_TO_FACING_3, 8s);
- events.ScheduleEvent(EVENT_WAVE_5, 2s);
- events.ScheduleEvent(EVENT_WAVES_TEXT_5, 20s);
- break;
- case EVENT_WAVES_TEXT_5:
- events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0s);
- if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
- victor->AI()->Talk(SAY_NEFARIUS_5);
- events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4s);
- events.ScheduleEvent(EVENT_WAVE_6, 2s);
- events.ScheduleEvent(EVENT_WAVES_COMPLETE_TEXT_1, 20s);
- break;
- case EVENT_WAVES_COMPLETE_TEXT_1:
- events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0s);
- if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
- victor->AI()->Talk(SAY_NEFARIUS_6);
- events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4s);
- events.ScheduleEvent(EVENT_WAVES_COMPLETE_TEXT_2, 13s);
- break;
- case EVENT_WAVES_COMPLETE_TEXT_2:
- if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
- victor->AI()->Talk(SAY_NEFARIUS_7);
- Talk(SAY_BLACKHAND_2);
- events.ScheduleEvent(EVENT_PATH_REND, 1s);
- events.ScheduleEvent(EVENT_WAVES_COMPLETE_TEXT_3, 4s);
- break;
- case EVENT_WAVES_COMPLETE_TEXT_3:
- if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
- victor->AI()->Talk(SAY_NEFARIUS_8);
- events.ScheduleEvent(EVENT_PATH_NEFARIUS, 1s);
- events.ScheduleEvent(EVENT_PATH_REND, 1s);
- break;
- case EVENT_PATH_NEFARIUS:
- if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
- victor->GetMotionMaster()->MovePath(NEFARIUS_PATH_1, true);
- break;
- case EVENT_PATH_REND:
- me->GetMotionMaster()->MovePath(REND_PATH_1, false);
- break;
- case EVENT_TELEPORT_1:
- me->NearTeleportTo(194.2993f, -474.0814f, 121.4505f, -0.01225555f);
- events.ScheduleEvent(EVENT_TELEPORT_2, 50s);
- break;
- case EVENT_TELEPORT_2:
- me->NearTeleportTo(216.485f, -434.93f, 110.888f, -0.01225555f);
- me->SummonCreature(NPC_GYTH, 211.762f, -397.5885f, 111.1817f, 4.747295f);
- break;
- case EVENT_WAVE_1:
- if (GameObject* portcullis = ObjectAccessor::GetGameObject(*me, portcullisGUID))
- portcullis->UseDoorOrButton();
- // move wave
- break;
- case EVENT_WAVE_2:
- // spawn wave
- if (GameObject* portcullis = ObjectAccessor::GetGameObject(*me, portcullisGUID))
- portcullis->UseDoorOrButton();
- // move wave
- break;
- case EVENT_WAVE_3:
- // spawn wave
- if (GameObject* portcullis = ObjectAccessor::GetGameObject(*me, portcullisGUID))
- portcullis->UseDoorOrButton();
- // move wave
- break;
- case EVENT_WAVE_4:
- // spawn wave
- if (GameObject* portcullis = ObjectAccessor::GetGameObject(*me, portcullisGUID))
- portcullis->UseDoorOrButton();
- // move wave
- break;
- case EVENT_WAVE_5:
- // spawn wave
- if (GameObject* portcullis = ObjectAccessor::GetGameObject(*me, portcullisGUID))
- portcullis->UseDoorOrButton();
- // move wave
- break;
- case EVENT_WAVE_6:
- // spawn wave
- if (GameObject* portcullis = ObjectAccessor::GetGameObject(*me, portcullisGUID))
- portcullis->UseDoorOrButton();
- // move wave
- break;
- default:
- break;
- }
- }
- }
-
- if (!UpdateVictim())
- return;
-
events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
- case EVENT_WHIRLWIND:
- DoCast(SPELL_WHIRLWIND);
- events.ScheduleEvent(EVENT_WHIRLWIND, 13s, 18s);
+ case EVENT_START_1:
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
+ victor->AI()->Talk(SAY_NEFARIUS_0);
+ events.ScheduleEvent(EVENT_START_2, 4s);
+ break;
+ case EVENT_START_2:
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0s);
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
+ victor->HandleEmoteCommand(EMOTE_ONESHOT_POINT);
+ events.ScheduleEvent(EVENT_START_3, 4s);
+ break;
+ case EVENT_START_3:
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
+ victor->AI()->Talk(SAY_NEFARIUS_1);
+ events.ScheduleEvent(EVENT_WAVE_1, 2s);
+ events.ScheduleEvent(EVENT_TURN_TO_REND, 4s);
+ events.ScheduleEvent(EVENT_WAVES_TEXT_1, 20s);
+ break;
+ case EVENT_TURN_TO_REND:
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
+ {
+ victor->SetFacingToObject(me);
+ victor->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
+ }
+ break;
+ case EVENT_TURN_TO_PLAYER:
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
+ if (Unit* player = victor->SelectNearestPlayer(60.0f))
+ victor->SetFacingToObject(player);
+ break;
+ case EVENT_TURN_TO_FACING_1:
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
+ victor->SetFacingTo(1.518436f);
+ break;
+ case EVENT_TURN_TO_FACING_2:
+ me->SetFacingTo(1.658063f);
+ break;
+ case EVENT_TURN_TO_FACING_3:
+ me->SetFacingTo(1.500983f);
+ break;
+ case EVENT_WAVES_EMOTE_1:
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
+ victor->HandleEmoteCommand(EMOTE_ONESHOT_QUESTION);
+ break;
+ case EVENT_WAVES_EMOTE_2:
+ me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
+ break;
+ case EVENT_WAVES_TEXT_1:
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0s);
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
+ victor->AI()->Talk(SAY_NEFARIUS_2);
+ me->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
+ events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4s);
+ events.ScheduleEvent(EVENT_WAVES_EMOTE_1, 5s);
+ events.ScheduleEvent(EVENT_WAVE_2, 2s);
+ events.ScheduleEvent(EVENT_WAVES_TEXT_2, 20s);
+ break;
+ case EVENT_WAVES_TEXT_2:
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0s);
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
+ victor->AI()->Talk(SAY_NEFARIUS_3);
+ events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4s);
+ events.ScheduleEvent(EVENT_WAVE_3, 2s);
+ events.ScheduleEvent(EVENT_WAVES_TEXT_3, 20s);
+ break;
+ case EVENT_WAVES_TEXT_3:
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0s);
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
+ victor->AI()->Talk(SAY_NEFARIUS_4);
+ events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4s);
+ events.ScheduleEvent(EVENT_WAVE_4, 2s);
+ events.ScheduleEvent(EVENT_WAVES_TEXT_4, 20s);
+ break;
+ case EVENT_WAVES_TEXT_4:
+ Talk(SAY_BLACKHAND_1);
+ events.ScheduleEvent(EVENT_WAVES_EMOTE_2, 4s);
+ events.ScheduleEvent(EVENT_TURN_TO_FACING_3, 8s);
+ events.ScheduleEvent(EVENT_WAVE_5, 2s);
+ events.ScheduleEvent(EVENT_WAVES_TEXT_5, 20s);
+ break;
+ case EVENT_WAVES_TEXT_5:
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0s);
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
+ victor->AI()->Talk(SAY_NEFARIUS_5);
+ events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4s);
+ events.ScheduleEvent(EVENT_WAVE_6, 2s);
+ events.ScheduleEvent(EVENT_WAVES_COMPLETE_TEXT_1, 20s);
+ break;
+ case EVENT_WAVES_COMPLETE_TEXT_1:
+ events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0s);
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
+ victor->AI()->Talk(SAY_NEFARIUS_6);
+ events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4s);
+ events.ScheduleEvent(EVENT_WAVES_COMPLETE_TEXT_2, 13s);
+ break;
+ case EVENT_WAVES_COMPLETE_TEXT_2:
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
+ victor->AI()->Talk(SAY_NEFARIUS_7);
+ Talk(SAY_BLACKHAND_2);
+ events.ScheduleEvent(EVENT_PATH_REND, 1s);
+ events.ScheduleEvent(EVENT_WAVES_COMPLETE_TEXT_3, 4s);
+ break;
+ case EVENT_WAVES_COMPLETE_TEXT_3:
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
+ victor->AI()->Talk(SAY_NEFARIUS_8);
+ events.ScheduleEvent(EVENT_PATH_NEFARIUS, 1s);
+ events.ScheduleEvent(EVENT_PATH_REND, 1s);
+ break;
+ case EVENT_PATH_NEFARIUS:
+ if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID))
+ victor->GetMotionMaster()->MovePath(NEFARIUS_PATH_1, true);
break;
- case EVENT_CLEAVE:
- DoCastVictim(SPELL_CLEAVE);
- events.ScheduleEvent(EVENT_CLEAVE, 10s, 14s);
+ case EVENT_PATH_REND:
+ me->GetMotionMaster()->MovePath(REND_PATH_1, false);
break;
- case EVENT_MORTAL_STRIKE:
- DoCastVictim(SPELL_MORTAL_STRIKE);
- events.ScheduleEvent(EVENT_MORTAL_STRIKE, 14s, 16s);
+ case EVENT_TELEPORT_1:
+ me->NearTeleportTo(194.2993f, -474.0814f, 121.4505f, -0.01225555f);
+ events.ScheduleEvent(EVENT_TELEPORT_2, 50s);
+ break;
+ case EVENT_TELEPORT_2:
+ me->NearTeleportTo(216.485f, -434.93f, 110.888f, -0.01225555f);
+ me->SummonCreature(NPC_GYTH, 211.762f, -397.5885f, 111.1817f, 4.747295f);
+ break;
+ case EVENT_WAVE_1:
+ if (GameObject* portcullis = ObjectAccessor::GetGameObject(*me, portcullisGUID))
+ portcullis->UseDoorOrButton();
+ // move wave
+ break;
+ case EVENT_WAVE_2:
+ // spawn wave
+ if (GameObject* portcullis = ObjectAccessor::GetGameObject(*me, portcullisGUID))
+ portcullis->UseDoorOrButton();
+ // move wave
+ break;
+ case EVENT_WAVE_3:
+ // spawn wave
+ if (GameObject* portcullis = ObjectAccessor::GetGameObject(*me, portcullisGUID))
+ portcullis->UseDoorOrButton();
+ // move wave
+ break;
+ case EVENT_WAVE_4:
+ // spawn wave
+ if (GameObject* portcullis = ObjectAccessor::GetGameObject(*me, portcullisGUID))
+ portcullis->UseDoorOrButton();
+ // move wave
+ break;
+ case EVENT_WAVE_5:
+ // spawn wave
+ if (GameObject* portcullis = ObjectAccessor::GetGameObject(*me, portcullisGUID))
+ portcullis->UseDoorOrButton();
+ // move wave
+ break;
+ case EVENT_WAVE_6:
+ // spawn wave
+ if (GameObject* portcullis = ObjectAccessor::GetGameObject(*me, portcullisGUID))
+ portcullis->UseDoorOrButton();
+ // move wave
+ break;
+ default:
break;
}
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
}
- DoMeleeAttackIfReady();
}
- private:
- bool gythEvent;
- ObjectGuid victorGUID;
- ObjectGuid portcullisGUID;
- };
+ if (!UpdateVictim())
+ return;
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetBlackrockSpireAI<boss_rend_blackhandAI>(creature);
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_WHIRLWIND:
+ DoCast(SPELL_WHIRLWIND);
+ events.ScheduleEvent(EVENT_WHIRLWIND, 13s, 18s);
+ break;
+ case EVENT_CLEAVE:
+ DoCastVictim(SPELL_CLEAVE);
+ events.ScheduleEvent(EVENT_CLEAVE, 10s, 14s);
+ break;
+ case EVENT_MORTAL_STRIKE:
+ DoCastVictim(SPELL_MORTAL_STRIKE);
+ events.ScheduleEvent(EVENT_MORTAL_STRIKE, 14s, 16s);
+ break;
+ }
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+ }
+ DoMeleeAttackIfReady();
}
+
+ private:
+ bool gythEvent;
+ ObjectGuid victorGUID;
+ ObjectGuid portcullisGUID;
};
void AddSC_boss_rend_blackhand()
{
- new boss_rend_blackhand();
+ RegisterBlackrockSpireCreatureAI(boss_rend_blackhand);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp
index a9716e49ae3..d4f2bd9423b 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp
@@ -33,78 +33,66 @@ enum Events
EVENT_CLEAVE = 3,
};
-class boss_shadow_hunter_voshgajin : public CreatureScript
+struct boss_shadow_hunter_voshgajin : public BossAI
{
-public:
- boss_shadow_hunter_voshgajin() : CreatureScript("boss_shadow_hunter_voshgajin") { }
+ boss_shadow_hunter_voshgajin(Creature* creature) : BossAI(creature, DATA_SHADOW_HUNTER_VOSHGAJIN) { }
- CreatureAI* GetAI(Creature* creature) const override
+ void Reset() override
{
- return GetBlackrockSpireAI<boss_shadowvoshAI>(creature);
+ _Reset();
+ //DoCast(me, SPELL_ICEARMOR, true);
}
- struct boss_shadowvoshAI : public BossAI
+ void JustEngagedWith(Unit* who) override
{
- boss_shadowvoshAI(Creature* creature) : BossAI(creature, DATA_SHADOW_HUNTER_VOSHGAJIN) { }
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, 2s);
+ events.ScheduleEvent(EVENT_HEX, 8s);
+ events.ScheduleEvent(EVENT_CLEAVE, 14s);
+ }
- void Reset() override
- {
- _Reset();
- //DoCast(me, SPELL_ICEARMOR, true);
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ }
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, 2s);
- events.ScheduleEvent(EVENT_HEX, 8s);
- events.ScheduleEvent(EVENT_CLEAVE, 14s);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- void JustDied(Unit* /*killer*/) override
- {
- _JustDied();
- }
+ events.Update(diff);
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- events.Update(diff);
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_CURSE_OF_BLOOD:
+ DoCastVictim(SPELL_CURSEOFBLOOD);
+ events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, 45s);
+ break;
+ case EVENT_HEX:
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true))
+ DoCast(target, SPELL_HEX);
+ events.ScheduleEvent(EVENT_HEX, 15s);
+ break;
+ case EVENT_CLEAVE:
+ DoCastVictim(SPELL_CLEAVE);
+ events.ScheduleEvent(EVENT_CLEAVE, 7s);
+ break;
+ }
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_CURSE_OF_BLOOD:
- DoCastVictim(SPELL_CURSEOFBLOOD);
- events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, 45s);
- break;
- case EVENT_HEX:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true))
- DoCast(target, SPELL_HEX);
- events.ScheduleEvent(EVENT_HEX, 15s);
- break;
- case EVENT_CLEAVE:
- DoCastVictim(SPELL_CLEAVE);
- events.ScheduleEvent(EVENT_CLEAVE, 7s);
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
- DoMeleeAttackIfReady();
}
- };
-
+ DoMeleeAttackIfReady();
+ }
};
void AddSC_boss_shadowvosh()
{
- new boss_shadow_hunter_voshgajin();
+ RegisterBlackrockSpireCreatureAI(boss_shadow_hunter_voshgajin);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp
index 27846ea47c4..5315c022b15 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp
@@ -39,73 +39,62 @@ enum Events
EVENT_INTIMIDATING_ROAR = 3
};
-class boss_urok_doomhowl : public CreatureScript
+struct boss_urok_doomhowl : public BossAI
{
-public:
- boss_urok_doomhowl() : CreatureScript("boss_urok_doomhowl") { }
+ boss_urok_doomhowl(Creature* creature) : BossAI(creature, DATA_UROK_DOOMHOWL) { }
- struct boss_urok_doomhowlAI : public BossAI
+ void Reset() override
{
- boss_urok_doomhowlAI(Creature* creature) : BossAI(creature, DATA_UROK_DOOMHOWL) { }
-
- void Reset() override
- {
- _Reset();
- }
+ _Reset();
+ }
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(SPELL_REND, 17s, 20s);
- events.ScheduleEvent(SPELL_STRIKE, 10s, 12s);
- Talk(SAY_AGGRO);
- }
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(SPELL_REND, 17s, 20s);
+ events.ScheduleEvent(SPELL_STRIKE, 10s, 12s);
+ Talk(SAY_AGGRO);
+ }
- void JustDied(Unit* /*killer*/) override
- {
- _JustDied();
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ }
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- events.Update(diff);
+ events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- while (uint32 eventId = events.ExecuteEvent())
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- switch (eventId)
- {
- case SPELL_REND:
- DoCastVictim(SPELL_REND);
- events.ScheduleEvent(SPELL_REND, 8s, 10s);
- break;
- case SPELL_STRIKE:
- DoCastVictim(SPELL_STRIKE);
- events.ScheduleEvent(SPELL_STRIKE, 8s, 10s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ case SPELL_REND:
+ DoCastVictim(SPELL_REND);
+ events.ScheduleEvent(SPELL_REND, 8s, 10s);
+ break;
+ case SPELL_STRIKE:
+ DoCastVictim(SPELL_STRIKE);
+ events.ScheduleEvent(SPELL_STRIKE, 8s, 10s);
+ break;
+ default:
+ break;
}
- DoMeleeAttackIfReady();
- }
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetBlackrockSpireAI<boss_urok_doomhowlAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+ }
+ DoMeleeAttackIfReady();
}
};
void AddSC_boss_urok_doomhowl()
{
- new boss_urok_doomhowl();
+ RegisterBlackrockSpireCreatureAI(boss_urok_doomhowl);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp
index e5f2f243585..0228cf81485 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp
@@ -39,90 +39,79 @@ enum Events
EVENT_THROW_AXE = 6
};
-class boss_warmaster_voone : public CreatureScript
+struct boss_warmaster_voone : public BossAI
{
-public:
- boss_warmaster_voone() : CreatureScript("boss_warmaster_voone") { }
+ boss_warmaster_voone(Creature* creature) : BossAI(creature, DATA_WARMASTER_VOONE) { }
- struct boss_warmastervooneAI : public BossAI
+ void Reset() override
{
- boss_warmastervooneAI(Creature* creature) : BossAI(creature, DATA_WARMASTER_VOONE) { }
-
- void Reset() override
- {
- _Reset();
- }
+ _Reset();
+ }
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_SNAP_KICK, 8s);
- events.ScheduleEvent(EVENT_CLEAVE, 14s);
- events.ScheduleEvent(EVENT_UPPERCUT, 20s);
- events.ScheduleEvent(EVENT_MORTAL_STRIKE, 12s);
- events.ScheduleEvent(EVENT_PUMMEL, 32s);
- events.ScheduleEvent(EVENT_THROW_AXE, 1s);
- }
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_SNAP_KICK, 8s);
+ events.ScheduleEvent(EVENT_CLEAVE, 14s);
+ events.ScheduleEvent(EVENT_UPPERCUT, 20s);
+ events.ScheduleEvent(EVENT_MORTAL_STRIKE, 12s);
+ events.ScheduleEvent(EVENT_PUMMEL, 32s);
+ events.ScheduleEvent(EVENT_THROW_AXE, 1s);
+ }
- void JustDied(Unit* /*killer*/) override
- {
- _JustDied();
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ }
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- events.Update(diff);
+ events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- while (uint32 eventId = events.ExecuteEvent())
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- switch (eventId)
- {
- case EVENT_SNAP_KICK:
- DoCastVictim(SPELL_SNAPKICK);
- events.ScheduleEvent(EVENT_SNAP_KICK, 6s);
- break;
- case EVENT_CLEAVE:
- DoCastVictim(SPELL_CLEAVE);
- events.ScheduleEvent(EVENT_CLEAVE, 12s);
- break;
- case EVENT_UPPERCUT:
- DoCastVictim(SPELL_UPPERCUT);
- events.ScheduleEvent(EVENT_UPPERCUT, 14s);
- break;
- case EVENT_MORTAL_STRIKE:
- DoCastVictim(SPELL_MORTALSTRIKE);
- events.ScheduleEvent(EVENT_MORTAL_STRIKE, 10s);
- break;
- case EVENT_PUMMEL:
- DoCastVictim(SPELL_PUMMEL);
- events.ScheduleEvent(EVENT_MORTAL_STRIKE, 16s);
- break;
- case EVENT_THROW_AXE:
- DoCastVictim(SPELL_THROWAXE);
- events.ScheduleEvent(EVENT_THROW_AXE, 8s);
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ case EVENT_SNAP_KICK:
+ DoCastVictim(SPELL_SNAPKICK);
+ events.ScheduleEvent(EVENT_SNAP_KICK, 6s);
+ break;
+ case EVENT_CLEAVE:
+ DoCastVictim(SPELL_CLEAVE);
+ events.ScheduleEvent(EVENT_CLEAVE, 12s);
+ break;
+ case EVENT_UPPERCUT:
+ DoCastVictim(SPELL_UPPERCUT);
+ events.ScheduleEvent(EVENT_UPPERCUT, 14s);
+ break;
+ case EVENT_MORTAL_STRIKE:
+ DoCastVictim(SPELL_MORTALSTRIKE);
+ events.ScheduleEvent(EVENT_MORTAL_STRIKE, 10s);
+ break;
+ case EVENT_PUMMEL:
+ DoCastVictim(SPELL_PUMMEL);
+ events.ScheduleEvent(EVENT_MORTAL_STRIKE, 16s);
+ break;
+ case EVENT_THROW_AXE:
+ DoCastVictim(SPELL_THROWAXE);
+ events.ScheduleEvent(EVENT_THROW_AXE, 8s);
+ break;
}
- DoMeleeAttackIfReady();
- }
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetBlackrockSpireAI<boss_warmastervooneAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+ }
+ DoMeleeAttackIfReady();
}
};
void AddSC_boss_warmastervoone()
{
- new boss_warmaster_voone();
+ RegisterBlackrockSpireCreatureAI(boss_warmaster_voone);
}