diff options
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 |