Scripts/The Steamvault: Fixed Chambers Access Panel and Main Chambers Door

Closes #21067
Ty Kittnz, killerwife, Aokromes (sniffs)
This commit is contained in:
Keader
2019-01-02 11:57:33 -03:00
parent 15c50069dd
commit b283565d8a
4 changed files with 72 additions and 104 deletions

View 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');

View File

@@ -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))
{

View File

@@ -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();
}

View File

@@ -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