diff options
Diffstat (limited to 'src')
3 files changed, 71 insertions, 106 deletions
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 |