mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 17:05:44 +01:00
Scripts/The Steamvault: Fixed Chambers Access Panel and Main Chambers Door
Closes #21067 Ty Kittnz, killerwife, Aokromes (sniffs)
This commit is contained in:
4
sql/updates/world/3.3.5/2019_01_02_00_world.sql
Normal file
4
sql/updates/world/3.3.5/2019_01_02_00_world.sql
Normal file
@@ -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');
|
||||
@@ -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))
|
||||
{
|
||||
|
||||
@@ -24,44 +24,41 @@
|
||||
#include "Map.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") { }
|
||||
go_main_chambers_access_panel(GameObject* go) : GameObjectAI(go), _instance(go->GetInstanceScript()) { }
|
||||
|
||||
struct go_main_chambers_access_panelAI : public GameObjectAI
|
||||
{
|
||||
go_main_chambers_access_panelAI(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->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
|
||||
me->SetGoState(GO_STATE_ACTIVE);
|
||||
return true;
|
||||
}
|
||||
|
||||
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->SetFlag(GAMEOBJECT_FLAGS, 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);
|
||||
}
|
||||
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:
|
||||
@@ -73,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->SetFlag(GAMEOBJECT_FLAGS, 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;
|
||||
}
|
||||
|
||||
@@ -150,25 +122,11 @@ class instance_steam_vault : public InstanceMapScript
|
||||
if (state == DONE)
|
||||
if (GameObject* panel = GetGameObject(DATA_ACCESS_PANEL_HYDRO))
|
||||
panel->RemoveFlag(GAMEOBJECT_FLAGS, 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(GAMEOBJECT_FLAGS, 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;
|
||||
@@ -178,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
|
||||
@@ -194,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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user