From fa249abb55d95b779bdcc9cef98cee9cffce4947 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Wed, 29 Mar 2023 06:28:42 +0200 Subject: [PATCH] fix(Scripts/Steamvault): Improved Door Controller event. (#15580) Fixes #15547 --- .../SteamVault/instance_steam_vault.cpp | 35 +++++++++++++++++-- .../SteamVault/steam_vault.h | 4 ++- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp index 5ec64023d..645347300 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp @@ -19,6 +19,12 @@ #include "ScriptMgr.h" #include "steam_vault.h" +enum MainChambersAccessPanelSays +{ + SAY_FAINT_ECHO = 0, + SAY_LOUD_RUMBLE = 1 +}; + class go_main_chambers_access_panel : public GameObjectScript { public: @@ -28,11 +34,16 @@ public: { if (InstanceScript* instance = go->GetInstanceScript()) { + Creature* doorController = instance->GetCreature(DATA_DOOR_CONTROLLER); if (go->GetEntry() == GO_ACCESS_PANEL_HYDRO) { if (instance->GetBossState(DATA_HYDROMANCER_THESPIA) == DONE) { go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE); + if (doorController && doorController->IsAIEnabled) + { + doorController->AI()->Talk(SAY_FAINT_ECHO); + } } } else @@ -40,12 +51,31 @@ public: if (instance->GetBossState(DATA_MEKGINEER_STEAMRIGGER) == DONE) { go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE); + if (doorController && doorController->IsAIEnabled) + { + doorController->AI()->Talk(SAY_FAINT_ECHO); + } } } if (instance->GetBossState(DATA_HYDROMANCER_THESPIA) == DONE && instance->GetBossState(DATA_MEKGINEER_STEAMRIGGER) == DONE) { - if (GameObject* mainGate = instance->GetGameObject(DATA_MAIN_CHAMBERS_DOOR)) + if (doorController) + { + if (doorController->IsAIEnabled) + { + doorController->AI()->Talk(SAY_LOUD_RUMBLE); + } + + doorController->m_Events.AddEventAtOffset([instance]() + { + if (GameObject* mainGate = instance->GetGameObject(DATA_MAIN_CHAMBERS_DOOR)) + { + instance->HandleGameObject(ObjectGuid::Empty, true, mainGate); + } + }, 4s); + } + else if (GameObject* mainGate = instance->GetGameObject(DATA_MAIN_CHAMBERS_DOOR)) { instance->HandleGameObject(ObjectGuid::Empty, true, mainGate); } @@ -60,7 +90,8 @@ public: ObjectData const creatureData[] = { - { NPC_MEKGINEER_STEAMRIGGER, DATA_MEKGINEER_STEAMRIGGER } + { NPC_MEKGINEER_STEAMRIGGER, DATA_MEKGINEER_STEAMRIGGER }, + { NPC_DOOR_CONTROLLER, DATA_DOOR_CONTROLLER } }; ObjectData const objectData[] = diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h index d34aff65f..71e384e2f 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h @@ -36,7 +36,8 @@ enum steamVault DATA_ACCESS_PANEL_HYDROMANCER = 4, DATA_ACCESS_PANEL_MEKGINEER = 5, - DATA_MAIN_CHAMBERS_DOOR = 6 + DATA_MAIN_CHAMBERS_DOOR = 6, + DATA_DOOR_CONTROLLER = 7 }; enum steamVaultNPCGO @@ -47,6 +48,7 @@ enum steamVaultNPCGO NPC_MEKGINEER_STEAMRIGGER = 17796, NPC_WARLORD_KALITHRESH = 17798, + NPC_DOOR_CONTROLLER = 20926 }; template