aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h18
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp43
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp35
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