From 8514eaf9a03f6e62082034da8c317a2523660396 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Thu, 7 Oct 2021 17:20:02 -0300 Subject: [PATCH] fix(Scripts/BRD): Rework Shadowforge Braziers (#8233) - Both gates should open when both braziers are lit, regardless of the order - Added missing flavor text from Magmus, spoken once the gates open --- .../rev_1633260465157196700.sql | 5 ++ .../BlackrockDepths/blackrock_depths.cpp | 52 ++++++++++--------- .../BlackrockDepths/blackrock_depths.h | 9 +++- .../instance_blackrock_depths.cpp | 5 +- 4 files changed, 45 insertions(+), 26 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1633260465157196700.sql diff --git a/data/sql/updates/pending_db_world/rev_1633260465157196700.sql b/data/sql/updates/pending_db_world/rev_1633260465157196700.sql new file mode 100644 index 000000000..c86d2a31a --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1633260465157196700.sql @@ -0,0 +1,5 @@ +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1633260465157196700'); + +DELETE FROM `creature_text` WHERE `CreatureID` = 9938 AND `GroupID` = 0; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(9938, 0, 0, 'Emperor Thaurissan does not wish to be disturbed! Turn back now or face your doom, weak mortals!', 14, 0, 100, 0, 0, 0, 5430, 3, 'Magmus - SAY_MAGMUS_BRAZIERS_LIT'); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp index 88cbe4ab8..58a002050 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp @@ -23,7 +23,10 @@ #include "ScriptMgr.h" #include "WorldSession.h" -uint32 braziersUsed = 0; +enum ShadowforgeBrazier +{ + SAY_MAGMUS_BRAZIER_LIT = 0 +}; //go_shadowforge_brazier class go_shadowforge_brazier : public GameObjectScript @@ -35,36 +38,37 @@ public: { if (InstanceScript* instance = go->GetInstanceScript()) { - if (instance->GetData(TYPE_LYCEUM) == IN_PROGRESS) - instance->SetData(TYPE_LYCEUM, DONE); - else - instance->SetData(TYPE_LYCEUM, IN_PROGRESS); - // If used brazier open linked doors (North or South) - if (go->GetGUID() == instance->GetGuidData(DATA_SF_BRAZIER_N)) + GameObject* northBrazier = ObjectAccessor::GetGameObject(*go, instance->GetGuidData(DATA_SF_BRAZIER_N)); + GameObject* southBrazier = ObjectAccessor::GetGameObject(*go, instance->GetGuidData(DATA_SF_BRAZIER_S)); + + if (!northBrazier || !southBrazier) { - if (braziersUsed == 0) - { - braziersUsed = 1; - } - else if(braziersUsed == 2) - { - instance->HandleGameObject(instance->GetGuidData(DATA_GOLEM_DOOR_N), true); - instance->HandleGameObject(instance->GetGuidData(DATA_GOLEM_DOOR_S), true); - braziersUsed = 0; - } + return false; } - else if (go->GetGUID() == instance->GetGuidData(DATA_SF_BRAZIER_S)) + + // Check if the opposite brazier is lit - if it is, open the gates. + if ((go->GetGUID() == northBrazier->GetGUID() && southBrazier->GetGoState() == GO_STATE_ACTIVE) + || (go->GetGUID() == southBrazier->GetGUID() && northBrazier->GetGoState() == GO_STATE_ACTIVE)) { - if (braziersUsed == 0) + if (instance->GetData(TYPE_LYCEUM) == IN_PROGRESS) { - braziersUsed = 2; + instance->SetData(TYPE_LYCEUM, DONE); } - else if (braziersUsed == 1) + else { - instance->HandleGameObject(instance->GetGuidData(DATA_GOLEM_DOOR_N), true); - instance->HandleGameObject(instance->GetGuidData(DATA_GOLEM_DOOR_S), true); - braziersUsed = 0; + instance->SetData(TYPE_LYCEUM, IN_PROGRESS); } + + if (Creature* magmus = ObjectAccessor::GetCreature(*go, instance->GetGuidData(DATA_MAGMUS))) + { + if (magmus->IsAlive()) + { + magmus->AI()->Talk(SAY_MAGMUS_BRAZIER_LIT); + } + } + + instance->HandleGameObject(instance->GetGuidData(DATA_GOLEM_DOOR_N), true); + instance->HandleGameObject(instance->GetGuidData(DATA_GOLEM_DOOR_S), true); } } return false; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.h b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.h index b7428a47f..a86b220a1 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.h +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.h @@ -70,7 +70,14 @@ enum DataTypes DATA_OPEN_COFFER_DOORS = 30, DATA_GOLEM_LORD_ARGELMACH_INIT = 31, - DATA_GOLEM_LORD_ARGELMACH_ADDS = 32 + DATA_GOLEM_LORD_ARGELMACH_ADDS = 32, + + DATA_MAGMUS = 33 +}; + +enum CreatureIds +{ + NPC_MAGMUS = 9938 }; template diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp index 5637609ae..44830f0e0 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp @@ -34,7 +34,6 @@ enum Creatures NPC_SEETHREL = 9038, NPC_GLOOMREL = 9037, NPC_DOOMREL = 9039, - NPC_MAGMUS = 9938, NPC_MOIRA = 8929, NPC_WATCHMAN_DOOMGRIP = 9476, @@ -516,6 +515,10 @@ public: return GoGolemSGUID; case DATA_GO_CHALICE: return GoSpectralChaliceGUID; + case DATA_MAGMUS: + { + return MagmusGUID; + } } return ObjectGuid::Empty;