aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2021_11_18_00_world_2019_01_02_00_world.sql4
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp3
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp138
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h36
4 files changed, 75 insertions, 106 deletions
diff --git a/sql/updates/world/master/2021_11_18_00_world_2019_01_02_00_world.sql b/sql/updates/world/master/2021_11_18_00_world_2019_01_02_00_world.sql
new file mode 100644
index 00000000000..ba1a87eef80
--- /dev/null
+++ b/sql/updates/world/master/2021_11_18_00_world_2019_01_02_00_world.sql
@@ -0,0 +1,4 @@
+DELETE FROM `creature_text` WHERE `CreatureID`=20926 AND `GroupID` IN (0,1);
+INSERT INTO `creature_text` (`CreatureID`,`GroupID`,`ID`,`Text`,`Type`,`Language`,`Probability`,`Emote`,`Duration`,`Sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
+(20926,0,0,'You hear a faint echo....',16,0,100,0,0,0,18599,3,'When Access Panel is used'),
+(20926,1,0,'You hear a loud rumble of metal grinding on stone...',16,0,100,0,0,0,18600,3,'When main door open');
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp
index ff9df76e4a0..9b9528c4732 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp
@@ -24,7 +24,6 @@ EndScriptData */
#include "ScriptMgr.h"
#include "InstanceScript.h"
-#include "ObjectAccessor.h"
#include "ScriptedCreature.h"
#include "steam_vault.h"
@@ -240,7 +239,7 @@ public:
{
if (instance->GetBossState(DATA_MEKGINEER_STEAMRIGGER) == IN_PROGRESS)
{
- if (Creature* mekgineer = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_MEKGINEER_STEAMRIGGER)))
+ if (Creature* mekgineer = instance->GetCreature(DATA_MEKGINEER_STEAMRIGGER))
{
if (me->IsWithinDistInMap(mekgineer, MAX_REPAIR_RANGE))
{
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 17f089c50c6..737e363f982 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp
@@ -17,50 +17,48 @@
#include "ScriptMgr.h"
#include "Creature.h"
+#include "CreatureAI.h"
#include "GameObject.h"
#include "GameObjectAI.h"
#include "InstanceScript.h"
#include "Log.h"
#include "steam_vault.h"
-class go_main_chambers_access_panel : public GameObjectScript
+struct go_main_chambers_access_panel : public GameObjectAI
{
- public:
- go_main_chambers_access_panel() : GameObjectScript("go_main_chambers_access_panel") { }
-
- struct go_main_chambers_access_panelAI : public GameObjectAI
- {
- go_main_chambers_access_panelAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
-
- InstanceScript* instance;
-
- bool GossipHello(Player* /*player*/) override
- {
- if (me->GetEntry() == GO_ACCESS_PANEL_HYDRO && (instance->GetBossState(DATA_HYDROMANCER_THESPIA) == DONE || instance->GetBossState(DATA_HYDROMANCER_THESPIA) == SPECIAL))
- instance->SetBossState(DATA_HYDROMANCER_THESPIA, SPECIAL);
-
- if (me->GetEntry() == GO_ACCESS_PANEL_MEK && (instance->GetBossState(DATA_MEKGINEER_STEAMRIGGER) == DONE || instance->GetBossState(DATA_MEKGINEER_STEAMRIGGER) == SPECIAL))
- instance->SetBossState(DATA_MEKGINEER_STEAMRIGGER, SPECIAL);
-
- me->AddFlag(GO_FLAG_NOT_SELECTABLE);
- me->SetGoState(GO_STATE_ACTIVE);
- return true;
- }
- };
-
- GameObjectAI* GetAI(GameObject* go) const override
- {
- return GetSteamVaultAI<go_main_chambers_access_panelAI>(go);
- }
+ go_main_chambers_access_panel(GameObject* go) : GameObjectAI(go), _instance(go->GetInstanceScript()) { }
+
+ bool GossipHello(Player* /*player*/) override
+ {
+ if (Creature* controller = _instance->GetCreature(DATA_DOOR_CONTROLLER))
+ controller->AI()->Talk(CONTROLLER_TEXT_ACESS_USED);
+ _instance->SetData(ACTION_OPEN_DOOR, 0);
+ me->AddFlag(GO_FLAG_NOT_SELECTABLE);
+ me->SetGoState(GO_STATE_ACTIVE);
+ return true;
+ }
+
+private:
+ InstanceScript* _instance;
};
ObjectData const gameObjectData[] =
{
{ GO_ACCESS_PANEL_HYDRO, DATA_ACCESS_PANEL_HYDRO },
{ GO_ACCESS_PANEL_MEK, DATA_ACCESS_PANEL_MEK },
+ { GO_MAIN_CHAMBERS_DOOR, DATA_MAIN_DOOR },
{ 0, 0 } // END
};
+ObjectData const creatureData[] =
+{
+ { NPC_HYDROMANCER_THESPIA, DATA_HYDROMANCER_THESPIA },
+ { NPC_MEKGINEER_STEAMRIGGER, DATA_MEKGINEER_STEAMRIGGER },
+ { NPC_WARLORD_KALITHRESH, DATA_WARLORD_KALITHRESH },
+ { NPC_COILFANG_DOOR_CONTROLLER, DATA_DOOR_CONTROLLER },
+ { 0, 0 } // END
+};
+
class instance_steam_vault : public InstanceMapScript
{
public:
@@ -72,69 +70,44 @@ class instance_steam_vault : public InstanceMapScript
{
SetHeaders(DataHeader);
SetBossNumber(EncounterCount);
- LoadObjectData(nullptr, gameObjectData);
-
- DistillerState = 0;
- }
-
- void OnCreatureCreate(Creature* creature) override
- {
- switch (creature->GetEntry())
- {
- case NPC_HYDROMANCER_THESPIA:
- ThespiaGUID = creature->GetGUID();
- break;
- case NPC_MEKGINEER_STEAMRIGGER:
- MekgineerGUID = creature->GetGUID();
- break;
- case NPC_WARLORD_KALITHRESH:
- KalithreshGUID = creature->GetGUID();
- break;
- default:
- break;
- }
+ LoadObjectData(creatureData, gameObjectData);
+ distillerState = 0;
}
void OnGameObjectCreate(GameObject* go) override
{
- switch (go->GetEntry())
- {
- case GO_MAIN_CHAMBERS_DOOR:
- MainChambersDoorGUID = go->GetGUID();
- break;
- default:
- break;
- }
-
InstanceScript::OnGameObjectCreate(go);
+ if (go->GetEntry() == GO_MAIN_CHAMBERS_DOOR)
+ CheckMainDoor();
}
- ObjectGuid GetGuidData(uint32 type) const override
+ void CheckMainDoor()
{
- switch (type)
+ if (GetBossState(DATA_HYDROMANCER_THESPIA) == DONE && GetBossState(DATA_MEKGINEER_STEAMRIGGER) == DONE)
{
- case DATA_HYDROMANCER_THESPIA:
- return ThespiaGUID;
- case DATA_MEKGINEER_STEAMRIGGER:
- return MekgineerGUID;
- case DATA_WARLORD_KALITHRESH:
- return KalithreshGUID;
- default:
- break;
+ if (Creature* controller = GetCreature(DATA_DOOR_CONTROLLER))
+ controller->AI()->Talk(CONTROLLER_TEXT_MAIN_DOOR_OPEN);
+
+ if (GameObject* mainDoor = GetGameObject(DATA_MAIN_DOOR))
+ {
+ HandleGameObject(ObjectGuid::Empty, true, mainDoor);
+ mainDoor->AddFlag(GO_FLAG_NOT_SELECTABLE);
+ }
}
- return ObjectGuid::Empty;
}
void SetData(uint32 type, uint32 data) override
{
if (type == DATA_DISTILLER)
- DistillerState = data;
+ distillerState = data;
+ else if (type == ACTION_OPEN_DOOR)
+ CheckMainDoor();
}
uint32 GetData(uint32 type) const override
{
if (type == DATA_DISTILLER)
- return DistillerState;
+ return distillerState;
return 0;
}
@@ -149,25 +122,11 @@ class instance_steam_vault : public InstanceMapScript
if (state == DONE)
if (GameObject* panel = GetGameObject(DATA_ACCESS_PANEL_HYDRO))
panel->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
- if (state == SPECIAL)
- {
- if (GetBossState(DATA_MEKGINEER_STEAMRIGGER) == SPECIAL)
- HandleGameObject(MainChambersDoorGUID, true);
-
- TC_LOG_DEBUG("scripts", "Instance Steamvault: Access panel used.");
- }
break;
case DATA_MEKGINEER_STEAMRIGGER:
if (state == DONE)
if (GameObject* panel = GetGameObject(DATA_ACCESS_PANEL_MEK))
panel->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
- if (state == SPECIAL)
- {
- if (GetBossState(DATA_HYDROMANCER_THESPIA) == SPECIAL)
- HandleGameObject(MainChambersDoorGUID, true);
-
- TC_LOG_DEBUG("scripts", "Instance Steamvault: Access panel used.");
- }
break;
default:
break;
@@ -177,12 +136,7 @@ class instance_steam_vault : public InstanceMapScript
}
protected:
- ObjectGuid ThespiaGUID;
- ObjectGuid MekgineerGUID;
- ObjectGuid KalithreshGUID;
-
- ObjectGuid MainChambersDoorGUID;
- uint8 DistillerState;
+ uint8 distillerState;
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override
@@ -193,6 +147,6 @@ class instance_steam_vault : public InstanceMapScript
void AddSC_instance_steam_vault()
{
- new go_main_chambers_access_panel();
+ RegisterGameObjectAI(go_main_chambers_access_panel);
new instance_steam_vault();
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h
index b153df14d6c..739a397a1bb 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h
+++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h
@@ -27,28 +27,38 @@ uint32 const EncounterCount = 3;
enum SVDataTypes
{
- DATA_HYDROMANCER_THESPIA = 0,
- DATA_MEKGINEER_STEAMRIGGER = 1,
- DATA_WARLORD_KALITHRESH = 2,
- DATA_DISTILLER = 3,
+ DATA_HYDROMANCER_THESPIA = 0,
+ DATA_MEKGINEER_STEAMRIGGER = 1,
+ DATA_WARLORD_KALITHRESH = 2,
// Additional Data
- DATA_ACCESS_PANEL_HYDRO = 4,
- DATA_ACCESS_PANEL_MEK = 5
+ DATA_DISTILLER = 3,
+ DATA_ACCESS_PANEL_HYDRO = 4,
+ DATA_ACCESS_PANEL_MEK = 5,
+ DATA_DOOR_CONTROLLER = 6,
+ DATA_MAIN_DOOR = 7
};
enum SVCreatureIds
{
- NPC_HYDROMANCER_THESPIA = 17797,
- NPC_MEKGINEER_STEAMRIGGER = 17796,
- NPC_WARLORD_KALITHRESH = 17798
+ NPC_HYDROMANCER_THESPIA = 17797,
+ NPC_MEKGINEER_STEAMRIGGER = 17796,
+ NPC_WARLORD_KALITHRESH = 17798,
+ NPC_COILFANG_DOOR_CONTROLLER = 20926
};
enum SVGameObjectIds
{
- GO_MAIN_CHAMBERS_DOOR = 183049,
- GO_ACCESS_PANEL_HYDRO = 184125,
- GO_ACCESS_PANEL_MEK = 184126
+ GO_MAIN_CHAMBERS_DOOR = 183049,
+ GO_ACCESS_PANEL_HYDRO = 184125,
+ GO_ACCESS_PANEL_MEK = 184126
+};
+
+enum SVMisc
+{
+ ACTION_OPEN_DOOR = 1,
+ CONTROLLER_TEXT_ACESS_USED = 0,
+ CONTROLLER_TEXT_MAIN_DOOR_OPEN = 1
};
template <class AI, class T>
@@ -57,4 +67,6 @@ inline AI* GetSteamVaultAI(T* obj)
return GetInstanceAI<AI>(obj, SteamVaultScriptName);
}
+#define RegisterSteamVaultAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetSteamVaultAI)
+
#endif