fix(Scripts/Steamvault): Improved Door Controller event. (#15580)

Fixes #15547
This commit is contained in:
UltraNix
2023-03-29 06:28:42 +02:00
committed by GitHub
parent d4f8134b3b
commit fa249abb55
2 changed files with 36 additions and 3 deletions

View File

@@ -19,6 +19,12 @@
#include "ScriptMgr.h" #include "ScriptMgr.h"
#include "steam_vault.h" #include "steam_vault.h"
enum MainChambersAccessPanelSays
{
SAY_FAINT_ECHO = 0,
SAY_LOUD_RUMBLE = 1
};
class go_main_chambers_access_panel : public GameObjectScript class go_main_chambers_access_panel : public GameObjectScript
{ {
public: public:
@@ -28,11 +34,16 @@ public:
{ {
if (InstanceScript* instance = go->GetInstanceScript()) if (InstanceScript* instance = go->GetInstanceScript())
{ {
Creature* doorController = instance->GetCreature(DATA_DOOR_CONTROLLER);
if (go->GetEntry() == GO_ACCESS_PANEL_HYDRO) if (go->GetEntry() == GO_ACCESS_PANEL_HYDRO)
{ {
if (instance->GetBossState(DATA_HYDROMANCER_THESPIA) == DONE) if (instance->GetBossState(DATA_HYDROMANCER_THESPIA) == DONE)
{ {
go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE); go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
if (doorController && doorController->IsAIEnabled)
{
doorController->AI()->Talk(SAY_FAINT_ECHO);
}
} }
} }
else else
@@ -40,12 +51,31 @@ public:
if (instance->GetBossState(DATA_MEKGINEER_STEAMRIGGER) == DONE) if (instance->GetBossState(DATA_MEKGINEER_STEAMRIGGER) == DONE)
{ {
go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE); 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 (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); instance->HandleGameObject(ObjectGuid::Empty, true, mainGate);
} }
@@ -60,7 +90,8 @@ public:
ObjectData const creatureData[] = ObjectData const creatureData[] =
{ {
{ NPC_MEKGINEER_STEAMRIGGER, DATA_MEKGINEER_STEAMRIGGER } { NPC_MEKGINEER_STEAMRIGGER, DATA_MEKGINEER_STEAMRIGGER },
{ NPC_DOOR_CONTROLLER, DATA_DOOR_CONTROLLER }
}; };
ObjectData const objectData[] = ObjectData const objectData[] =

View File

@@ -36,7 +36,8 @@ enum steamVault
DATA_ACCESS_PANEL_HYDROMANCER = 4, DATA_ACCESS_PANEL_HYDROMANCER = 4,
DATA_ACCESS_PANEL_MEKGINEER = 5, DATA_ACCESS_PANEL_MEKGINEER = 5,
DATA_MAIN_CHAMBERS_DOOR = 6 DATA_MAIN_CHAMBERS_DOOR = 6,
DATA_DOOR_CONTROLLER = 7
}; };
enum steamVaultNPCGO enum steamVaultNPCGO
@@ -47,6 +48,7 @@ enum steamVaultNPCGO
NPC_MEKGINEER_STEAMRIGGER = 17796, NPC_MEKGINEER_STEAMRIGGER = 17796,
NPC_WARLORD_KALITHRESH = 17798, NPC_WARLORD_KALITHRESH = 17798,
NPC_DOOR_CONTROLLER = 20926
}; };
template <class AI, class T> template <class AI, class T>