diff options
author | Jinnaix <37972361+Jinnaix@users.noreply.github.com> | 2020-03-20 14:51:43 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-12-24 00:58:04 +0100 |
commit | 340a107f6babc66109054bf7151514e9b03fc80d (patch) | |
tree | 666d9f6df66ae2e613337800abae6f2afe79a001 /src | |
parent | 4e0da6f7d12bdbf9a333901f58903757d236c59f (diff) |
Scripts/Blackwing Lair - Doors correction (#24327)
Fix all doors
corrected the Chromaggus fight start
correctly close final bossfight door at fight and open it on reset or bosskill
(cherry picked from commit a8a0f6b261994712e0339be96b8174a8382c51f7)
Diffstat (limited to 'src')
3 files changed, 79 insertions, 17 deletions
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h index 8145578f43a..b25d11671e9 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h @@ -38,7 +38,10 @@ enum BWLEncounter DATA_NEFARIAN = 7, // Additional Data - DATA_LORD_VICTOR_NEFARIUS = 8 + DATA_LORD_VICTOR_NEFARIUS = 8, + + // Doors + DATA_GO_CHROMAGGUS_DOOR = 9 }; enum BWLCreatureIds @@ -61,11 +64,14 @@ enum BWLCreatureIds enum BWLGameObjectIds { GO_BLACK_DRAGON_EGG = 177807, - GO_PORTCULLIS = 176965, - GO_DRAKE_RIDER_PORTCULLIS = 175185, - GO_ALTERAC_VALLEY_GATE = 180424, - GO_GATE = 185483, - GO_VACCUUM_EXIT_GATE = 181125 + GO_PORTCULLIS_RAZORGORE = 176965, + GO_PORTCULLIS_VAELASTRASZ = 179364, + GO_PORTCULLIS_BROODLORD = 179365, + GO_PORTCULLIS_THREEDRAGONS = 179115, + GO_PORTCULLIS_CHROMAGGUS = 179117, //Door after you kill him, not the one for his room + GO_CHROMAGGUS_LEVER = 179148, + GO_CHROMAGGUS_DOOR = 179116, + GO_PORTCULLIS_NEFARIAN = 176966 }; enum BWLEvents diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp index be980775316..e3de1f2b904 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp @@ -17,7 +17,11 @@ #include "ScriptMgr.h" #include "blackwing_lair.h" +#include "InstanceScript.h" +#include "GameObject.h" +#include "GameObjectAI.h" #include "Map.h" +#include "ObjectAccessor.h" #include "Player.h" #include "ScriptedCreature.h" @@ -294,7 +298,46 @@ public: } }; +class go_chromaggus_lever : public GameObjectScript +{ + public: + go_chromaggus_lever() : GameObjectScript("go_chromaggus_lever") { } + + struct go_chromaggus_leverAI : public GameObjectAI + { + go_chromaggus_leverAI(GameObject* go) : GameObjectAI(go), _instance(go->GetInstanceScript()) { } + + bool GossipHello(Player* player) override + { + if (_instance->GetBossState(DATA_CHROMAGGUS) != DONE && _instance->GetBossState(DATA_CHROMAGGUS) != IN_PROGRESS) + { + _instance->SetBossState(DATA_CHROMAGGUS, IN_PROGRESS); + + if (Creature* creature = _instance->GetCreature(DATA_CHROMAGGUS)) + creature->AI()->JustEngagedWith(player); + + if (GameObject* go = _instance->GetGameObject(DATA_GO_CHROMAGGUS_DOOR)) + _instance->HandleGameObject(ObjectGuid::Empty, true, go); + } + + me->AddFlag(GameObjectFlags(GO_FLAG_NOT_SELECTABLE | GO_FLAG_IN_USE)); + me->SetGoState(GO_STATE_ACTIVE); + + return true; + } + + private: + InstanceScript* _instance; + }; + + GameObjectAI* GetAI(GameObject* go) const override + { + return GetBlackwingLairAI<go_chromaggus_leverAI>(go); + } +}; + void AddSC_boss_chromaggus() { new boss_chromaggus(); + new go_chromaggus_lever(); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp index 592adc1d322..d4303b7e28c 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp @@ -27,14 +27,15 @@ DoorData const doorData[] = { - { GO_PORTCULLIS, DATA_RAZORGORE_THE_UNTAMED, DOOR_TYPE_PASSAGE }, - { GO_DRAKE_RIDER_PORTCULLIS, DATA_VAELASTRAZ_THE_CORRUPT, DOOR_TYPE_PASSAGE }, - { GO_ALTERAC_VALLEY_GATE, DATA_BROODLORD_LASHLAYER, DOOR_TYPE_PASSAGE }, - { GO_GATE, DATA_FIREMAW, DOOR_TYPE_PASSAGE }, - { GO_GATE, DATA_EBONROC, DOOR_TYPE_PASSAGE }, - { GO_GATE, DATA_FLAMEGOR, DOOR_TYPE_PASSAGE }, - { GO_VACCUUM_EXIT_GATE, DATA_CHROMAGGUS, DOOR_TYPE_PASSAGE }, - { 0, 0, DOOR_TYPE_ROOM } // END + { GO_PORTCULLIS_RAZORGORE, DATA_RAZORGORE_THE_UNTAMED, DOOR_TYPE_PASSAGE }, + { GO_PORTCULLIS_VAELASTRASZ, DATA_VAELASTRAZ_THE_CORRUPT, DOOR_TYPE_PASSAGE }, + { GO_PORTCULLIS_BROODLORD, DATA_BROODLORD_LASHLAYER, DOOR_TYPE_PASSAGE }, + { GO_PORTCULLIS_THREEDRAGONS, DATA_FIREMAW, DOOR_TYPE_PASSAGE }, + { GO_PORTCULLIS_THREEDRAGONS, DATA_EBONROC, DOOR_TYPE_PASSAGE }, + { GO_PORTCULLIS_THREEDRAGONS, DATA_FLAMEGOR, DOOR_TYPE_PASSAGE }, + { GO_PORTCULLIS_CHROMAGGUS, DATA_CHROMAGGUS, DOOR_TYPE_PASSAGE }, + { GO_PORTCULLIS_NEFARIAN, DATA_NEFARIAN, DOOR_TYPE_ROOM }, + { 0, 0, DOOR_TYPE_ROOM } // END }; ObjectData const creatureData[] = @@ -51,6 +52,12 @@ ObjectData const creatureData[] = { 0, 0 } // END }; +ObjectData const gameObjectData[] = +{ + { GO_CHROMAGGUS_DOOR, DATA_GO_CHROMAGGUS_DOOR }, + { 0, 0 } //END +}; + Position const SummonPosition[8] = { {-7661.207520f, -1043.268188f, 407.199554f, 6.280452f}, @@ -77,7 +84,7 @@ public: SetHeaders(DataHeader); SetBossNumber(EncounterCount); LoadDoorData(doorData); - LoadObjectData(creatureData, nullptr); + LoadObjectData(creatureData, gameObjectData); // Razorgore EggCount = 0; @@ -113,8 +120,14 @@ public: { InstanceScript::OnGameObjectCreate(go); - if (go->GetEntry() == GO_BLACK_DRAGON_EGG) - EggList.push_back(go->GetGUID()); + switch(go->GetEntry()) + { + case GO_BLACK_DRAGON_EGG: + EggList.push_back(go->GetGUID()); + break; + default: + break; + } } void OnGameObjectRemove(GameObject* go) override |