From 4e41a02be2dc9b9dafbda44019c596d50c19b7cb Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 21 Oct 2023 22:52:07 -0300 Subject: [PATCH] =?UTF-8?q?fix(Scripts/Karazhan):=20Implement=20the=20side?= =?UTF-8?q?=20entrance=20door=20area=20trigger=20=E2=80=A6=20(#17556)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(Scripts/Karazhan): Implement the side entrance door area trigger handling --- .../rev_1697938524950640300.sql | 4 ++++ .../Karazhan/instance_karazhan.cpp | 14 +++++------ .../EasternKingdoms/Karazhan/karazhan.cpp | 24 +++++++++++++++++++ 3 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1697938524950640300.sql diff --git a/data/sql/updates/pending_db_world/rev_1697938524950640300.sql b/data/sql/updates/pending_db_world/rev_1697938524950640300.sql new file mode 100644 index 000000000..2014eabbb --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1697938524950640300.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `areatrigger_scripts` WHERE `entry` = 4522; +INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES +(4522, 'at_karazhan_side_entrance'); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp index bf20a171e..5e595c568 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp @@ -48,6 +48,12 @@ ObjectData const creatureData[] = { 0, 0 } }; +ObjectData const gameObjectData[] = +{ + { GO_SIDE_ENTRANCE_DOOR, DATA_GO_SIDE_ENTRANCE_DOOR }, + { 0, 0 } +}; + class instance_karazhan : public InstanceMapScript { public: @@ -64,7 +70,7 @@ public: { SetHeaders(DataHeader); SetBossNumber(EncounterCount); - LoadObjectData(creatureData, nullptr); + LoadObjectData(creatureData, gameObjectData); // 1 - OZ, 2 - HOOD, 3 - RAJ, this never gets altered. OperaEvent = urand(EVENT_OZ, EVENT_RAJ); @@ -300,8 +306,6 @@ public: { HandleGameObject(m_uiStageDoorLeftGUID, true); HandleGameObject(m_uiStageDoorRightGUID, true); - if (GameObject* sideEntrance = instance->GetGameObject(m_uiSideEntranceDoor)) - sideEntrance->RemoveGameObjectFlag(GO_FLAG_LOCKED); instance->UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, 16812, nullptr); } else if (state == FAIL) @@ -372,7 +376,6 @@ public: MastersTerraceDoor[1] = go->GetGUID(); break; case GO_SIDE_ENTRANCE_DOOR: - m_uiSideEntranceDoor = go->GetGUID(); if (GetBossState(DATA_OPERA_PERFORMANCE) == DONE) go->RemoveGameObjectFlag(GO_FLAG_LOCKED); else @@ -477,8 +480,6 @@ public: return m_uiLibraryDoor; case DATA_GO_MASSIVE_DOOR: return m_uiMassiveDoor; - case DATA_GO_SIDE_ENTRANCE_DOOR: - return m_uiSideEntranceDoor; case DATA_GO_GAME_DOOR: return m_uiGamesmansDoor; case DATA_GO_GAME_EXIT_DOOR: @@ -519,7 +520,6 @@ public: ObjectGuid m_uiNightBaneGUID; ObjectGuid m_uiLibraryDoor; // Door at Shade of Aran ObjectGuid m_uiMassiveDoor; // Door at Netherspite - ObjectGuid m_uiSideEntranceDoor; // Side Entrance ObjectGuid m_uiGamesmansDoor; // Door before Chess ObjectGuid m_uiGamesmansExitDoor; // Door after Chess ObjectGuid m_uiNetherspaceDoor; // Door at Malchezaar diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp index 2c144b3ad..d818a42c0 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp @@ -562,8 +562,32 @@ public: }; }; +class at_karazhan_side_entrance : public OnlyOnceAreaTriggerScript +{ +public: + at_karazhan_side_entrance() : OnlyOnceAreaTriggerScript("at_karazhan_side_entrance") { } + + bool _OnTrigger(Player* player, AreaTrigger const* /*at*/) override + { + if (InstanceScript* instance = player->GetInstanceScript()) + { + if (instance->GetBossState(DATA_OPERA_PERFORMANCE) == DONE) + { + if (GameObject* door = instance->GetGameObject(DATA_GO_SIDE_ENTRANCE_DOOR)) + { + instance->HandleGameObject(ObjectGuid::Empty, true, door); + door->RemoveGameObjectFlag(GO_FLAG_LOCKED); + } + } + } + + return false; + } +}; + void AddSC_karazhan() { new npc_barnes(); new npc_image_of_medivh(); + new at_karazhan_side_entrance(); }