aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Outland/BlackTemple/black_temple.h13
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp15
-rw-r--r--src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp57
3 files changed, 66 insertions, 19 deletions
diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.h b/src/server/scripts/Outland/BlackTemple/black_temple.h
index 0be3a645faf..01ee93ffa1f 100644
--- a/src/server/scripts/Outland/BlackTemple/black_temple.h
+++ b/src/server/scripts/Outland/BlackTemple/black_temple.h
@@ -49,6 +49,14 @@ enum BTDataTypes
DATA_BLOOD_ELF_COUNCIL_VOICE = 15,
DATA_GO_ILLIDAN_GATE = 16,
+ DATA_BLACK_TEMPLE_TRIGGER = 17,
+ DATA_GO_DEN_OF_MORTAL_DOOR = 18
+};
+
+enum TriggerEmotes
+{
+ EMOTE_HIGH_WARLORD_NAJENTUS_DIED = 0,
+ EMOTE_DEN_OF_MORTAL_DOOR_OPEN = 1
};
enum BTCreatureIds
@@ -72,7 +80,8 @@ enum BTCreatureIds
NPC_BLOOD_ELF_COUNCIL_VOICE = 23499,
NPC_AKAMA = 23089, // This is the Akama that starts the Illidan encounter.
NPC_AKAMA_SHADE = 23191, // This is the Akama that starts the Shade of Akama encounter.
- NPC_SUPREMUS_VOLCANO = 23085
+ NPC_SUPREMUS_VOLCANO = 23085,
+ NPC_BLACK_TEMPLE_TRIGGER = 22984
};
enum BTGameObjectIds
@@ -84,7 +93,7 @@ enum BTGameObjectIds
GO_TERON_DOOR_1 = 185480,
GO_TERON_DOOR_2 = 186153,
GO_GURTOGG_DOOR = 185892,
- GO_TEMPLE_DOOR = 185479,
+ GO_DEN_OF_MORTAL_DOOR = 185479,
GO_MOTHER_SHAHRAZ_DOOR = 185482,
GO_COUNCIL_DOOR_1 = 185481,
GO_COUNCIL_DOOR_2 = 186152,
diff --git a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
index 7a25c91903b..c9d388369d7 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
@@ -202,7 +202,9 @@ Position const BrokenWP[18] =
{ 478.8986f, 370.1895f, 112.7839f }
};
-static float const MIDDLE_OF_ROOM = 400.0f;
+static float const MIDDLE_OF_ROOM = 400.0f;
+static float const FACE_THE_DOOR = 0.08726646f;
+static float const FACE_THE_PLATFORM = 3.118662f;
class boss_shade_of_akama : public CreatureScript
{
@@ -224,8 +226,9 @@ public:
void Reset() override
{
+ _Reset();
Initialize();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_STUN);
me->SetWalk(true);
@@ -235,7 +238,8 @@ public:
void EnterEvadeMode(EvadeReason /*why*/) override
{
- _Reset();
+ events.Reset();
+ summons.DespawnAll();
for (ObjectGuid const& spawnerGuid : _spawners)
if (Creature* spawner = ObjectAccessor::GetCreature(*me, spawnerGuid))
@@ -265,6 +269,7 @@ public:
{
_isInPhaseOne = false;
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
me->SetWalk(false);
events.ScheduleEvent(EVENT_ADD_THREAT, Milliseconds(100));
@@ -449,7 +454,6 @@ public:
else if (pointId == AKAMA_INTRO_WAYPOINT)
{
me->SetWalk(false);
- me->SetFacingTo(0.08726646f, true);
_events.ScheduleEvent(EVENT_START_SOUL_RETRIEVE, Seconds(1));
}
}
@@ -484,7 +488,7 @@ public:
me->GetMotionMaster()->MovePoint(AKAMA_CHANNEL_WAYPOINT, AkamaWP[0], false);
break;
case EVENT_SHADE_CHANNEL:
- me->SetFacingTo(3.118662f);
+ me->SetFacingTo(FACE_THE_PLATFORM);
DoCastSelf(SPELL_AKAMA_SOUL_CHANNEL);
me->setFaction(FACTION_COMBAT);
_events.ScheduleEvent(EVENT_FIXATE, Seconds(5));
@@ -501,6 +505,7 @@ public:
_events.Repeat(Seconds(3), Seconds(7));
break;
case EVENT_START_SOUL_RETRIEVE:
+ me->SetFacingTo(FACE_THE_DOOR, true);
DoCast(SPELL_AKAMA_SOUL_RETRIEVE);
_events.ScheduleEvent(EVENT_START_BROKEN_FREE, Seconds(15));
break;
diff --git a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
index 25aa505e433..3f2f0efb061 100644
--- a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
+++ b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
@@ -32,11 +32,9 @@ DoorData const doorData[] =
{ GO_TERON_DOOR_1, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM },
{ GO_TERON_DOOR_2, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM },
{ GO_GURTOGG_DOOR, DATA_GURTOGG_BLOODBOIL, DOOR_TYPE_PASSAGE },
- { GO_TEMPLE_DOOR, DATA_RELIQUARY_OF_SOULS, DOOR_TYPE_PASSAGE },
{ GO_MOTHER_SHAHRAZ_DOOR, DATA_MOTHER_SHAHRAZ, DOOR_TYPE_PASSAGE },
{ GO_COUNCIL_DOOR_1, DATA_ILLIDARI_COUNCIL, DOOR_TYPE_ROOM },
{ GO_COUNCIL_DOOR_2, DATA_ILLIDARI_COUNCIL, DOOR_TYPE_ROOM },
- //{ GO_ILLIDAN_GATE, DATA_GO_ILLIDAN_GATE, DOOR_TYPE_PASSAGE },
{ GO_ILLIDAN_DOOR_R, DATA_ILLIDAN_STORMRAGE, DOOR_TYPE_ROOM },
{ GO_ILLIDAN_DOOR_L, DATA_ILLIDAN_STORMRAGE, DOOR_TYPE_ROOM },
{ 0, 0, DOOR_TYPE_ROOM } // END
@@ -74,9 +72,17 @@ ObjectData const creatureData[] =
{ NPC_LADY_MALANDE, DATA_LADY_MALANDE },
{ NPC_VERAS_DARKSHADOW, DATA_VERAS_DARKSHADOW },
{ NPC_BLOOD_ELF_COUNCIL_VOICE, DATA_BLOOD_ELF_COUNCIL_VOICE },
+ { NPC_BLACK_TEMPLE_TRIGGER, DATA_BLACK_TEMPLE_TRIGGER },
{ 0, 0 } // end
};
+ObjectData const gameObjectData[] =
+{
+ { GO_ILLIDAN_GATE, DATA_GO_ILLIDAN_GATE },
+ { GO_DEN_OF_MORTAL_DOOR, DATA_GO_DEN_OF_MORTAL_DOOR },
+ { 0, 0 } //END
+};
+
class instance_black_temple : public InstanceMapScript
{
public:
@@ -89,28 +95,55 @@ class instance_black_temple : public InstanceMapScript
SetHeaders(DataHeader);
SetBossNumber(EncounterCount);
LoadDoorData(doorData);
- LoadObjectData(creatureData, nullptr);
+ LoadObjectData(creatureData, gameObjectData);
LoadBossBoundaries(boundaries);
}
void OnGameObjectCreate(GameObject* go) override
{
- if (go->GetEntry() == GO_ILLIDAN_GATE)
- IllidanGateGUID = go->GetGUID();
-
InstanceScript::OnGameObjectCreate(go);
+ if (go->GetEntry() == GO_DEN_OF_MORTAL_DOOR)
+ if(CheckDenOfMortalDoor())
+ go->SetGoState(GO_STATE_ACTIVE);
}
- ObjectGuid GetGuidData(uint32 type) const override
+ bool SetBossState(uint32 type, EncounterState state) override
{
- if (type == DATA_GO_ILLIDAN_GATE)
- return IllidanGateGUID;
+ if (!InstanceScript::SetBossState(type, state))
+ return false;
+ switch (type)
+ {
+ case DATA_HIGH_WARLORD_NAJENTUS:
+ if (state == DONE)
+ if (Creature* trigger = GetCreature(DATA_BLACK_TEMPLE_TRIGGER))
+ trigger->AI()->Talk(EMOTE_HIGH_WARLORD_NAJENTUS_DIED);
+ break;
+ case DATA_SHADE_OF_AKAMA:
+ case DATA_TERON_GOREFIEND:
+ case DATA_GURTOGG_BLOODBOIL:
+ case DATA_RELIQUARY_OF_SOULS:
+ if (state == DONE && CheckDenOfMortalDoor())
+ {
+ if (Creature* trigger = GetCreature(DATA_BLACK_TEMPLE_TRIGGER))
+ trigger->AI()->Talk(EMOTE_DEN_OF_MORTAL_DOOR_OPEN);
- return InstanceScript::GetGuidData(type);
+ if(GameObject* go = GetGameObject(DATA_GO_DEN_OF_MORTAL_DOOR))
+ go->SetGoState(GO_STATE_ACTIVE);
+ }
+ break;
+ default:
+ break;
+ }
+ return true;
}
- protected:
- ObjectGuid IllidanGateGUID;
+ bool CheckDenOfMortalDoor()
+ {
+ for (DataTypes boss : {DATA_SHADE_OF_AKAMA, DATA_TERON_GOREFIEND, DATA_RELIQUARY_OF_SOULS, DATA_GURTOGG_BLOODBOIL})
+ if (GetBossState(boss) != DONE)
+ return false;
+ return true;
+ }
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override