diff options
Diffstat (limited to 'src')
4 files changed, 69 insertions, 8 deletions
diff --git a/src/scripts/eastern_kingdoms/blackrock_depths/blackrock_depths.cpp b/src/scripts/eastern_kingdoms/blackrock_depths/blackrock_depths.cpp index e9256750d31..5ecc380019d 100644 --- a/src/scripts/eastern_kingdoms/blackrock_depths/blackrock_depths.cpp +++ b/src/scripts/eastern_kingdoms/blackrock_depths/blackrock_depths.cpp @@ -52,6 +52,11 @@ bool GOHello_go_shadowforge_brazier(Player* pPlayer, GameObject* pGo) pInstance->SetData(TYPE_LYCEUM, DONE); else pInstance->SetData(TYPE_LYCEUM, IN_PROGRESS); + // If used brazier open linked doors (North or South) + if(pGo->GetGUID() == pInstance->GetData64(DATA_SF_BRAZIER_N)) + pInstance->HandleGameObject(pInstance->GetData64(DATA_GOLEM_DOOR_N), true); + else if(pGo->GetGUID() == pInstance->GetData64(DATA_SF_BRAZIER_S)) + pInstance->HandleGameObject(pInstance->GetData64(DATA_GOLEM_DOOR_S), true); } return false; } diff --git a/src/scripts/eastern_kingdoms/blackrock_depths/blackrock_depths.h b/src/scripts/eastern_kingdoms/blackrock_depths/blackrock_depths.h index c467e3873cf..edb340252b2 100644 --- a/src/scripts/eastern_kingdoms/blackrock_depths/blackrock_depths.h +++ b/src/scripts/eastern_kingdoms/blackrock_depths/blackrock_depths.h @@ -32,6 +32,14 @@ enum eTypes DATA_GO_CHALICE = 19, DATA_GHOSTKILL = 20, - DATA_EVENSTARTER = 21 + DATA_EVENSTARTER = 21, + + DATA_GOLEM_DOOR_N = 22, + DATA_GOLEM_DOOR_S = 23, + + DATA_THRONE_DOOR = 24, + + DATA_SF_BRAZIER_N = 25, + DATA_SF_BRAZIER_S = 26 }; #endif diff --git a/src/scripts/eastern_kingdoms/blackrock_depths/boss_magmus.cpp b/src/scripts/eastern_kingdoms/blackrock_depths/boss_magmus.cpp index 773eaf913cd..1854a7b2adc 100644 --- a/src/scripts/eastern_kingdoms/blackrock_depths/boss_magmus.cpp +++ b/src/scripts/eastern_kingdoms/blackrock_depths/boss_magmus.cpp @@ -29,6 +29,11 @@ enum Spells SPELL_WARSTOMP = 24375 }; +enum eEnums +{ + DATA_THRONE_DOOR = 24 // not id or guid of doors but number of enum in blackrock_depths.h +}; + struct boss_magmusAI : public ScriptedAI { boss_magmusAI(Creature *c) : ScriptedAI(c) {} @@ -71,6 +76,12 @@ struct boss_magmusAI : public ScriptedAI DoMeleeAttackIfReady(); } + // When he die open door to last chamber + void JustDied(Unit *who) + { + if(ScriptedInstance* pInstance = who->GetInstanceData()) + pInstance->HandleGameObject(pInstance->GetData64(DATA_THRONE_DOOR), true); + } }; CreatureAI* GetAI_boss_magmus(Creature* pCreature) { diff --git a/src/scripts/eastern_kingdoms/blackrock_depths/instance_blackrock_depths.cpp b/src/scripts/eastern_kingdoms/blackrock_depths/instance_blackrock_depths.cpp index e04ed9e99c6..d376dea8b6e 100644 --- a/src/scripts/eastern_kingdoms/blackrock_depths/instance_blackrock_depths.cpp +++ b/src/scripts/eastern_kingdoms/blackrock_depths/instance_blackrock_depths.cpp @@ -47,6 +47,7 @@ enum eEnums NPC_SEETHREL = 9038, NPC_GLOOMREL = 9037, NPC_DOOMREL = 9039, + NPC_MAGMUS = 9938, GO_ARENA1 = 161525, GO_ARENA2 = 161522, @@ -62,9 +63,11 @@ enum eEnums GO_TOMB_ENTER = 170576, GO_TOMB_EXIT = 170577, GO_LYCEUM = 170558, - GO_GOLEM_ROOM_N = 170573, - GO_GOLEM_ROOM_S = 170574, - GO_THONE_ROOM = 170575, + GO_SF_N = 174745, // Shadowforge Brazier North + GO_SF_S = 174744, // Shadowforge Brazier South + GO_GOLEM_ROOM_N = 170573, // Magmus door North + GO_GOLEM_ROOM_S = 170574, // Magmus door Soutsh + GO_THRONE_ROOM = 170575, // Throne door GO_SPECTRAL_CHALICE = 164869, GO_CHEST_SEVEN = 169243 @@ -79,6 +82,7 @@ struct instance_blackrock_depths : public ScriptedInstance uint64 EmperorGUID; uint64 PhalanxGUID; + uint64 MagmusGUID; uint64 GoArena1GUID; uint64 GoArena2GUID; @@ -94,9 +98,11 @@ struct instance_blackrock_depths : public ScriptedInstance uint64 GoTombEnterGUID; uint64 GoTombExitGUID; uint64 GoLyceumGUID; + uint64 GoSFSGUID; + uint64 GoSFNGUID; uint64 GoGolemNGUID; uint64 GoGolemSGUID; - uint64 GoThoneGUID; + uint64 GoThroneGUID; uint64 GoChestGUID; uint32 BarAleCount; @@ -112,6 +118,7 @@ struct instance_blackrock_depths : public ScriptedInstance EmperorGUID = 0; PhalanxGUID = 0; + MagmusGUID = 0; GoArena1GUID = 0; GoArena2GUID = 0; @@ -127,9 +134,11 @@ struct instance_blackrock_depths : public ScriptedInstance GoTombEnterGUID = 0; GoTombExitGUID = 0; GoLyceumGUID = 0; + GoSFSGUID = 0; + GoSFNGUID = 0; GoGolemNGUID = 0; GoGolemSGUID = 0; - GoThoneGUID = 0; + GoThroneGUID = 0; GoChestGUID = 0; BarAleCount = 0; @@ -155,6 +164,11 @@ struct instance_blackrock_depths : public ScriptedInstance case NPC_SEETHREL: TombBossGUIDs[4] = pCreature->GetGUID(); break; case NPC_GLOOMREL: TombBossGUIDs[5] = pCreature->GetGUID(); break; case NPC_ANGERREL: TombBossGUIDs[6] = pCreature->GetGUID(); break; + case NPC_MAGMUS: + MagmusGUID = pCreature->GetGUID(); + if(!pCreature->isAlive()) + HandleGameObject(GetData64(DATA_THRONE_DOOR), true); // if Magmus is dead open door to last boss + break; } } @@ -182,9 +196,11 @@ struct instance_blackrock_depths : public ScriptedInstance HandleGameObject(0, false, pGo); break; case GO_LYCEUM: GoLyceumGUID = pGo->GetGUID(); break; + case GO_SF_S: GoSFSGUID = pGo->GetGUID(); break; + case GO_SF_N: GoSFNGUID = pGo->GetGUID(); break; case GO_GOLEM_ROOM_N: GoGolemNGUID = pGo->GetGUID(); break; case GO_GOLEM_ROOM_S: GoGolemSGUID = pGo->GetGUID(); break; - case GO_THONE_ROOM: GoThoneGUID = pGo->GetGUID(); break; + case GO_THRONE_ROOM: GoThroneGUID = pGo->GetGUID(); break; case GO_CHEST_SEVEN: GoChestGUID = pGo->GetGUID(); break; } } @@ -301,6 +317,16 @@ struct instance_blackrock_depths : public ScriptedInstance return GoBarDoorGUID; case DATA_EVENSTARTER: return TombEventStarterGUID; + case DATA_SF_BRAZIER_N: + return GoSFNGUID; + case DATA_SF_BRAZIER_S: + return GoSFSGUID; + case DATA_THRONE_DOOR: + return GoThroneGUID; + case DATA_GOLEM_DOOR_N: + return GoGolemNGUID; + case DATA_GOLEM_DOOR_S: + return GoGolemSGUID; } return 0; } @@ -329,7 +355,7 @@ struct instance_blackrock_depths : public ScriptedInstance m_auiEncounter[i] = NOT_STARTED; if (GhostKillCount > 0 && GhostKillCount < 7) GhostKillCount = 0;//reset tomb of seven event - if (GhostKillCount > 7) + if (GhostKillCount >= 7) GhostKillCount = 7; OUT_LOAD_INST_DATA_COMPLETE; @@ -401,6 +427,17 @@ struct instance_blackrock_depths : public ScriptedInstance TombTimer = TIMER_TOMBOFTHESEVEN; ++TombEventCounter; TombOfSevenEvent(); + // Check Killed bosses + for (uint8 i = 0; i < 7; ++i) + { + if (Creature* boss = instance->GetCreature(TombBossGUIDs[i])) + { + if (!boss->isAlive()) + { + GhostKillCount = i+1; + } + } + } } else TombTimer -= diff; } if (GhostKillCount >= 7 && TombEventStarterGUID) |