diff options
Diffstat (limited to 'src')
4 files changed, 373 insertions, 133 deletions
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp index 75e9ad6a140..3c79a08487c 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp @@ -29,6 +29,13 @@ enum Spells SPELL_SUMMON_REND = 16328 // Summons Rend near death }; +enum Misc +{ + NEFARIUS_PATH_2 = 1379671, + NEFARIUS_PATH_3 = 1379672, + GYTH_PATH_1 = 1379681, +}; + enum Events { EVENT_CORROSIVE_ACID = 1, @@ -67,7 +74,7 @@ public: events.ScheduleEvent(EVENT_CORROSIVE_ACID, urand(8000, 16000)); events.ScheduleEvent(EVENT_FREEZE, urand(8000, 16000)); events.ScheduleEvent(EVENT_FLAME_BREATH, urand(8000, 16000)); - events.ScheduleEvent(EVENT_FLAME_BREATH, urand(12000, 18000)); + events.ScheduleEvent(EVENT_KNOCK_AWAY, urand(12000, 18000)); } void JustDied(Unit* /*killer*/) @@ -75,33 +82,55 @@ public: _JustDied(); } - void IsSummonedBy(Unit* /*summoner*/) + void SetData(uint32 /*type*/, uint32 data) { - events.ScheduleEvent(EVENT_SUMMONED, 8000); + switch (data) + { + case 1: + events.ScheduleEvent(EVENT_SUMMONED, 1000); + break; + default: + break; + } } void UpdateAI(uint32 diff) { - if (!UpdateVictim()) - return; if (!SummonedRend && HealthBelowPct(5)) { - DoCast(me, SPELL_SUMMON_REND); + DoCast(me, SPELL_SUMMON_REND); // Rend will despawn on Gyth death. Core issue with summoned npc's all despawning after summoner dies. me->RemoveAura(SPELL_REND_MOUNTS); SummonedRend = true; } + if (!UpdateVictim()) + { + events.Update(diff); + + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_SUMMONED: + me->AddAura(SPELL_REND_MOUNTS, me); + me->GetMotionMaster()->MovePath(GYTH_PATH_1, false); + if (GameObject* portcullis = me->FindNearestGameObject(GO_DR_PORTCULLIS, 25.0f)) + portcullis->UseDoorOrButton(); + if (Creature* victor = me->FindNearestCreature(NPC_LORD_VICTOR_NEFARIUS, 75.0f, true)) + victor->GetMotionMaster()->MovePath(NEFARIUS_PATH_2, false); + break; + } + } + return; + } + events.Update(diff); while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { - case EVENT_SUMMONED: - DoCast(me, SPELL_REND_MOUNTS); - // Load Path - break; case EVENT_CORROSIVE_ACID: DoCast(me, SPELL_CORROSIVE_ACID); events.ScheduleEvent(EVENT_CORROSIVE_ACID, urand(10000, 16000)); diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp index 24a1fbad457..fdf3f0066ba 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_pyroguard_emberseer.cpp @@ -85,12 +85,10 @@ public: events.Reset(); // Apply auras on spawn and reset // DoCast(me, SPELL_FIRE_SHIELD_TRIGGER); // Need to find this in old DBC if possible - - instance->SetBossState(DATA_PYROGAURD_EMBERSEER, NOT_STARTED); me->RemoveAura(SPELL_EMBERSEER_FULL_STRENGTH); me->RemoveAura(SPELL_EMBERSEER_GROWING); me->RemoveAura(SPELL_EMBERSEER_GROWING_TRIGGER); - events.ScheduleEvent(EVENT_RESPAWN, 1000); + events.ScheduleEvent(EVENT_RESPAWN, 5000); // Hack for missing trigger spell events.ScheduleEvent(EVENT_FIRE_SHIELD, 3000); @@ -209,52 +207,56 @@ public: void UpdateAI(uint32 diff) { - events.Update(diff); - - while (uint32 eventId = events.ExecuteEvent()) + if (!UpdateVictim()) { - switch (eventId) + events.Update(diff); + + while (uint32 eventId = events.ExecuteEvent()) { - case EVENT_RESPAWN: + switch (eventId) { - // Respawn all Blackhand Incarcerators - std::list<Creature*> creatureList; - GetCreatureListWithEntryInGrid(creatureList, me, NPC_BLACKHAND_INCARCERATOR, 35.0f); - for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr) - if (Creature* creatureList = *itr) - { - if (!creatureList->IsAlive()) + case EVENT_RESPAWN: + { + // Respawn all Blackhand Incarcerators + std::list<Creature*> creatureList; + GetCreatureListWithEntryInGrid(creatureList, me, NPC_BLACKHAND_INCARCERATOR, 35.0f); + for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr) + if (Creature* creatureList = *itr) { - creatureList->Respawn(); + if (!creatureList->IsAlive()) + { + creatureList->Respawn(); + } + creatureList->AI()->SetData(1, 2); } - creatureList->AI()->SetData(1, 2); - } - break; - } - case EVENT_PRE_FIGHT_1: - { - // Set data on all Blackhand Incarcerators - std::list<Creature*> creatureList; - GetCreatureListWithEntryInGrid(creatureList, me, NPC_BLACKHAND_INCARCERATOR, 35.0f); - for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr) + me->AddAura(SPELL_ENCAGED_EMBERSEER, me); + instance->SetBossState(DATA_PYROGAURD_EMBERSEER, NOT_STARTED); + break; + } + case EVENT_PRE_FIGHT_1: { - if (Creature* creatureList = *itr) - creatureList->AI()->SetData(1, 1); + // Set data on all Blackhand Incarcerators + std::list<Creature*> creatureList; + GetCreatureListWithEntryInGrid(creatureList, me, NPC_BLACKHAND_INCARCERATOR, 35.0f); + for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr) + { + if (Creature* creatureList = *itr) + creatureList->AI()->SetData(1, 1); + } + events.ScheduleEvent(EVENT_PRE_FIGHT_2, 32000); + break; } - events.ScheduleEvent(EVENT_PRE_FIGHT_2, 32000); - break; - } - case EVENT_PRE_FIGHT_2: - me->CastSpell(me, SPELL_FREEZE_ANIM); - me->CastSpell(me, SPELL_EMBERSEER_GROWING); - Talk(EMOTE_ONE_STACK); - break; - case EVENT_FIRE_SHIELD: - // #### Spell isn't doing any damage ??? #### - DoCast(me, SPELL_FIRE_SHIELD); - events.ScheduleEvent(EVENT_FIRE_SHIELD, 3000); - break; - case EVENT_PLAYER_CHECK: + case EVENT_PRE_FIGHT_2: + me->CastSpell(me, SPELL_FREEZE_ANIM); + me->CastSpell(me, SPELL_EMBERSEER_GROWING); + Talk(EMOTE_ONE_STACK); + break; + case EVENT_FIRE_SHIELD: + // #### Spell isn't doing any damage ??? #### + DoCast(me, SPELL_FIRE_SHIELD); + events.ScheduleEvent(EVENT_FIRE_SHIELD, 3000); + break; + case EVENT_PLAYER_CHECK: { // Check to see if all players in instance have aura SPELL_EMBERSEER_START before starting event bool _hasAura = true; @@ -269,32 +271,40 @@ public: events.ScheduleEvent(EVENT_PRE_FIGHT_1, 1000); instance->SetBossState(DATA_PYROGAURD_EMBERSEER, IN_PROGRESS); } - break; + break; } - case EVENT_ENTER_COMBAT: - AttackStart(me->SelectNearestPlayer(30.0f)); + case EVENT_ENTER_COMBAT: + AttackStart(me->SelectNearestPlayer(30.0f)); + break; + default: + break; + } + } + return; + } + + events.Update(diff); + + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_FIRE_SHIELD: + DoCast(me, SPELL_FIRE_SHIELD); + events.ScheduleEvent(EVENT_FIRE_SHIELD, 3000); break; case EVENT_FIRENOVA: - if (UpdateVictim()) - { - DoCast(me, SPELL_FIRENOVA); + DoCast(me, SPELL_FIRENOVA); events.ScheduleEvent(EVENT_FIRENOVA, 6000); - } break; case EVENT_FLAMEBUFFET: - if (UpdateVictim()) - { - DoCast(me, SPELL_FLAMEBUFFET); + DoCast(me, SPELL_FLAMEBUFFET); events.ScheduleEvent(EVENT_FLAMEBUFFET, 14000); - } break; case EVENT_PYROBLAST: - if (UpdateVictim()) - { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_PYROBLAST); + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) + DoCast(target, SPELL_PYROBLAST); events.ScheduleEvent(EVENT_PYROBLAST, 15000); - } break; default: break; @@ -355,7 +365,7 @@ public: if (data == 1 && value == 2) { - _events.ScheduleEvent(EVENT_ENCAGED_EMBERSEER, 5000); + _events.ScheduleEvent(EVENT_ENCAGED_EMBERSEER, 1000); } } @@ -364,18 +374,28 @@ public: // Used to close doors if (Creature* Emberseer = me->FindNearestCreature(NPC_PYROGAURD_EMBERSEER, 30.0f, true)) Emberseer->AI()->SetData(1, 2); - me->CallForHelp(60.0f); + + // Had to do this because CallForHelp will ignore any npcs without LOS + std::list<Creature*> creatureList; + GetCreatureListWithEntryInGrid(creatureList, me, NPC_BLACKHAND_INCARCERATOR, 60.0f); + for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr) + { + if (Creature* creatureList = *itr) + creatureList->SetInCombatWithZone(); // AI()->AttackStart(me->GetVictim()); + } + _events.ScheduleEvent(EVENT_STRIKE, urand(8000, 16000)); _events.ScheduleEvent(EVENT_ENCAGE, urand(10000, 20000)); - me->CallForHelp(60.0f); // double call because not all are aggroing on first call. } void UpdateAI(uint32 diff) { - _events.Update(diff); + if (!UpdateVictim()) { + _events.Update(diff); + while (uint32 eventId = _events.ExecuteEvent()) { switch (eventId) @@ -391,6 +411,8 @@ public: return; } + _events.Update(diff); + while (uint32 eventId = _events.ExecuteEvent()) { switch (eventId) diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp index 4297ac591f7..d975300c35b 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp @@ -27,7 +27,7 @@ enum Spells SPELL_CLEAVE = 15284, SPELL_MORTAL_STRIKE = 16856, SPELL_FRENZY = 8269, - SPELL_KNOCKDOWN = 13360 // On spawn during Gyth fight + SPELL_KNOCKDOWN = 13360 // On spawn during Gyth fight }; enum Says @@ -37,16 +37,16 @@ enum Says SAY_BLACKHAND_2 = 1, EMOTE_BLACKHAND_DISMOUNT = 2, // Victor Nefarius - SAY_NEFARIUS_1 = 0, - SAY_NEFARIUS_2 = 1, - SAY_NEFARIUS_3 = 2, - SAY_NEFARIUS_4 = 3, - SAY_NEFARIUS_5 = 4, - SAY_NEFARIUS_6 = 5, - SAY_NEFARIUS_7 = 6, - SAY_NEFARIUS_8 = 7, - SAY_NEFARIUS_9 = 8, - SAY_NEFARIUS_10 = 9, + SAY_NEFARIUS_0 = 0, + SAY_NEFARIUS_1 = 1, + SAY_NEFARIUS_2 = 2, + SAY_NEFARIUS_3 = 3, + SAY_NEFARIUS_4 = 4, + SAY_NEFARIUS_5 = 5, + SAY_NEFARIUS_6 = 6, + SAY_NEFARIUS_7 = 7, + SAY_NEFARIUS_8 = 8, + SAY_NEFARIUS_9 = 9, }; enum Adds @@ -55,6 +55,16 @@ enum Adds NPC_CHROMATIC_DRAGONSPAWN = 10447, NPC_BLACKHAND_DRAGON_HANDLER = 10742 }; + +enum Misc +{ + NEFARIUS_PATH_1 = 1379670, + NEFARIUS_PATH_2 = 1379671, + NEFARIUS_PATH_3 = 1379672, + REND_PATH_1 = 1379680, + REND_PATH_2 = 1379681, +}; + /* struct Wave { @@ -106,19 +116,45 @@ static Wave Wave6[]= // 27 sec { 10442, 212.2642f, -430.7648f, 110.9807f, 5.934119f } }; */ + +Position const GythLoc = { 211.762f, -397.5885f, 111.1817f, 4.747295f }; +Position const Teleport1Loc = { 194.2993f, -474.0814f, 121.4505f, -0.01225555f }; +Position const Teleport2Loc = { 216.485f, -434.93f, 110.888f, -0.01225555f }; + enum Events { - EVENT_WHIRLWIND = 1, - EVENT_CLEAVE = 2, - EVENT_MORTAL_STRIKE = 3, - - EVENT_GYTH_1 = 5, - EVENT_GYTH_2 = 6, - EVENT_GYTH_3 = 7, - EVENT_GYTH_4 = 8, - EVENT_GYTH_5 = 9, - EVENT_GYTH_6 = 10, - EVENT_PORTCULLIS = 11, + EVENT_START_1 = 1, + EVENT_START_2 = 2, + EVENT_START_3 = 3, + EVENT_START_4 = 4, + EVENT_TURN_TO_REND = 5, + EVENT_TURN_TO_PLAYER = 6, + EVENT_TURN_TO_FACING_1 = 7, + EVENT_TURN_TO_FACING_2 = 8, + EVENT_TURN_TO_FACING_3 = 9, + EVENT_WAVE_1 = 10, + EVENT_WAVE_2 = 11, + EVENT_WAVE_3 = 12, + EVENT_WAVE_4 = 13, + EVENT_WAVE_5 = 14, + EVENT_WAVE_6 = 15, + EVENT_WAVES_TEXT_1 = 16, + EVENT_WAVES_TEXT_2 = 17, + EVENT_WAVES_TEXT_3 = 18, + EVENT_WAVES_TEXT_4 = 19, + EVENT_WAVES_TEXT_5 = 20, + EVENT_WAVES_COMPLETE_TEXT_1 = 21, + EVENT_WAVES_COMPLETE_TEXT_2 = 22, + EVENT_WAVES_COMPLETE_TEXT_3 = 23, + EVENT_WAVES_EMOTE_1 = 24, + EVENT_WAVES_EMOTE_2 = 25, + EVENT_PATH_REND = 26, + EVENT_PATH_NEFARIUS = 27, + EVENT_TELEPORT_1 = 28, + EVENT_TELEPORT_2 = 29, + EVENT_WHIRLWIND = 30, + EVENT_CLEAVE = 31, + EVENT_MORTAL_STRIKE = 32, }; class boss_rend_blackhand : public CreatureScript @@ -133,9 +169,8 @@ public: void Reset() { _Reset(); - _gythEvent = false; - _victorGUID = 0; - _portcullisGUID = 0; + gythEvent = false; + victorGUID = 0; } void EnterCombat(Unit* /*who*/) @@ -156,33 +191,43 @@ public: { if (instance && 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(); + victorGUID = victor->GetGUID(); if (GameObject* portcullis = me->FindNearestGameObject(GO_DR_PORTCULLIS, 50.0f)) - _portcullisGUID = portcullis->GetGUID(); + portcullisGUID = portcullis->GetGUID(); - if (Creature* victor = me->GetCreature(*me, _victorGUID)) - { - if (Unit* player = victor->SelectNearestPlayer(40.0f)) - { - victor->SetInFront(player); - victor->SendMovementFlagUpdate(); - } - } + events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0); + events.ScheduleEvent(EVENT_START_1, 1000); } + } + } - events.ScheduleEvent(EVENT_GYTH_1, 1000); + void MovementInform(uint32 type, uint32 id) + { + if (type == WAYPOINT_MOTION_TYPE) + { + switch (id) + { + case 5: + events.ScheduleEvent(EVENT_TELEPORT_1, 2000); + break; + case 11: + if (Creature* gyth = me->FindNearestCreature(NPC_GYTH, 10.0f, true)) + gyth->AI()->SetData(1, 1); + me->DespawnOrUnsummon(1000); + break; + } } } void UpdateAI(uint32 diff) { - if (_gythEvent) + if (gythEvent) { events.Update(diff); @@ -190,31 +235,172 @@ public: { switch (eventId) { - case EVENT_GYTH_1: - if (Creature* victor = me->GetCreature(*me, _victorGUID)) - victor->AI()->Talk(SAY_NEFARIUS_1); - events.ScheduleEvent(EVENT_GYTH_2, 4000); + case EVENT_START_1: + if (Creature* victor = me->GetCreature(*me, victorGUID)) + victor->AI()->Talk(SAY_NEFARIUS_0); + events.ScheduleEvent(EVENT_START_2, 4000); break; - case EVENT_GYTH_2: - if (Creature* victor = me->GetCreature(*me, _victorGUID)) + case EVENT_START_2: + events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0); + if (Creature* victor = me->GetCreature(*me, victorGUID)) victor->HandleEmoteCommand(EMOTE_ONESHOT_POINT); - events.ScheduleEvent(EVENT_GYTH_3, 4000); + events.ScheduleEvent(EVENT_START_3, 4000); break; - case EVENT_GYTH_3: - if (Creature* victor = me->GetCreature(*me, _victorGUID)) - victor->AI()->Talk(SAY_NEFARIUS_2); - events.ScheduleEvent(EVENT_PORTCULLIS, 2000); - events.ScheduleEvent(EVENT_GYTH_4, 4000); + case EVENT_START_3: + if (Creature* victor = me->GetCreature(*me, victorGUID)) + victor->AI()->Talk(SAY_NEFARIUS_1); + events.ScheduleEvent(EVENT_WAVE_1, 2000); + events.ScheduleEvent(EVENT_TURN_TO_REND, 4000); + events.ScheduleEvent(EVENT_WAVES_TEXT_1, 20000); break; - case EVENT_GYTH_4: - if (Creature* victor = me->GetCreature(*me, _victorGUID)) + case EVENT_TURN_TO_REND: + if (Creature* victor = me->GetCreature(*me, victorGUID)) { victor->SetInFront(me); victor->SendMovementFlagUpdate(); + victor->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + } + break; + case EVENT_TURN_TO_PLAYER: + if (Creature* victor = me->GetCreature(*me, victorGUID)) + if (Unit* player = victor->SelectNearestPlayer(60.0f)) + { + victor->SetInFront(player); + victor->SendMovementFlagUpdate(); + } + break; + case EVENT_TURN_TO_FACING_1: + if (Creature* victor = me->GetCreature(*me, victorGUID)) + { + victor->SetOrientation(1.518436f); + victor->SendMovementFlagUpdate(); } break; - case EVENT_PORTCULLIS: - if (GameObject* portcullis = me->FindNearestGameObject(GO_DR_PORTCULLIS, 50.0f)) + case EVENT_TURN_TO_FACING_2: + me->SetOrientation(1.658063f); + me->SendMovementFlagUpdate(); + break; + case EVENT_TURN_TO_FACING_3: + me->SetOrientation(1.500983f); + me->SendMovementFlagUpdate(); + break; + case EVENT_WAVES_EMOTE_1: + if (Creature* victor = me->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, 0); + if (Creature* victor = me->GetCreature(*me, victorGUID)) + victor->AI()->Talk(SAY_NEFARIUS_2); + me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000); + events.ScheduleEvent(EVENT_WAVES_EMOTE_1, 5000); + events.ScheduleEvent(EVENT_WAVE_2, 2000); + events.ScheduleEvent(EVENT_WAVES_TEXT_2, 20000); + break; + case EVENT_WAVES_TEXT_2: + events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0); + if (Creature* victor = me->GetCreature(*me, victorGUID)) + victor->AI()->Talk(SAY_NEFARIUS_3); + events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000); + events.ScheduleEvent(EVENT_WAVE_3, 2000); + events.ScheduleEvent(EVENT_WAVES_TEXT_3, 20000); + break; + case EVENT_WAVES_TEXT_3: + events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0); + if (Creature* victor = me->GetCreature(*me, victorGUID)) + victor->AI()->Talk(SAY_NEFARIUS_4); + events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000); + events.ScheduleEvent(EVENT_WAVE_4, 2000); + events.ScheduleEvent(EVENT_WAVES_TEXT_4, 20000); + break; + case EVENT_WAVES_TEXT_4: + Talk(SAY_BLACKHAND_1); + events.ScheduleEvent(EVENT_WAVES_EMOTE_2, 4000); + events.ScheduleEvent(EVENT_TURN_TO_FACING_3, 8000); + events.ScheduleEvent(EVENT_WAVE_5, 2000); + events.ScheduleEvent(EVENT_WAVES_TEXT_5, 20000); + break; + case EVENT_WAVES_TEXT_5: + events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0); + if (Creature* victor = me->GetCreature(*me, victorGUID)) + victor->AI()->Talk(SAY_NEFARIUS_5); + events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000); + events.ScheduleEvent(EVENT_WAVE_6, 2000); + events.ScheduleEvent(EVENT_WAVES_COMPLETE_TEXT_1, 20000); + break; + case EVENT_WAVES_COMPLETE_TEXT_1: + events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0); + if (Creature* victor = me->GetCreature(*me, victorGUID)) + victor->AI()->Talk(SAY_NEFARIUS_6); + events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000); + events.ScheduleEvent(EVENT_WAVES_COMPLETE_TEXT_2, 13000); + break; + case EVENT_WAVES_COMPLETE_TEXT_2: + if (Creature* victor = me->GetCreature(*me, victorGUID)) + victor->AI()->Talk(SAY_NEFARIUS_7); + Talk(SAY_BLACKHAND_2); + events.ScheduleEvent(EVENT_PATH_REND, 1000); + events.ScheduleEvent(EVENT_WAVES_COMPLETE_TEXT_3, 4000); + break; + case EVENT_WAVES_COMPLETE_TEXT_3: + if (Creature* victor = me->GetCreature(*me, victorGUID)) + victor->AI()->Talk(SAY_NEFARIUS_8); + events.ScheduleEvent(EVENT_PATH_NEFARIUS, 1000); + events.ScheduleEvent(EVENT_PATH_REND, 1000); + break; + case EVENT_PATH_NEFARIUS: + if (Creature* victor = me->GetCreature(*me, victorGUID)) + victor->GetMotionMaster()->MovePath(NEFARIUS_PATH_1, true); + break; + case EVENT_PATH_REND: + // path to gyth and spawn gyth. + // after despawn gyth fight will start + 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, 50000); + 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 = me->GetMap()->GetGameObject(portcullisGUID)) + portcullis->UseDoorOrButton(); + // move wave + break; + case EVENT_WAVE_2: + // spawn wave + if (GameObject* portcullis = me->GetMap()->GetGameObject(portcullisGUID)) + portcullis->UseDoorOrButton(); + // move wave + break; + case EVENT_WAVE_3: + // spawn wave + if (GameObject* portcullis = me->GetMap()->GetGameObject(portcullisGUID)) + portcullis->UseDoorOrButton(); + // move wave + break; + case EVENT_WAVE_4: + // spawn wave + if (GameObject* portcullis = me->GetMap()->GetGameObject(portcullisGUID)) + portcullis->UseDoorOrButton(); + // move wave + break; + case EVENT_WAVE_5: + // spawn wave + if (GameObject* portcullis = me->GetMap()->GetGameObject(portcullisGUID)) + portcullis->UseDoorOrButton(); + // move wave + break; + case EVENT_WAVE_6: + // spawn wave + if (GameObject* portcullis = me->GetMap()->GetGameObject(portcullisGUID)) portcullis->UseDoorOrButton(); // move wave break; @@ -252,11 +438,11 @@ public: } DoMeleeAttackIfReady(); } - private: - bool _gythEvent; - uint64 _victorGUID; - uint64 _portcullisGUID; + private: + bool gythEvent; + uint64 victorGUID; + uint64 portcullisGUID; }; CreatureAI* GetAI(Creature* creature) const diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp index 7b80f75255a..ab462319450 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp @@ -437,7 +437,10 @@ public: { bool _mobAlive = false; rune = instance->GetGameObject(go_roomrunes[i]); - if (rune && rune->GetGoState() == GO_STATE_ACTIVE) + if (!rune) + continue; + + if (rune->GetGoState() == GO_STATE_ACTIVE) { for (uint8 ii = 0; ii < 5; ++ii) { @@ -559,7 +562,7 @@ public: uint64 go_blackrockaltar; uint64 go_roomrunes[7]; uint64 go_emberseerrunes[7]; - uint64 runecreaturelist[7] [5]; + uint64 runecreaturelist[7][5]; }; InstanceScript* GetInstanceScript(InstanceMap* map) const |
