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:
Keader
2016-11-25 23:34:01 -02:00
committed by joschiwald
parent 83d0ba4b89
commit 9b9fd4ee24
4 changed files with 70 additions and 19 deletions

View File

@@ -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');

View File

@@ -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,

View File

@@ -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;

View File

@@ -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