diff options
author | offl <11556157+offl@users.noreply.github.com> | 2021-04-15 15:20:51 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-15 14:20:51 +0200 |
commit | 3b863f6a20379d02215f8c52a4cadb6df3e6243c (patch) | |
tree | 711d44cf634f04657d83444da7457e3a3c4f7d14 /src | |
parent | 0fc3a05d3cf16df66902ddff91889ae4001abac3 (diff) |
Scripts/BRS: Update scripts to new model (3/3) (#26418)
Co-authored-by: offl <offl@users.noreply.github.com>
Diffstat (limited to 'src')
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); } |