mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-21 09:44:45 +01:00
Scripts/BlackTemple: reworked InstanceScript
This commit is contained in:
@@ -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
|
||||
};
|
||||
|
||||
#endif
|
||||
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
|
||||
};
|
||||
|
||||
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_
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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) { }
|
||||
public:
|
||||
instance_black_temple() : InstanceMapScript(BTScriptName, 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
|
||||
struct instance_black_temple_InstanceMapScript : public InstanceScript
|
||||
{
|
||||
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
|
||||
|
||||
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()
|
||||
{
|
||||
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)
|
||||
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));
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* creature) OVERRIDE
|
||||
{
|
||||
switch (creature->GetEntry())
|
||||
{
|
||||
if (Player* player = itr->GetSource())
|
||||
return player;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
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 OnGameObjectCreate(GameObject* go) 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;
|
||||
}
|
||||
}
|
||||
|
||||
void OnGameObjectCreate(GameObject* go) OVERRIDE
|
||||
{
|
||||
switch (go->GetEntry())
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
uint64 GetData64(uint32 identifier) const OVERRIDE
|
||||
{
|
||||
switch (identifier)
|
||||
{
|
||||
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, 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;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data) OVERRIDE
|
||||
{
|
||||
switch (type)
|
||||
void OnGameObjectRemove(GameObject* go) 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 (go->GetEntry())
|
||||
{
|
||||
HandleGameObject(TeronDoor, false);
|
||||
HandleGameObject(CommonDoor, false);
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
if (data == DONE)
|
||||
uint64 GetData64(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;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
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];
|
||||
saveStream << "B T " << GetBossSaveData();
|
||||
|
||||
str_data = saveStream.str();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
OUT_LOAD_INST_DATA(str);
|
||||
|
||||
char dataHead1, dataHead2;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
protected:
|
||||
uint64 NajentusGUID;
|
||||
uint64 SupremusGUID;
|
||||
uint64 ShadeOfAkamaGUID;
|
||||
uint64 AkamaShadeGUID;
|
||||
uint64 AkamaGUID;
|
||||
|
||||
std::string GetSaveData() OVERRIDE
|
||||
uint64 GathiosTheShattererGUID;
|
||||
uint64 HighNethermancerZerevorGUID;
|
||||
uint64 LadyMalandeGUID;
|
||||
uint64 VerasDarkshadowGUID;
|
||||
|
||||
uint64 IllidariCouncilGUID;
|
||||
uint64 BloodElfCouncilVoiceGUID;
|
||||
|
||||
uint64 IllidanStormrageGUID;
|
||||
|
||||
uint64 IllidanGateGUID;
|
||||
uint64 IllidanDoorGUIDs[2];
|
||||
};
|
||||
|
||||
InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
|
||||
{
|
||||
return str_data;
|
||||
return new instance_black_temple_InstanceMapScript(map);
|
||||
}
|
||||
|
||||
void Load(const char* in) OVERRIDE
|
||||
{
|
||||
if (!in)
|
||||
{
|
||||
OUT_LOAD_INST_DATA_FAIL;
|
||||
return;
|
||||
}
|
||||
|
||||
OUT_LOAD_INST_DATA(in);
|
||||
|
||||
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];
|
||||
|
||||
for (uint8 i = 0; i < EncounterCount; ++i)
|
||||
if (m_auiEncounter[i] == IN_PROGRESS)
|
||||
m_auiEncounter[i] = NOT_STARTED;
|
||||
|
||||
OUT_LOAD_INST_DATA_COMPLETE;
|
||||
}
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
void AddSC_instance_black_temple()
|
||||
|
||||
Reference in New Issue
Block a user