Core/Scripts: Cleanup in instance_black_temple and added missing datas (#18246)

* Core/Scripts: Cleanup in instance_black_temple and added missing datas

* Fixed door timing issue

* Remove redundant call

(cherry picked from commit 81edee5648)
This commit is contained in:
Keader
2016-11-13 17:23:52 -02:00
committed by joschiwald
parent b17aa07409
commit c7d7464a2d
4 changed files with 64 additions and 200 deletions

View File

@@ -49,27 +49,29 @@ enum BTDataTypes
DATA_BLOOD_ELF_COUNCIL_VOICE = 15,
DATA_GO_ILLIDAN_GATE = 16,
DATA_GO_ILLIDAN_DOOR_R = 17,
DATA_GO_ILLIDAN_DOOR_L = 18
};
enum BTCreatureIds
{
//Bosses
NPC_HIGH_WARLORD_NAJENTUS = 22887,
NPC_SUPREMUS = 22898,
NPC_SHADE_OF_AKAMA = 22841,
NPC_AKAMA_SHADE = 23191, // This is the Akama that starts the Shade of Akama encounter.
NPC_AKAMA = 23089, // This is the Akama that starts the Illidan encounter.
NPC_TERON_GOREFIEND = 22871,
NPC_GURTOGG_BLOODBOIL = 22948,
NPC_RELIQUARY_OF_SOULS = 22856,
NPC_MOTHER_SHAHRAZ = 22947,
NPC_ILLIDARI_COUNCIL = 23426,
NPC_ILLIDAN_STORMRAGE = 22917,
//Misc
NPC_GATHIOS_THE_SHATTERER = 22949,
NPC_HIGH_NETHERMANCER_ZEREVOR = 22950,
NPC_LADY_MALANDE = 22951,
NPC_VERAS_DARKSHADOW = 22952,
NPC_ILLIDARI_COUNCIL = 23426,
NPC_BLOOD_ELF_COUNCIL_VOICE = 23499,
NPC_ILLIDAN_STORMRAGE = 22917,
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
};

View File

@@ -544,8 +544,7 @@ public:
void EnterCombat(Unit* /*who*/) override
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
me->setActive(true);
DoZoneInCombat();
_EnterCombat();
}
void AttackStart(Unit* who) override
@@ -566,9 +565,6 @@ public:
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
for (uint8 i = DATA_GO_ILLIDAN_DOOR_R; i < DATA_GO_ILLIDAN_DOOR_L + 1; ++i)
instance->HandleGameObject(instance->GetGuidData(i), true);
_JustDied();
}
@@ -1417,23 +1413,13 @@ public:
IllidanGUID = instance->GetGuidData(DATA_ILLIDAN_STORMRAGE);
GateGUID = instance->GetGuidData(DATA_GO_ILLIDAN_GATE);
DoorGUID[0] = instance->GetGuidData(DATA_GO_ILLIDAN_DOOR_R);
DoorGUID[1] = instance->GetGuidData(DATA_GO_ILLIDAN_DOOR_L);
if (JustCreated) // close all doors at create
{
instance->HandleGameObject(GateGUID, false);
for (uint8 i = 0; i < 2; ++i)
instance->HandleGameObject(DoorGUID[i], false);
}
else // open all doors, raid wiped
{
instance->HandleGameObject(GateGUID, true);
WalkCount = 1; // skip first wp
for (uint8 i = 0; i < 2; ++i)
instance->HandleGameObject(DoorGUID[i], true);
}
KillAllElites();
@@ -1485,9 +1471,6 @@ public:
void BeginTalk()
{
instance->SetBossState(DATA_ILLIDAN_STORMRAGE, IN_PROGRESS);
for (uint8 i = 0; i < 2; ++i)
instance->HandleGameObject(DoorGUID[i], false);
if (Creature* illidan = ObjectAccessor::GetCreature(*me, IllidanGUID))
{
illidan->RemoveAurasDueToSpell(SPELL_KNEEL);
@@ -1679,10 +1662,6 @@ public:
{
switch (WalkCount)
{
case 6:
for (uint8 i = 0; i < 2; ++i)
instance->HandleGameObject(DoorGUID[i], true);
break;
case 8:
if (Phase == PHASE_WALK)
EnterPhase(PHASE_TALK);
@@ -1800,7 +1779,6 @@ public:
ObjectGuid ChannelGUID;
ObjectGuid SpiritGUID[2];
ObjectGuid GateGUID;
ObjectGuid DoorGUID[2];
uint32 ChannelCount;
uint32 WalkCount;
uint32 TalkCount;

View File

@@ -251,7 +251,7 @@ public:
events.ScheduleEvent(EVENT_START_CHANNELERS_AND_SPAWNERS, Seconds(1));
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
events.ScheduleEvent(EVENT_EVADE_CHECK, Seconds(10));
if (Creature* akama = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_AKAMA_SHADE)))
if (Creature* akama = instance->GetCreature(DATA_AKAMA_SHADE))
AttackStart(akama);
}
@@ -278,7 +278,7 @@ public:
{
DoCastSelf(SPELL_SHADE_OF_AKAMA_TRIGGER);
if (Creature* akama = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_AKAMA_SHADE)))
if (Creature* akama = instance->GetCreature(DATA_AKAMA_SHADE))
akama->AI()->DoAction(ACTION_SHADE_OF_AKAMA_DEAD);
for (ObjectGuid const& spawnerGuid : _spawners)
@@ -406,7 +406,7 @@ public:
_isInCombat = true;
me->SetWalk(false);
me->RemoveAurasDueToSpell(SPELL_AKAMA_SOUL_CHANNEL);
if (Creature* shade = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_SHADE_OF_AKAMA)))
if (Creature* shade = _instance->GetCreature(DATA_SHADE_OF_AKAMA))
{
shade->RemoveAurasDueToSpell(SPELL_AKAMA_SOUL_CHANNEL);
AttackStart(shade);
@@ -546,7 +546,7 @@ public:
{
_summons.DespawnAll();
Talk(SAY_DEAD);
if (Creature* shade = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_SHADE_OF_AKAMA)))
if (Creature* shade = _instance->GetCreature(DATA_SHADE_OF_AKAMA))
if (shade->IsAlive())
shade->AI()->EnterEvadeMode(EVADE_REASON_OTHER);
}
@@ -592,7 +592,7 @@ public:
{
_scheduler.Schedule(Seconds(2), [this](TaskContext channel)
{
if (Creature* shade = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_SHADE_OF_AKAMA)))
if (Creature* shade = _instance->GetCreature(DATA_SHADE_OF_AKAMA))
{
if (shade->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
DoCastSelf(SPELL_SHADE_SOUL_CHANNEL);
@@ -741,16 +741,13 @@ public:
void Reset() override
{
if (Creature* shade = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_SHADE_OF_AKAMA)))
if (Creature* shade = _instance->GetCreature(DATA_SHADE_OF_AKAMA))
{
if (shade->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
me->GetMotionMaster()->MovePoint(0, shade->GetPosition());
else
{
if (Creature* akama = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_AKAMA_SHADE)))
AttackStart(akama);
}
else if (Creature* akama = _instance->GetCreature(DATA_AKAMA_SHADE))
AttackStart(akama);
}
Initialize();
}
@@ -782,7 +779,7 @@ public:
_scheduler.Schedule(Seconds(1) + Milliseconds(500), [this](TaskContext sorcer_channel)
{
if (Creature* shade = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_SHADE_OF_AKAMA)))
if (Creature* shade = _instance->GetCreature(DATA_SHADE_OF_AKAMA))
{
if (shade->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
{
@@ -794,7 +791,7 @@ public:
{
me->InterruptSpell(CURRENT_CHANNELED_SPELL);
_switchToCombat = true;
if (Creature* akama = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_AKAMA_SHADE)))
if (Creature* akama = _instance->GetCreature(DATA_AKAMA_SHADE))
AttackStart(akama);
}
}
@@ -842,7 +839,7 @@ public:
void Reset() override
{
if (Creature* akama = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_AKAMA_SHADE)))
if (Creature* akama = _instance->GetCreature(DATA_AKAMA_SHADE))
AttackStart(akama);
}
@@ -920,7 +917,7 @@ public:
void Reset() override
{
if (Creature* akama = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_AKAMA_SHADE)))
if (Creature* akama = _instance->GetCreature(DATA_AKAMA_SHADE))
AttackStart(akama);
}
@@ -989,7 +986,7 @@ public:
void Reset() override
{
if (Creature* akama = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_AKAMA_SHADE)))
if (Creature* akama = _instance->GetCreature(DATA_AKAMA_SHADE))
AttackStart(akama);
}
@@ -1067,7 +1064,7 @@ public:
{
Initialize();
if (Creature* akama = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_AKAMA_SHADE)))
if (Creature* akama = _instance->GetCreature(DATA_AKAMA_SHADE))
AttackStart(akama);
}
@@ -1162,7 +1159,7 @@ public:
if (motionType != POINT_MOTION_TYPE)
return;
if (Creature* akama = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_AKAMA_SHADE)))
if (Creature* akama = _instance->GetCreature(DATA_AKAMA_SHADE))
me->SetFacingToObject(akama);
}

View File

@@ -26,17 +26,20 @@
DoorData const doorData[] =
{
{ GO_NAJENTUS_GATE, DATA_HIGH_WARLORD_NAJENTUS, DOOR_TYPE_PASSAGE },
{ GO_NAJENTUS_GATE, DATA_SUPREMUS, DOOR_TYPE_ROOM },
{ GO_NAJENTUS_GATE, DATA_SUPREMUS, DOOR_TYPE_ROOM },
{ GO_SUPREMUS_GATE, DATA_SUPREMUS, DOOR_TYPE_PASSAGE },
{ GO_SHADE_OF_AKAMA_DOOR, DATA_SHADE_OF_AKAMA, DOOR_TYPE_ROOM },
{ GO_TERON_DOOR_1, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM },
{ GO_TERON_DOOR_2, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM },
{ GO_SHADE_OF_AKAMA_DOOR, DATA_SHADE_OF_AKAMA, DOOR_TYPE_ROOM },
{ 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 },
{ 0, 0, DOOR_TYPE_ROOM } // END
{ 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
};
BossBoundaryData const boundaries =
@@ -53,6 +56,27 @@ BossBoundaryData const boundaries =
{ DATA_ILLIDAN_STORMRAGE, new EllipseBoundary(Position(694.8f, 309.0f), 70.0 , 85.0) }
};
ObjectData const creatureData[] =
{
{ NPC_HIGH_WARLORD_NAJENTUS, DATA_HIGH_WARLORD_NAJENTUS },
{ NPC_SUPREMUS, DATA_SUPREMUS },
{ NPC_SHADE_OF_AKAMA, DATA_SHADE_OF_AKAMA },
{ NPC_TERON_GOREFIEND, DATA_TERON_GOREFIEND },
{ NPC_GURTOGG_BLOODBOIL, DATA_GURTOGG_BLOODBOIL },
{ NPC_RELIQUARY_OF_SOULS, DATA_RELIQUARY_OF_SOULS },
{ NPC_MOTHER_SHAHRAZ, DATA_MOTHER_SHAHRAZ },
{ NPC_ILLIDARI_COUNCIL, DATA_ILLIDARI_COUNCIL },
{ NPC_ILLIDAN_STORMRAGE, DATA_ILLIDAN_STORMRAGE },
{ NPC_AKAMA_SHADE, DATA_AKAMA_SHADE },
{ NPC_AKAMA, DATA_AKAMA },
{ NPC_GATHIOS_THE_SHATTERER, DATA_GATHIOS_THE_SHATTERER },
{ NPC_HIGH_NETHERMANCER_ZEREVOR, DATA_HIGH_NETHERMANCER_ZEREVOR },
{ NPC_LADY_MALANDE, DATA_LADY_MALANDE },
{ NPC_VERAS_DARKSHADOW, DATA_VERAS_DARKSHADOW },
{ NPC_BLOOD_ELF_COUNCIL_VOICE, DATA_BLOOD_ELF_COUNCIL_VOICE },
{ 0, 0 } // end
};
class instance_black_temple : public InstanceMapScript
{
public:
@@ -65,165 +89,28 @@ class instance_black_temple : public InstanceMapScript
SetHeaders(DataHeader);
SetBossNumber(EncounterCount);
LoadDoorData(doorData);
LoadObjectData(creatureData, nullptr);
LoadBossBoundaries(boundaries);
}
void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
case NPC_HIGH_WARLORD_NAJENTUS:
NajentusGUID = creature->GetGUID();
break;
case NPC_SUPREMUS:
SupremusGUID = creature->GetGUID();
break;
case NPC_SHADE_OF_AKAMA:
ShadeOfAkamaGUID = creature->GetGUID();
break;
case NPC_AKAMA_SHADE:
AkamaShadeGUID = creature->GetGUID();
break;
case NPC_AKAMA:
AkamaGUID = creature->GetGUID();
break;
case NPC_GATHIOS_THE_SHATTERER:
GathiosTheShattererGUID = creature->GetGUID();
break;
case NPC_HIGH_NETHERMANCER_ZEREVOR:
HighNethermancerZerevorGUID = creature->GetGUID();
break;
case NPC_LADY_MALANDE:
LadyMalandeGUID = creature->GetGUID();
break;
case NPC_VERAS_DARKSHADOW:
VerasDarkshadowGUID = creature->GetGUID();
break;
case NPC_ILLIDARI_COUNCIL:
IllidariCouncilGUID = creature->GetGUID();
break;
case NPC_BLOOD_ELF_COUNCIL_VOICE:
BloodElfCouncilVoiceGUID = creature->GetGUID();
break;
case NPC_ILLIDAN_STORMRAGE:
IllidanStormrageGUID = creature->GetGUID();
break;
default:
break;
}
}
void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
{
case GO_NAJENTUS_GATE:
case GO_SUPREMUS_GATE:
case GO_SHADE_OF_AKAMA_DOOR:
case GO_TERON_DOOR_1:
case GO_TERON_DOOR_2:
case GO_GURTOGG_DOOR:
case GO_TEMPLE_DOOR:
case GO_MOTHER_SHAHRAZ_DOOR:
case GO_COUNCIL_DOOR_1:
case GO_COUNCIL_DOOR_2:
AddDoor(go, true);
break;
case GO_ILLIDAN_GATE:
IllidanGateGUID = go->GetGUID();
break;
case GO_ILLIDAN_DOOR_R:
IllidanDoorGUIDs[0] = go->GetGUID();
break;
case GO_ILLIDAN_DOOR_L:
IllidanDoorGUIDs[1] = go->GetGUID();
break;
default:
break;
}
}
if (go->GetEntry() == GO_ILLIDAN_GATE)
IllidanGateGUID = go->GetGUID();
void OnGameObjectRemove(GameObject* go) override
{
switch (go->GetEntry())
{
case GO_NAJENTUS_GATE:
case GO_SUPREMUS_GATE:
case GO_SHADE_OF_AKAMA_DOOR:
case GO_TERON_DOOR_1:
case GO_TERON_DOOR_2:
case GO_GURTOGG_DOOR:
case GO_TEMPLE_DOOR:
case GO_MOTHER_SHAHRAZ_DOOR:
case GO_COUNCIL_DOOR_1:
case GO_COUNCIL_DOOR_2:
AddDoor(go, false);
break;
default:
break;
}
InstanceScript::OnGameObjectCreate(go);
}
ObjectGuid GetGuidData(uint32 type) const override
{
switch (type)
{
case DATA_HIGH_WARLORD_NAJENTUS:
return NajentusGUID;
case DATA_SUPREMUS:
return SupremusGUID;
case DATA_SHADE_OF_AKAMA:
return ShadeOfAkamaGUID;
case DATA_AKAMA_SHADE:
return AkamaShadeGUID;
case DATA_AKAMA:
return AkamaGUID;
case DATA_GATHIOS_THE_SHATTERER:
return GathiosTheShattererGUID;
case DATA_HIGH_NETHERMANCER_ZEREVOR:
return HighNethermancerZerevorGUID;
case DATA_LADY_MALANDE:
return LadyMalandeGUID;
case DATA_VERAS_DARKSHADOW:
return VerasDarkshadowGUID;
case DATA_ILLIDARI_COUNCIL:
return IllidariCouncilGUID;
case DATA_BLOOD_ELF_COUNCIL_VOICE:
return BloodElfCouncilVoiceGUID;
case DATA_ILLIDAN_STORMRAGE:
return IllidanStormrageGUID;
case DATA_GO_ILLIDAN_GATE:
return IllidanGateGUID;
case DATA_GO_ILLIDAN_DOOR_R:
return IllidanDoorGUIDs[0];
case DATA_GO_ILLIDAN_DOOR_L:
return IllidanDoorGUIDs[1];
default:
break;
}
if (type == DATA_GO_ILLIDAN_GATE)
return IllidanGateGUID;
return ObjectGuid::Empty;
return InstanceScript::GetGuidData(type);
}
protected:
ObjectGuid NajentusGUID;
ObjectGuid SupremusGUID;
ObjectGuid ShadeOfAkamaGUID;
ObjectGuid AkamaShadeGUID;
ObjectGuid AkamaGUID;
ObjectGuid GathiosTheShattererGUID;
ObjectGuid HighNethermancerZerevorGUID;
ObjectGuid LadyMalandeGUID;
ObjectGuid VerasDarkshadowGUID;
ObjectGuid IllidariCouncilGUID;
ObjectGuid BloodElfCouncilVoiceGUID;
ObjectGuid IllidanStormrageGUID;
ObjectGuid IllidanGateGUID;
ObjectGuid IllidanDoorGUIDs[2];
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override