mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-22 18:15:31 +01:00
Core/Scripts: Minor Fixes in Black Temple (#18293)
Core/Scripts: Minor Fixes in Black Temple
(cherry picked from commit bced796414)
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
DELETE FROM `creature_text` WHERE entry=22984;
|
||||
INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
|
||||
(22984, 0, 0, 'You hear a loud rumble of metal grinding on stone...', 16, 0, 100, 0, 0, 0, 18600, 2, "Black Temple Trigger - when High Warlord Naj'entus dies - Emote"),
|
||||
(22984, 1, 0, 'The door to The Den of Mortal Delights has opened.', 16, 0, 100, 0, 0, 0, 21494, 2, 'Black Temple Trigger - when Lower Temple Defeated - Emote');
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user