aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Outland/BlackTemple/black_temple.h100
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp6
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_illidan.cpp22
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp6
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp14
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp18
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_supremus.cpp16
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp6
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp8
-rw-r--r--src/server/scripts/Outland/BlackTemple/illidari_council.cpp47
-rw-r--r--src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp544
11 files changed, 350 insertions, 437 deletions
diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.h b/src/server/scripts/Outland/BlackTemple/black_temple.h
index 971cc36d7ba..1d3c3c3edd6 100644
--- a/src/server/scripts/Outland/BlackTemple/black_temple.h
+++ b/src/server/scripts/Outland/BlackTemple/black_temple.h
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -19,36 +18,81 @@
#ifndef BLACK_TEMPLE_H_
#define BLACK_TEMPLE_H_
+#define BTScriptName "instance_black_temple"
+
uint32 const EncounterCount = 9;
enum DataTypes
{
- DATA_AKAMA = 1,
- DATA_AKAMA_SHADE = 2,
- DATA_GURTOGGBLOODBOILEVENT = 3,
- DATA_HIGHWARLORDNAJENTUS = 4,
- DATA_HIGHWARLORDNAJENTUSEVENT = 5,
- DATA_ILLIDANSTORMRAGE = 6,
- DATA_ILLIDANSTORMRAGEEVENT = 7,
- DATA_ILLIDARICOUNCILEVENT = 8,
- DATA_ILLIDARICOUNCIL = 9,
- DATA_LADYMALANDE = 10,
- DATA_HIGHNETHERMANCERZEREVOR = 11,
- DATA_GATHIOSTHESHATTERER = 12,
- DATA_VERASDARKSHADOW = 13,
- DATA_MOTHERSHAHRAZEVENT = 14,
- DATA_RELIQUARYOFSOULSEVENT = 15,
- DATA_SHADEOFAKAMA = 16,
- DATA_SHADEOFAKAMAEVENT = 17,
- DATA_SUPREMUS = 18,
- DATA_SUPREMUSEVENT = 19,
- DATA_TERONGOREFIENDEVENT = 20,
- DATA_GAMEOBJECT_NAJENTUS_GATE = 21,
- DATA_GAMEOBJECT_ILLIDAN_GATE = 22,
- DATA_GAMEOBJECT_ILLIDAN_DOOR_R = 23,
- DATA_GAMEOBJECT_ILLIDAN_DOOR_L = 24,
- DATA_GAMEOBJECT_SUPREMUS_DOORS = 25,
- DATA_BLOOD_ELF_COUNCIL_VOICE = 26
+ // Encounter States/Boss GUIDs
+ DATA_HIGH_WARLORD_NAJENTUS = 0,
+ DATA_SUPREMUS = 1,
+ DATA_SHADE_OF_AKAMA = 2,
+ DATA_TERON_GOREFIEND = 3,
+ DATA_GURTOGG_BLOODBOIL = 4,
+ DATA_RELIQUARY_OF_SOULS = 5,
+ DATA_MOTHER_SHAHRAZ = 6,
+ DATA_ILLIDARI_COUNCIL = 7,
+ DATA_ILLIDAN_STORMRAGE = 8,
+
+ // Additional Data
+ DATA_AKAMA_SHADE = 9,
+ DATA_AKAMA = 10,
+
+ DATA_GATHIOS_THE_SHATTERER = 11,
+ DATA_HIGH_NETHERMANCER_ZEREVOR = 12,
+ DATA_LADY_MALANDE = 13,
+ DATA_VERAS_DARKSHADOW = 14,
+ DATA_BLOOD_ELF_COUNCIL_VOICE = 15,
+
+ DATA_GO_ILLIDAN_GATE = 16,
+ DATA_GO_ILLIDAN_DOOR_R = 17,
+ DATA_GO_ILLIDAN_DOOR_L = 18
+};
+
+enum CreatureIds
+{
+ 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_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
};
-#endif
+enum GameObjectIds
+{
+ GO_NAJENTUS_GATE = 185483,
+ GO_SUPREMUS_GATE = 185882,
+ GO_SHADE_OF_AKAMA_DOOR = 185478,
+ GO_TERON_DOOR_1 = 185480,
+ GO_TERON_DOOR_2 = 186153,
+ GO_GURTOGG_DOOR = 185892,
+ GO_TEMPLE_DOOR = 185479,
+ GO_MOTHER_SHAHRAZ_DOOR = 185482,
+ GO_COUNCIL_DOOR_1 = 185481,
+ GO_COUNCIL_DOOR_2 = 186152,
+ GO_ILLIDAN_GATE = 185905,
+ GO_ILLIDAN_DOOR_R = 186261,
+ GO_ILLIDAN_DOOR_L = 186262
+};
+
+template<class AI>
+AI* GetBlackTempleAI(Creature* creature)
+{
+ if (InstanceMap* instance = creature->GetMap()->ToInstanceMap())
+ if (instance->GetInstanceScript())
+ if (instance->GetScriptId() == sObjectMgr->GetScriptId(BTScriptName))
+ return new AI(creature);
+ return NULL;
+}
+
+#endif // BLACK_TEMPLE_H_
diff --git a/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp b/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp
index 7a11044476a..3a33885144d 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp
@@ -96,7 +96,7 @@ public:
void Reset() OVERRIDE
{
if (instance)
- instance->SetData(DATA_GURTOGGBLOODBOILEVENT, NOT_STARTED);
+ instance->SetBossState(DATA_GURTOGG_BLOODBOIL, NOT_STARTED);
TargetGUID = 0;
@@ -124,7 +124,7 @@ public:
DoZoneInCombat();
Talk(SAY_AGGRO);
if (instance)
- instance->SetData(DATA_GURTOGGBLOODBOILEVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_GURTOGG_BLOODBOIL, IN_PROGRESS);
}
void KilledUnit(Unit* /*victim*/) OVERRIDE
@@ -135,7 +135,7 @@ public:
void JustDied(Unit* /*killer*/) OVERRIDE
{
if (instance)
- instance->SetData(DATA_GURTOGGBLOODBOILEVENT, DONE);
+ instance->SetBossState(DATA_GURTOGG_BLOODBOIL, DONE);
Talk(SAY_DEATH);
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
index f8f9bb790e0..3ab78d14019 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
@@ -543,9 +543,9 @@ public:
if (!instance)
return;
- instance->SetData(DATA_ILLIDANSTORMRAGEEVENT, DONE); // Completed
+ instance->SetBossState(DATA_ILLIDAN_STORMRAGE, DONE);
- for (uint8 i = DATA_GAMEOBJECT_ILLIDAN_DOOR_R; i < DATA_GAMEOBJECT_ILLIDAN_DOOR_L + 1; ++i)
+ for (uint8 i = DATA_GO_ILLIDAN_DOOR_R; i < DATA_GO_ILLIDAN_DOOR_L + 1; ++i)
instance->HandleGameObject(instance->GetData64(i), true);
}
@@ -1369,12 +1369,12 @@ public:
WalkCount = 0;
if (instance)
{
- instance->SetData(DATA_ILLIDANSTORMRAGEEVENT, NOT_STARTED);
+ instance->SetBossState(DATA_ILLIDAN_STORMRAGE, NOT_STARTED);
- IllidanGUID = instance->GetData64(DATA_ILLIDANSTORMRAGE);
- GateGUID = instance->GetData64(DATA_GAMEOBJECT_ILLIDAN_GATE);
- DoorGUID[0] = instance->GetData64(DATA_GAMEOBJECT_ILLIDAN_DOOR_R);
- DoorGUID[1] = instance->GetData64(DATA_GAMEOBJECT_ILLIDAN_DOOR_L);
+ IllidanGUID = instance->GetData64(DATA_ILLIDAN_STORMRAGE);
+ GateGUID = instance->GetData64(DATA_GO_ILLIDAN_GATE);
+ DoorGUID[0] = instance->GetData64(DATA_GO_ILLIDAN_DOOR_R);
+ DoorGUID[1] = instance->GetData64(DATA_GO_ILLIDAN_DOOR_L);
if (JustCreated) // close all doors at create
{
@@ -1463,7 +1463,7 @@ public:
if (!instance)
return;
- instance->SetData(DATA_ILLIDANSTORMRAGEEVENT, IN_PROGRESS);
+ 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))
@@ -1691,7 +1691,7 @@ public:
{
if (Check_Timer <= diff)
{
- if (instance && instance->GetData(DATA_ILLIDARICOUNCILEVENT) == DONE)
+ if (instance && instance->GetBossState(DATA_ILLIDARI_COUNCIL) == DONE)
me->SetVisible(true);
Check_Timer = 5000;
@@ -1800,7 +1800,7 @@ public:
void boss_illidan_stormrage::boss_illidan_stormrageAI::Reset()
{
if (instance)
- instance->SetData(DATA_ILLIDANSTORMRAGEEVENT, NOT_STARTED);
+ instance->SetBossState(DATA_ILLIDAN_STORMRAGE, NOT_STARTED);
if (AkamaGUID)
{
@@ -2164,7 +2164,7 @@ public:
void Reset() OVERRIDE
{
if (instance)
- IllidanGUID = instance->GetData64(DATA_ILLIDANSTORMRAGE);
+ IllidanGUID = instance->GetData64(DATA_ILLIDAN_STORMRAGE);
else
IllidanGUID = 0;
diff --git a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
index b9172be49da..aafe5f365b2 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp
@@ -114,7 +114,7 @@ public:
void Reset() OVERRIDE
{
if (instance)
- instance->SetData(DATA_MOTHERSHAHRAZEVENT, NOT_STARTED);
+ instance->SetBossState(DATA_MOTHER_SHAHRAZ, NOT_STARTED);
for (uint8 i = 0; i<3; ++i)
TargetGUID[i] = 0;
@@ -137,7 +137,7 @@ public:
void EnterCombat(Unit* /*who*/) OVERRIDE
{
if (instance)
- instance->SetData(DATA_MOTHERSHAHRAZEVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_MOTHER_SHAHRAZ, IN_PROGRESS);
DoZoneInCombat();
Talk(SAY_AGGRO);
@@ -151,7 +151,7 @@ public:
void JustDied(Unit* /*killer*/) OVERRIDE
{
if (instance)
- instance->SetData(DATA_MOTHERSHAHRAZEVENT, DONE);
+ instance->SetBossState(DATA_MOTHER_SHAHRAZ, DONE);
Talk(SAY_DEATH);
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
index c7de0dea961..ab3bc98b41b 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
@@ -159,14 +159,13 @@ public:
void Reset() OVERRIDE
{
if (instance)
- instance->SetData(DATA_RELIQUARYOFSOULSEVENT, NOT_STARTED);
+ instance->SetBossState(DATA_RELIQUARY_OF_SOULS, NOT_STARTED);
if (EssenceGUID)
{
- if (Creature* Essence = Unit::GetCreature(*me, EssenceGUID))
- {
- Essence->DespawnOrUnsummon();
- }
+ if (Creature* essence = ObjectAccessor::GetCreature(*me, EssenceGUID))
+ essence->DespawnOrUnsummon();
+
EssenceGUID = 0;
}
@@ -178,7 +177,6 @@ public:
}
void MoveInLineOfSight(Unit* who) OVERRIDE
-
{
if (!who)
return;
@@ -200,7 +198,7 @@ public:
me->AddThreat(who, 10000.0f);
DoZoneInCombat();
if (instance)
- instance->SetData(DATA_RELIQUARYOFSOULSEVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_RELIQUARY_OF_SOULS, IN_PROGRESS);
Phase = 1;
Counter = 0;
@@ -246,7 +244,7 @@ public:
void JustDied(Unit* /*killer*/) OVERRIDE
{
if (instance)
- instance->SetData(DATA_RELIQUARYOFSOULSEVENT, DONE);
+ instance->SetBossState(DATA_RELIQUARY_OF_SOULS, DONE);
}
void UpdateAI(uint32 diff) OVERRIDE
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 4a4304bcd24..664b0f6d963 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp
@@ -200,7 +200,7 @@ public:
void JustDied(Unit* /*killer*/) OVERRIDE
{
if (instance)
- instance->SetData(DATA_SHADEOFAKAMAEVENT, DONE);
+ instance->SetBossState(DATA_SHADE_OF_AKAMA, DONE);
}
void EnterCombat(Unit* /*who*/) OVERRIDE {}
@@ -343,7 +343,7 @@ public:
{
HasKilledAkamaAndReseting = true;
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- instance->SetData(DATA_SHADEOFAKAMAEVENT, NOT_STARTED);
+ instance->SetBossState(DATA_SHADE_OF_AKAMA, NOT_STARTED);
me->RemoveAllAurasExceptType(SPELL_AURA_DUMMY);
me->DeleteThreatList();
me->CombatStop();
@@ -351,15 +351,15 @@ public:
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
combatStarted = false;
- if (Creature* Akama = Unit::GetCreature((*me), akamaGUID))
+ if (Creature* Akama = ObjectAccessor::GetCreature(*me, akamaGUID))
Akama->DespawnOrUnsummon();
for (std::list<uint64>::const_iterator itr = Channelers.begin(); itr != Channelers.end(); ++itr)
- if (Creature* Channeler = (Unit::GetCreature(*me, *itr)))
+ if (Creature* Channeler = ObjectAccessor::GetCreature(*me, *itr))
Channeler->DespawnOrUnsummon();
for (std::list<uint64>::const_iterator itr = Spawners.begin(); itr != Spawners.end(); ++itr)
- if (Creature* Spawner = (Unit::GetCreature(*me, *itr)))
+ if (Creature* Spawner = ObjectAccessor::GetCreature(*me, *itr))
Spawner->AI()->SetData(SETDATA_DATA, SETDATA_DESPAWN_ALL_SPAWNS);
events.ScheduleEvent(EVENT_FIND_CHANNELERS_SPAWNERS, 10000);
@@ -485,8 +485,8 @@ public:
case EVENT_SHADE_START:
if (instance)
{
- ShadeGUID = instance->GetData64(DATA_SHADEOFAKAMA);
- instance->SetData(DATA_SHADEOFAKAMAEVENT, IN_PROGRESS);
+ ShadeGUID = instance->GetData64(DATA_SHADE_OF_AKAMA);
+ instance->SetBossState(DATA_SHADE_OF_AKAMA, IN_PROGRESS);
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
me->RemoveAura(SPELL_STEALTH);
me->SetWalk(true);
@@ -622,7 +622,7 @@ public:
break;
case EVENT_GET_SHADE_GUID:
if (instance)
- ShadeGUID = instance->GetData64(DATA_SHADEOFAKAMA);
+ ShadeGUID = instance->GetData64(DATA_SHADE_OF_AKAMA);
break;
default:
break;
@@ -768,7 +768,7 @@ public:
if (instance)
{
akamaGUID = instance->GetData64(DATA_AKAMA_SHADE);
- shadeGUID = instance->GetData64(DATA_SHADEOFAKAMA);
+ shadeGUID = instance->GetData64(DATA_SHADE_OF_AKAMA);
}
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
index fbc3e387e8e..94423f87bdf 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
@@ -31,7 +31,7 @@ EndScriptData */
enum Supremus
{
EMOTE_NEW_TARGET = 0,
- EMOTE_PUNCH_GROUND = 1, //Talk(EMOTE_PUNCH_GROUND);
+ EMOTE_PUNCH_GROUND = 1,
EMOTE_GROUND_CRACK = 2,
//Spells
@@ -110,11 +110,7 @@ public:
if (instance)
{
if (me->IsAlive())
- {
- instance->SetData(DATA_SUPREMUSEVENT, NOT_STARTED);
- //ToggleDoors(true);
- }
- //else ToggleDoors(false);
+ instance->SetBossState(DATA_SUPREMUS, NOT_STARTED);
}
phase = 0;
@@ -126,7 +122,7 @@ public:
void EnterCombat(Unit* /*who*/) OVERRIDE
{
if (instance)
- instance->SetData(DATA_SUPREMUSEVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_SUPREMUS, IN_PROGRESS);
ChangePhase();
events.ScheduleEvent(EVENT_BERSERK, 900000, GCD_CAST);
@@ -163,10 +159,8 @@ public:
void JustDied(Unit* /*killer*/) OVERRIDE
{
if (instance)
- {
- instance->SetData(DATA_SUPREMUSEVENT, DONE);
- instance->HandleGameObject(instance->GetData64(DATA_GAMEOBJECT_SUPREMUS_DOORS), true);
- }
+ instance->SetBossState(DATA_SUPREMUS, DONE);
+
summons.DespawnAll();
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
index a861980ae42..c02954c7b2f 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
@@ -247,7 +247,7 @@ public:
void Reset() OVERRIDE
{
if (instance)
- instance->SetData(DATA_TERONGOREFIENDEVENT, NOT_STARTED);
+ instance->SetBossState(DATA_TERON_GOREFIEND, NOT_STARTED);
IncinerateTimer = urand(20000, 31000);
SummonDoomBlossomTimer = 12000;
@@ -276,7 +276,7 @@ public:
if (me->IsWithinDistInMap(who, VISIBLE_RANGE) && me->IsWithinLOSInMap(who))
{
if (instance)
- instance->SetData(DATA_TERONGOREFIENDEVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_TERON_GOREFIEND, IN_PROGRESS);
me->GetMotionMaster()->Clear(false);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -298,7 +298,7 @@ public:
void JustDied(Unit* /*killer*/) OVERRIDE
{
if (instance)
- instance->SetData(DATA_TERONGOREFIENDEVENT, DONE);
+ instance->SetBossState(DATA_TERON_GOREFIEND, DONE);
Talk(SAY_DEATH);
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
index 532c66bb14a..1f4a36afad6 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
@@ -100,7 +100,7 @@ public:
SpineTargetGUID = 0;
if (instance)
- instance->SetData(DATA_HIGHWARLORDNAJENTUSEVENT, NOT_STARTED);
+ instance->SetBossState(DATA_HIGH_WARLORD_NAJENTUS, NOT_STARTED);
}
void KilledUnit(Unit* /*victim*/) OVERRIDE
@@ -112,7 +112,7 @@ public:
void JustDied(Unit* /*killer*/) OVERRIDE
{
if (instance)
- instance->SetData(DATA_HIGHWARLORDNAJENTUSEVENT, DONE);
+ instance->SetBossState(DATA_HIGH_WARLORD_NAJENTUS, DONE);
Talk(SAY_DEATH);
}
@@ -130,7 +130,7 @@ public:
void EnterCombat(Unit* /*who*/) OVERRIDE
{
if (instance)
- instance->SetData(DATA_HIGHWARLORDNAJENTUSEVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_HIGH_WARLORD_NAJENTUS, IN_PROGRESS);
Talk(SAY_AGGRO);
DoZoneInCombat();
@@ -228,7 +228,7 @@ public:
bool OnGossipHello(Player* player, GameObject* go) OVERRIDE
{
if (InstanceScript* instance = go->GetInstanceScript())
- if (Creature* Najentus = Unit::GetCreature(*go, instance->GetData64(DATA_HIGHWARLORDNAJENTUS)))
+ if (Creature* Najentus = ObjectAccessor::GetCreature(*go, instance->GetData64(DATA_HIGH_WARLORD_NAJENTUS)))
if (CAST_AI(boss_najentus::boss_najentusAI, Najentus->AI())->RemoveImpalingSpine())
{
player->CastSpell(player, SPELL_CREATE_NAJENTUS_SPINE, true);
diff --git a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp
index 290641437f3..05d19eb62bf 100644
--- a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp
+++ b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp
@@ -157,10 +157,10 @@ public:
{
if (InstanceScript* instance = me->GetInstanceScript())
{
- Council[0] = instance->GetData64(DATA_GATHIOSTHESHATTERER);
- Council[1] = instance->GetData64(DATA_VERASDARKSHADOW);
- Council[2] = instance->GetData64(DATA_LADYMALANDE);
- Council[3] = instance->GetData64(DATA_HIGHNETHERMANCERZEREVOR);
+ Council[0] = instance->GetData64(DATA_GATHIOS_THE_SHATTERER);
+ Council[1] = instance->GetData64(DATA_VERAS_DARKSHADOW);
+ Council[2] = instance->GetData64(DATA_LADY_MALANDE);
+ Council[3] = instance->GetData64(DATA_HIGH_NETHERMANCER_ZEREVOR);
} else TC_LOG_ERROR(LOG_FILTER_TSCR, ERROR_INST_DATA);
}
@@ -265,8 +265,8 @@ public:
if (instance)
{
- instance->SetData(DATA_ILLIDARICOUNCILEVENT, NOT_STARTED);
- if (Creature* VoiceTrigger = (Unit::GetCreature(*me, instance->GetData64(DATA_BLOOD_ELF_COUNCIL_VOICE))))
+ instance->SetBossState(DATA_ILLIDARI_COUNCIL, NOT_STARTED);
+ if (Creature* VoiceTrigger = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BLOOD_ELF_COUNCIL_VOICE)))
VoiceTrigger->AI()->EnterEvadeMode();
}
@@ -289,13 +289,13 @@ public:
if (target && target->IsAlive())
{
- Council[0] = instance->GetData64(DATA_GATHIOSTHESHATTERER);
- Council[1] = instance->GetData64(DATA_HIGHNETHERMANCERZEREVOR);
- Council[2] = instance->GetData64(DATA_LADYMALANDE);
- Council[3] = instance->GetData64(DATA_VERASDARKSHADOW);
+ Council[0] = instance->GetData64(DATA_GATHIOS_THE_SHATTERER);
+ Council[1] = instance->GetData64(DATA_HIGH_NETHERMANCER_ZEREVOR);
+ Council[2] = instance->GetData64(DATA_LADY_MALANDE);
+ Council[3] = instance->GetData64(DATA_VERAS_DARKSHADOW);
// Start the event for the Voice Trigger
- if (Creature* VoiceTrigger = (Unit::GetCreature(*me, instance->GetData64(DATA_BLOOD_ELF_COUNCIL_VOICE))))
+ if (Creature* VoiceTrigger = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BLOOD_ELF_COUNCIL_VOICE)))
{
CAST_AI(npc_blood_elf_council_voice_trigger::npc_blood_elf_council_voice_triggerAI, VoiceTrigger->AI())->LoadCouncilGUIDs();
CAST_AI(npc_blood_elf_council_voice_trigger::npc_blood_elf_council_voice_triggerAI, VoiceTrigger->AI())->EventStarted = true;
@@ -305,13 +305,13 @@ public:
{
if (Council[i])
{
- Unit* member = Unit::GetUnit(*me, Council[i]);
- if (member && member->IsAlive())
- member->ToCreature()->AI()->AttackStart(target);
+ if (Creature* member = ObjectAccessor::GetCreature(*me, Council[i]))
+ if (member->IsAlive())
+ member->AI()->AttackStart(target);
}
}
- instance->SetData(DATA_ILLIDARICOUNCILEVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_ILLIDARI_COUNCIL, IN_PROGRESS);
EventBegun = true;
}
@@ -330,9 +330,9 @@ public:
{
if (instance)
{
- if (Creature* VoiceTrigger = (Unit::GetCreature(*me, instance->GetData64(DATA_BLOOD_ELF_COUNCIL_VOICE))))
+ if (Creature* VoiceTrigger = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BLOOD_ELF_COUNCIL_VOICE)))
VoiceTrigger->DealDamage(VoiceTrigger, VoiceTrigger->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
- instance->SetData(DATA_ILLIDARICOUNCILEVENT, DONE);
+ instance->SetBossState(DATA_ILLIDARI_COUNCIL, DONE);
//me->SummonCreature(AKAMAID, 746.466980f, 304.394989f, 311.90208f, 6.272870f, TEMPSUMMON_DEAD_DESPAWN, 0);
}
me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
@@ -403,9 +403,8 @@ struct boss_illidari_councilAI : public ScriptedAI
{
if (instance)
{
- Creature* Controller = (Unit::GetCreature(*me, instance->GetData64(DATA_ILLIDARICOUNCIL)));
- if (Controller)
- CAST_AI(npc_illidari_council::npc_illidari_councilAI, Controller->AI())->StartEvent(who);
+ if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ILLIDARI_COUNCIL)))
+ CAST_AI(npc_illidari_council::npc_illidari_councilAI, controller->AI())->StartEvent(who);
}
else
{
@@ -461,10 +460,10 @@ struct boss_illidari_councilAI : public ScriptedAI
return;
}
- Council[0] = instance->GetData64(DATA_LADYMALANDE);
- Council[1] = instance->GetData64(DATA_HIGHNETHERMANCERZEREVOR);
- Council[2] = instance->GetData64(DATA_GATHIOSTHESHATTERER);
- Council[3] = instance->GetData64(DATA_VERASDARKSHADOW);
+ Council[0] = instance->GetData64(DATA_LADY_MALANDE);
+ Council[1] = instance->GetData64(DATA_HIGH_NETHERMANCER_ZEREVOR);
+ Council[2] = instance->GetData64(DATA_GATHIOS_THE_SHATTERER);
+ Council[3] = instance->GetData64(DATA_VERAS_DARKSHADOW);
LoadedGUIDs = true;
}
diff --git a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
index bd70ce012ba..591f28a19f3 100644
--- a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
+++ b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -16,382 +15,261 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Instance_Black_Temple
-SD%Complete: 100
-SDComment: Instance Data Scripts and functions to acquire mobs and set encounter status for use in various Black Temple Scripts
-SDCategory: Black Temple
-EndScriptData */
-
#include "ScriptMgr.h"
#include "InstanceScript.h"
#include "black_temple.h"
-#include "Player.h"
-/* Black Temple encounters:
-0 - High Warlord Naj'entus event
-1 - Supremus Event
-2 - Shade of Akama Event
-3 - Teron Gorefiend Event
-4 - Gurtogg Bloodboil Event
-5 - Reliquary Of Souls Event
-6 - Mother Shahraz Event
-7 - Illidari Council Event
-8 - Illidan Stormrage Event
-*/
+DoorData const doorData[] =
+{
+ { GO_NAJENTUS_GATE, DATA_HIGH_WARLORD_NAJENTUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
+ { GO_NAJENTUS_GATE, DATA_SUPREMUS, DOOR_TYPE_ROOM, BOUNDARY_NONE },
+ { GO_SUPREMUS_GATE, DATA_SUPREMUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
+ { GO_SHADE_OF_AKAMA_DOOR, DATA_SHADE_OF_AKAMA, DOOR_TYPE_ROOM, BOUNDARY_NONE },
+ { GO_TERON_DOOR_1, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM, BOUNDARY_NONE },
+ { GO_TERON_DOOR_2, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM, BOUNDARY_NONE },
+ { GO_GURTOGG_DOOR, DATA_GURTOGG_BLOODBOIL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
+ { GO_TEMPLE_DOOR, DATA_RELIQUARY_OF_SOULS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
+ { GO_MOTHER_SHAHRAZ_DOOR, DATA_MOTHER_SHAHRAZ, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
+ { GO_COUNCIL_DOOR_1, DATA_ILLIDARI_COUNCIL, DOOR_TYPE_ROOM, BOUNDARY_NONE },
+ { GO_COUNCIL_DOOR_2, DATA_ILLIDARI_COUNCIL, DOOR_TYPE_ROOM, BOUNDARY_NONE },
+ { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
+};
class instance_black_temple : public InstanceMapScript
{
-public:
- instance_black_temple() : InstanceMapScript("instance_black_temple", 564) { }
-
- InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
- {
- return new instance_black_temple_InstanceMapScript(map);
- }
-
- struct instance_black_temple_InstanceMapScript : public InstanceScript
- {
- instance_black_temple_InstanceMapScript(Map* map) : InstanceScript(map) {}
-
- uint32 m_auiEncounter[EncounterCount];
- std::string str_data;
-
- uint64 Najentus;
- uint64 Akama; // This is the Akama that starts the Illidan encounter.
- uint64 Akama_Shade; // This is the Akama that starts the Shade of Akama encounter.
- uint64 ShadeOfAkama;
- uint64 Supremus;
- uint64 LadyMalande;
- uint64 GathiosTheShatterer;
- uint64 HighNethermancerZerevor;
- uint64 VerasDarkshadow;
- uint64 IllidariCouncil;
- uint64 BloodElfCouncilVoice;
- uint64 IllidanStormrage;
-
- uint64 NajentusGate;
- uint64 MainTempleDoors;
- uint64 ShadeOfAkamaDoor;
- uint64 CommonDoor;//Teron
- uint64 TeronDoor;
- uint64 GuurtogDoor;
- uint64 MotherDoor;
- uint64 TempleDoor;//Befor mother
- uint64 CouncilDoor;
- uint64 SimpleDoor;//council
- uint64 IllidanGate;
- uint64 IllidanDoor[2];
-
- void Initialize() OVERRIDE
- {
- memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
+ public:
+ instance_black_temple() : InstanceMapScript(BTScriptName, 564) { }
- Najentus = 0;
- Akama = 0;
- Akama_Shade = 0;
- ShadeOfAkama = 0;
- Supremus = 0;
- LadyMalande = 0;
- GathiosTheShatterer = 0;
- HighNethermancerZerevor = 0;
- VerasDarkshadow = 0;
- IllidariCouncil = 0;
- BloodElfCouncilVoice = 0;
- IllidanStormrage = 0;
-
- NajentusGate = 0;
- MainTempleDoors = 0;
- ShadeOfAkamaDoor = 0;
- CommonDoor = 0; // teron
- TeronDoor = 0;
- GuurtogDoor = 0;
- MotherDoor = 0;
- TempleDoor = 0;
- SimpleDoor = 0; // Bycouncil
- CouncilDoor = 0;
- IllidanGate = 0;
- IllidanDoor[0] = 0;
- IllidanDoor[1] = 0;
- }
-
- bool IsEncounterInProgress() const OVERRIDE
- {
- for (uint8 i = 0; i < EncounterCount; ++i)
- if (m_auiEncounter[i] == IN_PROGRESS)
- return true;
-
- return false;
- }
-
- Player* GetPlayerInMap()
+ struct instance_black_temple_InstanceMapScript : public InstanceScript
{
- Map::PlayerList const& players = instance->GetPlayers();
-
- if (!players.isEmpty())
+ instance_black_temple_InstanceMapScript(Map* map) : InstanceScript(map)
{
- for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
- {
- if (Player* player = itr->GetSource())
- return player;
- }
+ SetBossNumber(EncounterCount);
+ LoadDoorData(doorData);
+
+ NajentusGUID = 0;
+ SupremusGUID = 0;
+ ShadeOfAkamaGUID = 0;
+ AkamaShadeGUID = 0;
+ AkamaGUID = 0;
+ GathiosTheShattererGUID = 0;
+ HighNethermancerZerevorGUID = 0;
+ LadyMalandeGUID = 0;
+ VerasDarkshadowGUID = 0;
+ IllidariCouncilGUID = 0;
+ BloodElfCouncilVoiceGUID = 0;
+ IllidanStormrageGUID = 0;
+
+ IllidanGateGUID = 0;
+
+ memset(IllidanDoorGUIDs, 0, 2 * sizeof(uint64));
}
- TC_LOG_DEBUG(LOG_FILTER_TSCR, "Instance Black Temple: GetPlayerInMap, but PlayerList is empty!");
- return NULL;
- }
-
- void OnCreatureCreate(Creature* creature) OVERRIDE
- {
- switch (creature->GetEntry())
+ void OnCreatureCreate(Creature* creature) OVERRIDE
{
- case 22887: Najentus = creature->GetGUID(); break;
- case 23089: Akama = creature->GetGUID(); break;
- case 23191: Akama_Shade = creature->GetGUID(); break;
- case 22841: ShadeOfAkama = creature->GetGUID(); break;
- case 22898: Supremus = creature->GetGUID(); break;
- case 22917: IllidanStormrage = creature->GetGUID(); break;
- case 22949: GathiosTheShatterer = creature->GetGUID(); break;
- case 22950: HighNethermancerZerevor = creature->GetGUID(); break;
- case 22951: LadyMalande = creature->GetGUID(); break;
- case 22952: VerasDarkshadow = creature->GetGUID(); break;
- case 23426: IllidariCouncil = creature->GetGUID(); break;
- case 23499: BloodElfCouncilVoice = creature->GetGUID(); break;
+ 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())
+ void OnGameObjectCreate(GameObject* go) OVERRIDE
{
- case 185483:
- NajentusGate = go->GetGUID(); // Gate past Naj'entus (at the entrance to Supermoose's courtyards)
- if (m_auiEncounter[0] == DONE)
- HandleGameObject(0, true, go);
- break;
-
- case 185882:
- MainTempleDoors = go->GetGUID(); // Main Temple Doors - right past Supermoose (Supremus)
- if (m_auiEncounter[1] == DONE)
- HandleGameObject(0, true, go);
- break;
-
- case 185478:
- ShadeOfAkamaDoor = go->GetGUID();
- break;
-
- case 185480:
- CommonDoor = go->GetGUID();
- if (m_auiEncounter[3] == DONE)
- HandleGameObject(0, true, go);
- break;
-
- case 186153:
- TeronDoor = go->GetGUID();
- if (m_auiEncounter[3] == DONE)
- HandleGameObject(0, true, go);
- break;
-
- case 185892:
- GuurtogDoor = go->GetGUID();
- if (m_auiEncounter[4] == DONE)
- HandleGameObject(0, true, go);
- break;
-
- case 185479:
- TempleDoor = go->GetGUID();
- if (m_auiEncounter[5] == DONE)
- HandleGameObject(0, true, go);
- break;
-
- case 185482:
- MotherDoor = go->GetGUID();
- if (m_auiEncounter[6] == DONE)
- HandleGameObject(0, true, go);
- break;
-
- case 185481:
- CouncilDoor = go->GetGUID();
- if (m_auiEncounter[7] == DONE)
- HandleGameObject(0, true, go);
- break;
-
- case 186152:
- SimpleDoor = go->GetGUID();
- if (m_auiEncounter[7] == DONE)
- HandleGameObject(0, true, go);
- break;
-
- case 185905:
- IllidanGate = go->GetGUID(); // Gate leading to Temple Summit
- break;
-
- case 186261:
- IllidanDoor[0] = go->GetGUID(); // Right door at Temple Summit
- break;
-
- case 186262:
- IllidanDoor[1] = go->GetGUID(); // Left door at Temple Summit
- break;
+ 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;
+ }
}
- }
- uint64 GetData64(uint32 identifier) const OVERRIDE
- {
- switch (identifier)
+ void OnGameObjectRemove(GameObject* go) OVERRIDE
{
- case DATA_HIGHWARLORDNAJENTUS: return Najentus;
- case DATA_AKAMA: return Akama;
- case DATA_AKAMA_SHADE: return Akama_Shade;
- case DATA_SHADEOFAKAMA: return ShadeOfAkama;
- case DATA_SUPREMUS: return Supremus;
- case DATA_ILLIDANSTORMRAGE: return IllidanStormrage;
- case DATA_GATHIOSTHESHATTERER: return GathiosTheShatterer;
- case DATA_HIGHNETHERMANCERZEREVOR: return HighNethermancerZerevor;
- case DATA_LADYMALANDE: return LadyMalande;
- case DATA_VERASDARKSHADOW: return VerasDarkshadow;
- case DATA_ILLIDARICOUNCIL: return IllidariCouncil;
- case DATA_GAMEOBJECT_NAJENTUS_GATE: return NajentusGate;
- case DATA_GAMEOBJECT_ILLIDAN_GATE: return IllidanGate;
- case DATA_GAMEOBJECT_ILLIDAN_DOOR_R: return IllidanDoor[0];
- case DATA_GAMEOBJECT_ILLIDAN_DOOR_L: return IllidanDoor[1];
- case DATA_GAMEOBJECT_SUPREMUS_DOORS: return MainTempleDoors;
- case DATA_BLOOD_ELF_COUNCIL_VOICE: return BloodElfCouncilVoice;
+ 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;
+ }
}
- return 0;
- }
-
- void SetData(uint32 type, uint32 data) OVERRIDE
- {
- switch (type)
+ uint64 GetData64(uint32 type) const OVERRIDE
{
- case DATA_HIGHWARLORDNAJENTUSEVENT:
- if (data == DONE)
- HandleGameObject(NajentusGate, true);
- m_auiEncounter[0] = data;
- break;
- case DATA_SUPREMUSEVENT:
- if (data == DONE)
- HandleGameObject(NajentusGate, true);
- m_auiEncounter[1] = data;
- break;
- case DATA_SHADEOFAKAMAEVENT:
- if (data == IN_PROGRESS)
- HandleGameObject(ShadeOfAkamaDoor, false);
- else
- HandleGameObject(ShadeOfAkamaDoor, true);
- m_auiEncounter[2] = data;
- break;
- case DATA_TERONGOREFIENDEVENT:
- if (data == IN_PROGRESS)
+ switch (type)
{
- HandleGameObject(TeronDoor, false);
- HandleGameObject(CommonDoor, false);
+ 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;
}
- else
- {
- HandleGameObject(TeronDoor, true);
- HandleGameObject(CommonDoor, true);
- }
- m_auiEncounter[3] = data;
- break;
- case DATA_GURTOGGBLOODBOILEVENT:
- if (data == DONE)
- HandleGameObject(GuurtogDoor, true);
- m_auiEncounter[4] = data;
- break;
- case DATA_RELIQUARYOFSOULSEVENT:
- if (data == DONE)
- HandleGameObject(TempleDoor, true);
- m_auiEncounter[5] = data;
- break;
- case DATA_MOTHERSHAHRAZEVENT:
- if (data == DONE)
- HandleGameObject(MotherDoor, true);
- m_auiEncounter[6] = data;
- break;
- case DATA_ILLIDARICOUNCILEVENT:
- if (data == IN_PROGRESS)
- {
- HandleGameObject(CouncilDoor, false);
- HandleGameObject(SimpleDoor, false);
- }
- else
- {
- HandleGameObject(CouncilDoor, true);
- HandleGameObject(SimpleDoor, true);
- }
- m_auiEncounter[7] = data;
- break;
- case DATA_ILLIDANSTORMRAGEEVENT:
- m_auiEncounter[8] = data;
- break;
+
+ return 0;
}
- if (data == DONE)
+ std::string GetSaveData() OVERRIDE
{
OUT_SAVE_INST_DATA;
std::ostringstream saveStream;
- saveStream << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' '
- << m_auiEncounter[2] << ' ' << m_auiEncounter[3] << ' ' << m_auiEncounter[4]
- << ' ' << m_auiEncounter[5] << ' ' << m_auiEncounter[6] << ' ' << m_auiEncounter[7]
- << ' ' << m_auiEncounter[8];
-
- str_data = saveStream.str();
+ saveStream << "B T " << GetBossSaveData();
- SaveToDB();
OUT_SAVE_INST_DATA_COMPLETE;
+ return saveStream.str();
}
- }
- uint32 GetData(uint32 type) const OVERRIDE
- {
- switch (type)
+ void Load(char const* str) OVERRIDE
{
- case DATA_HIGHWARLORDNAJENTUSEVENT: return m_auiEncounter[0];
- case DATA_SUPREMUSEVENT: return m_auiEncounter[1];
- case DATA_SHADEOFAKAMAEVENT: return m_auiEncounter[2];
- case DATA_TERONGOREFIENDEVENT: return m_auiEncounter[3];
- case DATA_GURTOGGBLOODBOILEVENT: return m_auiEncounter[4];
- case DATA_RELIQUARYOFSOULSEVENT: return m_auiEncounter[5];
- case DATA_MOTHERSHAHRAZEVENT: return m_auiEncounter[6];
- case DATA_ILLIDARICOUNCILEVENT: return m_auiEncounter[7];
- case DATA_ILLIDANSTORMRAGEEVENT: return m_auiEncounter[8];
- }
+ if (!str)
+ {
+ OUT_LOAD_INST_DATA_FAIL;
+ return;
+ }
- return 0;
- }
+ OUT_LOAD_INST_DATA(str);
- std::string GetSaveData() OVERRIDE
- {
- return str_data;
- }
+ char dataHead1, dataHead2;
- void Load(const char* in) OVERRIDE
- {
- if (!in)
- {
- OUT_LOAD_INST_DATA_FAIL;
- return;
+ std::istringstream loadStream(str);
+ loadStream >> dataHead1 >> dataHead2;
+
+ if (dataHead1 == 'B' && dataHead2 == 'T')
+ {
+ for (uint32 i = 0; i < EncounterCount; ++i)
+ {
+ uint32 tmpState;
+ loadStream >> tmpState;
+ if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
+ tmpState = NOT_STARTED;
+ SetBossState(i, EncounterState(tmpState));
+ }
+ }
+ else
+ OUT_LOAD_INST_DATA_FAIL;
+
+ OUT_LOAD_INST_DATA_COMPLETE;
}
- OUT_LOAD_INST_DATA(in);
+ protected:
+ uint64 NajentusGUID;
+ uint64 SupremusGUID;
+ uint64 ShadeOfAkamaGUID;
+ uint64 AkamaShadeGUID;
+ uint64 AkamaGUID;
- std::istringstream loadStream(in);
- loadStream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2]
- >> m_auiEncounter[3] >> m_auiEncounter[4] >> m_auiEncounter[5] >> m_auiEncounter[6]
- >> m_auiEncounter[7] >> m_auiEncounter[8];
+ uint64 GathiosTheShattererGUID;
+ uint64 HighNethermancerZerevorGUID;
+ uint64 LadyMalandeGUID;
+ uint64 VerasDarkshadowGUID;
- for (uint8 i = 0; i < EncounterCount; ++i)
- if (m_auiEncounter[i] == IN_PROGRESS)
- m_auiEncounter[i] = NOT_STARTED;
+ uint64 IllidariCouncilGUID;
+ uint64 BloodElfCouncilVoiceGUID;
- OUT_LOAD_INST_DATA_COMPLETE;
- }
- };
+ uint64 IllidanStormrageGUID;
+
+ uint64 IllidanGateGUID;
+ uint64 IllidanDoorGUIDs[2];
+ };
+ InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
+ {
+ return new instance_black_temple_InstanceMapScript(map);
+ }
};
void AddSC_instance_black_temple()