aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp100
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h68
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp21
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp19
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp25
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp7
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp355
7 files changed, 277 insertions, 318 deletions
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
index cd3fe507592..ff3145c5c78 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
@@ -69,11 +69,8 @@ enum MillhouseSpells
class npc_millhouse_manastorm : public CreatureScript
{
public:
+ npc_millhouse_manastorm() : CreatureScript("npc_millhouse_manastorm") { }
- npc_millhouse_manastorm()
- : CreatureScript("npc_millhouse_manastorm")
- {
- }
struct npc_millhouse_manastormAI : public ScriptedAI
{
npc_millhouse_manastormAI(Creature* creature) : ScriptedAI(creature)
@@ -101,14 +98,11 @@ class npc_millhouse_manastorm : public CreatureScript
Pyroblast_Timer = 1000;
Fireball_Timer = 2500;
- if (instance)
- {
- if (instance->GetData(DATA_WARDEN_2) == DONE)
- Init = true;
+ if (instance->GetData(DATA_WARDEN_2) == DONE)
+ Init = true;
- if (instance->GetData(DATA_HARBINGERSKYRISS) == DONE)
- Talk(SAY_COMPLETE);
- }
+ if (instance->GetBossState(DATA_HARBINGER_SKYRISS) == DONE)
+ Talk(SAY_COMPLETE);
}
void AttackStart(Unit* who) OVERRIDE
@@ -134,7 +128,7 @@ class npc_millhouse_manastorm : public CreatureScript
Talk(SAY_DEATH);
/*for questId 10886 (heroic mode only)
- if (instance && instance->GetData(TYPE_HARBINGERSKYRISS) != DONE)
+ if (instance->GetBossState(DATA_HARBINGER_SKYRISS) != DONE)
->FailQuest();*/
}
@@ -176,8 +170,7 @@ class npc_millhouse_manastorm : public CreatureScript
EventProgress_Timer = 6000;
break;
case 7:
- if (instance)
- instance->SetData(DATA_WARDEN_2, DONE);
+ instance->SetData(DATA_WARDEN_2, DONE);
Init = true;
break;
}
@@ -223,7 +216,7 @@ class npc_millhouse_manastorm : public CreatureScript
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
- return new npc_millhouse_manastormAI(creature);
+ return GetArcatrazAI<npc_millhouse_manastormAI>(creature);
}
};
/*#####
@@ -273,10 +266,7 @@ enum WardenSpells
class npc_warden_mellichar : public CreatureScript
{
public:
-
- npc_warden_mellichar() : CreatureScript("npc_warden_mellichar")
- {
- }
+ npc_warden_mellichar() : CreatureScript("npc_warden_mellichar") { }
struct npc_warden_mellicharAI : public ScriptedAI
{
@@ -304,14 +294,12 @@ class npc_warden_mellichar : public CreatureScript
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
DoCast(me, SPELL_TARGET_OMEGA);
- if (instance)
- instance->SetData(DATA_HARBINGERSKYRISS, NOT_STARTED);
+ instance->SetBossState(DATA_HARBINGER_SKYRISS, NOT_STARTED);
}
void AttackStart(Unit* /*who*/) OVERRIDE { }
void MoveInLineOfSight(Unit* who) OVERRIDE
-
{
if (IsRunning)
return;
@@ -334,50 +322,42 @@ class npc_warden_mellichar : public CreatureScript
Talk(YELL_INTRO1);
DoCast(me, SPELL_BUBBLE_VISUAL);
- if (instance)
- {
- instance->SetData(DATA_HARBINGERSKYRISS, IN_PROGRESS);
- instance->HandleGameObject(instance->GetData64(DATA_SPHERE_SHIELD), false);
- IsRunning = true;
- }
+ instance->SetBossState(DATA_HARBINGER_SKYRISS, IN_PROGRESS);
+ instance->HandleGameObject(instance->GetData64(DATA_WARDENS_SHIELD), false);
+ IsRunning = true;
}
bool CanProgress()
{
- if (instance)
- {
- if (Phase == 7 && instance->GetData(DATA_WARDEN_4) == DONE)
- return true;
- if (Phase == 6 && instance->GetData(DATA_WARDEN_3) == DONE)
- return true;
- if (Phase == 5 && instance->GetData(DATA_WARDEN_2) == DONE)
- return true;
- if (Phase == 4)
- return true;
- if (Phase == 3 && instance->GetData(DATA_WARDEN_1) == DONE)
- return true;
- if (Phase == 2 && instance->GetData(DATA_HARBINGERSKYRISS) == IN_PROGRESS)
- return true;
- if (Phase == 1 && instance->GetData(DATA_HARBINGERSKYRISS) == IN_PROGRESS)
- return true;
- return false;
- }
+ if (Phase == 7 && instance->GetData(DATA_WARDEN_4) == DONE)
+ return true;
+ if (Phase == 6 && instance->GetData(DATA_WARDEN_3) == DONE)
+ return true;
+ if (Phase == 5 && instance->GetData(DATA_WARDEN_2) == DONE)
+ return true;
+ if (Phase == 4)
+ return true;
+ if (Phase == 3 && instance->GetData(DATA_WARDEN_1) == DONE)
+ return true;
+ if (Phase == 2 && instance->GetBossState(DATA_HARBINGER_SKYRISS) == IN_PROGRESS)
+ return true;
+ if (Phase == 1 && instance->GetBossState(DATA_HARBINGER_SKYRISS) == IN_PROGRESS)
+ return true;
+
return false;
}
void DoPrepareForPhase()
{
- if (instance)
- {
- me->InterruptNonMeleeSpells(true);
- me->RemoveAurasByType(SPELL_AURA_DUMMY);
+ me->InterruptNonMeleeSpells(true);
+ me->RemoveAurasByType(SPELL_AURA_DUMMY);
- switch (Phase)
- {
+ switch (Phase)
+ {
case 2:
DoCast(me, SPELL_TARGET_ALPHA);
instance->SetData(DATA_WARDEN_1, IN_PROGRESS);
- instance->HandleGameObject(instance->GetData64(DATA_SPHERE_SHIELD), false);
+ instance->HandleGameObject(instance->GetData64(DATA_WARDENS_SHIELD), false);
break;
case 3:
DoCast(me, SPELL_TARGET_BETA);
@@ -394,9 +374,8 @@ class npc_warden_mellichar : public CreatureScript
case 7:
instance->SetData(DATA_WARDEN_5, IN_PROGRESS);
break;
- }
- CanSpawn = true;
}
+ CanSpawn = true;
}
void UpdateAI(uint32 diff) OVERRIDE
@@ -406,13 +385,10 @@ class npc_warden_mellichar : public CreatureScript
if (EventProgress_Timer <= diff)
{
- if (instance)
+ if (instance->GetBossState(DATA_HARBINGER_SKYRISS) == FAIL)
{
- if (instance->GetData(DATA_HARBINGERSKYRISS) == FAIL)
- {
- Reset();
- return;
- }
+ Reset();
+ return;
}
if (CanSpawn)
@@ -517,7 +493,7 @@ class npc_warden_mellichar : public CreatureScript
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
- return new npc_warden_mellicharAI(creature);
+ return GetArcatrazAI<npc_warden_mellicharAI>(creature);
}
};
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h
index 038d94fc960..1ebfad4dfeb 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.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,46 +18,53 @@
#ifndef ARCATRAZ_H
#define ARCATRAZ_H
-uint32 const EncounterCount = 13;
+#define ArcatrazScriptName "instance_arcatraz"
-#define AScriptName "instance_arcatraz"
+uint32 const EncounterCount = 4;
enum DataTypes
{
- DATA_ZEREKETH = 1,
- DATA_DALLIAH = 2,
- DATA_SOCCOTHRATES = 3,
- DATA_HARBINGERSKYRISS = 4,
- DATA_WARDEN_1 = 5,
- DATA_WARDEN_2 = 6,
- DATA_WARDEN_3 = 7,
- DATA_WARDEN_4 = 8,
- DATA_WARDEN_5 = 9,
- DATA_MELLICHAR = 10,
- DATA_SHIELD_OPEN = 11,
- DATA_SPHERE_SHIELD = 12,
- DATA_CONVERSATION = 13
+ // Encounter States/Boss GUIDs
+ DATA_ZEREKETH = 0,
+ DATA_DALLIAH = 1,
+ DATA_SOCCOTHRATES = 2,
+ DATA_HARBINGER_SKYRISS = 3,
+
+ // Additional Data
+ DATA_CONVERSATION = 4,
+ DATA_WARDEN_1 = 5, // used by EventAI
+ DATA_WARDEN_2 = 6, // used by EventAI
+ DATA_WARDEN_3 = 7, // used by EventAI
+ DATA_WARDEN_4 = 8, // used by EventAI
+ DATA_WARDEN_5 = 9, // used by EventAI
+ DATA_MELLICHAR = 10,
+ DATA_WARDENS_SHIELD = 11
};
-enum CreaturesIds
+enum CreatureIds
{
- NPC_MELLICHAR = 20904, //skyriss will kill this unit
- NPC_ALPHA_POD_TARGET = 21436,
- NPC_DALLIAH = 20885,
- NPC_SOCCOTHRATES = 20886
+ NPC_DALLIAH = 20885,
+ NPC_SOCCOTHRATES = 20886,
+ NPC_MELLICHAR = 20904, // skyriss will kill this unit
+ NPC_ALPHA_POD_TARGET = 21436
};
-enum GameObjectsIds
+enum GameObjectIds
{
- CONTAINMENT_CORE_SECURITY_FIELD_ALPHA = 184318, //door opened when Wrath-Scryer Soccothrates dies
- CONTAINMENT_CORE_SECURITY_FIELD_BETA = 184319, //door opened when Dalliah the Doomsayer dies
- POD_ALPHA = 183961, //pod first boss wave
- POD_BETA = 183963, //pod second boss wave
- POD_DELTA = 183964, //pod third boss wave
- POD_GAMMA = 183962, //pod fourth boss wave
- POD_OMEGA = 183965, //pod fifth boss wave
- WARDENS_SHIELD = 184802, // warden shield
- SEAL_SPHERE = 184802 //shield 'protecting' mellichar
+ GO_CONTAINMENT_CORE_SECURITY_FIELD_ALPHA = 184318, // door opened when Wrath-Scryer Soccothrates dies
+ GO_CONTAINMENT_CORE_SECURITY_FIELD_BETA = 184319, // door opened when Dalliah the Doomsayer dies
+ GO_STASIS_POD_ALPHA = 183961, // pod first boss wave
+ GO_STASIS_POD_BETA = 183963, // pod second boss wave
+ GO_STASIS_POD_DELTA = 183964, // pod third boss wave
+ GO_STASIS_POD_GAMMA = 183962, // pod fourth boss wave
+ GO_STASIS_POD_OMEGA = 183965, // pod fifth boss wave
+ GO_WARDENS_SHIELD = 184802 // shield 'protecting' mellichar
};
+template<class AI>
+AI* GetArcatrazAI(Creature* creature)
+{
+ return GetInstanceAI<AI>(creature, ArcatrazScriptName);
+}
+
#endif // ARCATRAZ_H
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp
index eacd5b3835e..b5947e93216 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp
@@ -15,19 +15,13 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: boss_dalliah_the_doomsayer
-SD%Complete: 100%
-SDComment:
-SDCategory: Tempest Keep, The Arcatraz
-EndScriptData */
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "arcatraz.h"
enum Say
{
+ // Dalliah the Doomsayer
SAY_AGGRO = 1,
SAY_SLAY = 2,
SAY_WHIRLWIND = 3,
@@ -35,7 +29,7 @@ enum Say
SAY_DEATH = 5,
SAY_SOCCOTHRATES_DEATH = 7,
- // boss_wrath_scryer_soccothrates
+ // Wrath-Scryer Soccothrates
SAY_AGGRO_DALLIAH_FIRST = 0,
SAY_DALLIAH_25_PERCENT = 5
};
@@ -78,7 +72,7 @@ class boss_dalliah_the_doomsayer : public CreatureScript
_JustDied();
Talk(SAY_DEATH);
- if (Creature* soccothrates = me->GetCreature(*me, soccothratesGUID))
+ if (Creature* soccothrates = ObjectAccessor::GetCreature(*me, soccothratesGUID))
if (soccothrates->IsAlive() && !soccothrates->IsInCombat())
soccothrates->AI()->SetData(1, 1);
}
@@ -110,9 +104,8 @@ class boss_dalliah_the_doomsayer : public CreatureScript
events.ScheduleEvent(EVENT_SOCCOTHRATES_DEATH, 6000);
soccothratesDeath = true;
break;
- break;
- default:
- break;
+ default:
+ break;
}
}
@@ -168,7 +161,7 @@ class boss_dalliah_the_doomsayer : public CreatureScript
events.ScheduleEvent(EVENT_SHADOW_WAVE, urand(11000, 16000));
break;
case EVENT_ME_FIRST:
- if (Creature* soccothrates = me->GetCreature(*me, soccothratesGUID))
+ if (Creature* soccothrates = ObjectAccessor::GetCreature(*me, soccothratesGUID))
if (soccothrates->IsAlive() && !soccothrates->IsInCombat())
soccothrates->AI()->Talk(SAY_AGGRO_DALLIAH_FIRST);
break;
@@ -179,7 +172,7 @@ class boss_dalliah_the_doomsayer : public CreatureScript
if (HealthBelowPct(25) && !soccothratesTaunt)
{
- if (Creature* soccothrates = me->GetCreature(*me, soccothratesGUID))
+ if (Creature* soccothrates = ObjectAccessor::GetCreature(*me, soccothratesGUID))
soccothrates->AI()->Talk(SAY_DALLIAH_25_PERCENT);
soccothratesTaunt = true;
}
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
index 3748b704e0a..48d955acbc3 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
@@ -65,7 +65,7 @@ class boss_harbinger_skyriss : public CreatureScript
struct boss_harbinger_skyrissAI : public BossAI
{
- boss_harbinger_skyrissAI(Creature* creature) : BossAI(creature, DATA_HARBINGERSKYRISS)
+ boss_harbinger_skyrissAI(Creature* creature) : BossAI(creature, DATA_HARBINGER_SKYRISS)
{
Intro = false;
}
@@ -98,7 +98,6 @@ class boss_harbinger_skyriss : public CreatureScript
}
void MoveInLineOfSight(Unit* who) OVERRIDE
-
{
if (!Intro)
return;
@@ -153,27 +152,24 @@ class boss_harbinger_skyriss : public CreatureScript
{
if (!Intro)
{
- if (!instance)
- return;
-
if (Intro_Timer <= diff)
{
switch (Intro_Phase)
{
case 1:
Talk(SAY_INTRO);
- instance->HandleGameObject(instance->GetData64(DATA_SPHERE_SHIELD), true);
+ instance->HandleGameObject(instance->GetData64(DATA_WARDENS_SHIELD), true);
++Intro_Phase;
Intro_Timer = 25000;
break;
case 2:
Talk(SAY_AGGRO);
- if (Unit* mellic = Unit::GetUnit(*me, instance->GetData64(DATA_MELLICHAR)))
+ if (Unit* mellic = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_MELLICHAR)))
{
//should have a better way to do this. possibly spell exist.
mellic->setDeathState(JUST_DIED);
mellic->SetHealth(0);
- instance->SetData(DATA_SHIELD_OPEN, IN_PROGRESS);
+ instance->HandleGameObject(instance->GetData64(DATA_WARDENS_SHIELD), false);
}
++Intro_Phase;
Intro_Timer = 3000;
@@ -268,18 +264,15 @@ class boss_harbinger_skyriss : public CreatureScript
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
- return new boss_harbinger_skyrissAI(creature);
+ return GetArcatrazAI<boss_harbinger_skyrissAI>(creature);
}
};
class boss_harbinger_skyriss_illusion : public CreatureScript
{
public:
+ boss_harbinger_skyriss_illusion() : CreatureScript("boss_harbinger_skyriss_illusion") { }
- boss_harbinger_skyriss_illusion()
- : CreatureScript("boss_harbinger_skyriss_illusion")
- {
- }
struct boss_harbinger_skyriss_illusionAI : public ScriptedAI
{
boss_harbinger_skyriss_illusionAI(Creature* creature) : ScriptedAI(creature) { }
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp
index 8d4b18b4d47..046ef93bf10 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp
@@ -28,7 +28,7 @@ EndScriptData */
enum Say
{
- // boss_wrath_scryer_soccothrates
+ // Wrath-Scryer Soccothrates
SAY_AGGRO = 1,
SAY_SLAY = 2,
SAY_KNOCK_AWAY = 3,
@@ -39,7 +39,7 @@ enum Say
SAY_SOCCOTHRATES_CONVO_3 = 9,
SAY_SOCCOTHRATES_CONVO_4 = 10,
- // boss_dalliah_the_doomsayer
+ // Dalliah the Doomsayer
SAY_AGGRO_SOCCOTHRATES_FIRST = 0,
SAY_SOCCOTHRATES_25_PERCENT = 6,
SAY_DALLIAH_CONVO_1 = 8,
@@ -98,7 +98,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript
_JustDied();
Talk(SAY_DEATH);
- if (Creature* dalliah = me->GetCreature(*me, dalliahGUID))
+ if (Creature* dalliah = ObjectAccessor::GetCreature(*me, dalliahGUID))
if (dalliah->IsAlive() && !dalliah->IsInCombat())
dalliah->AI()->SetData(1, 1);
}
@@ -145,9 +145,8 @@ class boss_wrath_scryer_soccothrates : public CreatureScript
events.ScheduleEvent(EVENT_DALLIAH_DEATH, 6000);
dalliahDeath = true;
break;
- break;
- default:
- break;
+ default:
+ break;
}
}
@@ -164,7 +163,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript
switch (eventId)
{
case EVENT_PREFIGHT_1:
- if (Creature* dalliah = me->GetCreature(*me, dalliahGUID))
+ if (Creature* dalliah = ObjectAccessor::GetCreature(*me, dalliahGUID))
dalliah->AI()->Talk(SAY_DALLIAH_CONVO_1);
events.ScheduleEvent(EVENT_PREFIGHT_2, 3000);
break;
@@ -173,7 +172,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript
events.ScheduleEvent(EVENT_PREFIGHT_3, 3000);
break;
case EVENT_PREFIGHT_3:
- if (Creature* dalliah = me->GetCreature(*me, dalliahGUID))
+ if (Creature* dalliah = ObjectAccessor::GetCreature(*me, dalliahGUID))
dalliah->AI()->Talk(SAY_DALLIAH_CONVO_2);
events.ScheduleEvent(EVENT_PREFIGHT_4, 6000);
break;
@@ -182,7 +181,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript
events.ScheduleEvent(EVENT_PREFIGHT_5, 2000);
break;
case EVENT_PREFIGHT_5:
- if (Creature* dalliah = me->GetCreature(*me, dalliahGUID))
+ if (Creature* dalliah = ObjectAccessor::GetCreature(*me, dalliahGUID))
dalliah->AI()->Talk(SAY_DALLIAH_CONVO_3);
events.ScheduleEvent(EVENT_PREFIGHT_6, 3000);
break;
@@ -191,7 +190,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript
events.ScheduleEvent(EVENT_PREFIGHT_7, 2000);
break;
case EVENT_PREFIGHT_7:
- if (Creature* dalliah = me->GetCreature(*me, dalliahGUID))
+ if (Creature* dalliah = ObjectAccessor::GetCreature(*me, dalliahGUID))
dalliah->GetMotionMaster()->MovePoint(0, 118.6048f, 96.84852f, 22.44115f);
events.ScheduleEvent(EVENT_PREFIGHT_8, 4000);
break;
@@ -200,7 +199,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript
events.ScheduleEvent(EVENT_PREFIGHT_9, 4000);
break;
case EVENT_PREFIGHT_9:
- if (Creature* dalliah = me->GetCreature(*me, dalliahGUID))
+ if (Creature* dalliah = ObjectAccessor::GetCreature(*me, dalliahGUID))
{
dalliah->SetFacingToObject(me);
me->SetFacingToObject(dalliah);
@@ -254,7 +253,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript
events.ScheduleEvent(EVENT_KNOCK_AWAY, urand(11000, 12000));
break;
case EVENT_ME_FIRST:
- if (Creature* dalliah = me->GetCreature(*me, dalliahGUID))
+ if (Creature* dalliah = ObjectAccessor::GetCreature(*me, dalliahGUID))
if (dalliah->IsAlive() && !dalliah->IsInCombat())
dalliah->AI()->Talk(SAY_AGGRO_SOCCOTHRATES_FIRST);
break;
@@ -265,7 +264,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript
if (HealthBelowPct(25) && !dalliahTaunt)
{
- if (Creature* dalliah = me->GetCreature(*me, dalliahGUID))
+ if (Creature* dalliah = ObjectAccessor::GetCreature(*me, dalliahGUID))
dalliah->AI()->Talk(SAY_SOCCOTHRATES_25_PERCENT);
dalliahTaunt = true;
}
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp
index 062c88bb666..7659f191ff7 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp
@@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: boss_zereketh_the_unbound
-SD%Complete: 100%
-SDComment:
-SDCategory: Tempest Keep, The Arcatraz
-EndScriptData */
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "arcatraz.h"
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp
index 43f4a98c8cf..0145636f9d2 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.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,203 +15,122 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Instance_Arcatraz
-SD%Complete: 80
-SDComment: Mainly Harbringer Skyriss event
-SDCategory: Tempest Keep, The Arcatraz
-EndScriptData */
-
#include "ScriptMgr.h"
#include "InstanceScript.h"
#include "arcatraz.h"
-/* Arcatraz encounters:
-1 - Zereketh the Unbound event
-2 - Dalliah the Doomsayer event
-3 - Wrath-Scryer Soccothrates event
-4 - Harbinger Skyriss event, 5 sub-events
-*/
+DoorData const doorData[] =
+{
+ { GO_CONTAINMENT_CORE_SECURITY_FIELD_ALPHA, DATA_SOCCOTHRATES, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
+ { GO_CONTAINMENT_CORE_SECURITY_FIELD_BETA, DATA_DALLIAH, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
+ { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END
+};
class instance_arcatraz : public InstanceMapScript
{
public:
- instance_arcatraz()
- : InstanceMapScript(AScriptName, 552)
- {
- }
+ instance_arcatraz() : InstanceMapScript(ArcatrazScriptName, 552) { }
+
struct instance_arcatraz_InstanceMapScript : public InstanceScript
{
- instance_arcatraz_InstanceMapScript(Map* map) : InstanceScript(map) { }
-
- uint32 m_auiEncounter[EncounterCount];
-
- uint64 Containment_Core_Security_Field_AlphaGUID;
- uint64 Containment_Core_Security_Field_BetaGUID;
- uint64 Pod_AlphaGUID;
- uint64 Pod_GammaGUID;
- uint64 Pod_BetaGUID;
- uint64 Pod_DeltaGUID;
- uint64 Pod_OmegaGUID;
- uint64 Wardens_ShieldGUID;
- uint64 GoSphereGUID;
- uint64 MellicharGUID;
-
- void Initialize() OVERRIDE
+ instance_arcatraz_InstanceMapScript(Map* map) : InstanceScript(map)
{
- memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
-
- Containment_Core_Security_Field_AlphaGUID = 0;
- Containment_Core_Security_Field_BetaGUID = 0;
- Pod_AlphaGUID = 0;
- Pod_GammaGUID = 0;
- Pod_BetaGUID = 0;
- Pod_DeltaGUID = 0;
- Pod_OmegaGUID = 0;
- Wardens_ShieldGUID = 0;
- GoSphereGUID = 0;
- MellicharGUID = 0;
+ SetBossNumber(EncounterCount);
+ LoadDoorData(doorData);
+
+ MellicharGUID = 0;
+ WardensShieldGUID = 0;
+
+ ConversationState = NOT_STARTED;
+
+ memset(StasisPodGUIDs, 0, 5 * sizeof(uint64));
+ memset(StasisPodStates, NOT_STARTED, 5 * sizeof(uint8));
}
- bool IsEncounterInProgress() const OVERRIDE
+ void OnCreatureCreate(Creature* creature) OVERRIDE
{
- for (uint8 i = 0; i < EncounterCount; ++i)
- if (m_auiEncounter[i] == IN_PROGRESS)
- return true;
-
- return false;
+ if (creature->GetEntry() == NPC_MELLICHAR)
+ MellicharGUID = creature->GetGUID();
}
void OnGameObjectCreate(GameObject* go) OVERRIDE
{
switch (go->GetEntry())
{
- case CONTAINMENT_CORE_SECURITY_FIELD_ALPHA:
- Containment_Core_Security_Field_AlphaGUID = go->GetGUID();
- break;
-
- case CONTAINMENT_CORE_SECURITY_FIELD_BETA:
- Containment_Core_Security_Field_BetaGUID = go->GetGUID();
- break;
-
- case POD_ALPHA:
- Pod_AlphaGUID = go->GetGUID();
- break;
-
- case POD_GAMMA:
- Pod_GammaGUID = go->GetGUID();
- break;
-
- case POD_BETA:
- Pod_BetaGUID = go->GetGUID();
- break;
-
- case POD_DELTA:
- Pod_DeltaGUID = go->GetGUID();
- break;
-
- case POD_OMEGA:
- Pod_OmegaGUID = go->GetGUID();
- break;
-
- case SEAL_SPHERE:
- GoSphereGUID = go->GetGUID();
- break;
-
- /*case WARDENS_SHIELD:
- Wardens_ShieldGUID = go->GetGUID();
- break;*/
+ case GO_CONTAINMENT_CORE_SECURITY_FIELD_ALPHA:
+ case GO_CONTAINMENT_CORE_SECURITY_FIELD_BETA:
+ AddDoor(go, true);
+ break;
+ case GO_STASIS_POD_ALPHA:
+ StasisPodGUIDs[0] = go->GetGUID();
+ break;
+ case GO_STASIS_POD_BETA:
+ StasisPodGUIDs[1] = go->GetGUID();
+ break;
+ case GO_STASIS_POD_DELTA:
+ StasisPodGUIDs[2] = go->GetGUID();
+ break;
+ case GO_STASIS_POD_GAMMA:
+ StasisPodGUIDs[3] = go->GetGUID();
+ break;
+ case GO_STASIS_POD_OMEGA:
+ StasisPodGUIDs[4] = go->GetGUID();
+ break;
+ case GO_WARDENS_SHIELD:
+ WardensShieldGUID = go->GetGUID();
+ break;
+ default:
+ break;
}
}
- void OnCreatureCreate(Creature* creature) OVERRIDE
+ void OnGameObjectRemove(GameObject* go) OVERRIDE
{
- if (creature->GetEntry() == NPC_MELLICHAR)
- MellicharGUID = creature->GetGUID();
+ switch (go->GetEntry())
+ {
+ case GO_CONTAINMENT_CORE_SECURITY_FIELD_ALPHA:
+ case GO_CONTAINMENT_CORE_SECURITY_FIELD_BETA:
+ AddDoor(go, false);
+ break;
+ default:
+ break;
+ }
}
void SetData(uint32 type, uint32 data) OVERRIDE
{
switch (type)
{
- case DATA_ZEREKETH:
- m_auiEncounter[0] = data;
- break;
- case DATA_DALLIAH:
- if (data == DONE)
- {
- if (GameObject* go = instance->GetGameObject(Containment_Core_Security_Field_BetaGUID))
- go->UseDoorOrButton();
- }
- m_auiEncounter[1] = data;
- break;
- case DATA_SOCCOTHRATES:
- if (data == DONE)
- {
- if (GameObject* go = instance->GetGameObject(Containment_Core_Security_Field_AlphaGUID))
- go->UseDoorOrButton();
- }
- m_auiEncounter[2] = data;
- break;
- case DATA_HARBINGERSKYRISS:
- if (data == NOT_STARTED || data == FAIL)
- {
- m_auiEncounter[4] = NOT_STARTED;
- m_auiEncounter[5] = NOT_STARTED;
- m_auiEncounter[6] = NOT_STARTED;
- m_auiEncounter[7] = NOT_STARTED;
- m_auiEncounter[8] = NOT_STARTED;
- }
- m_auiEncounter[3] = data;
- break;
- case DATA_WARDEN_1:
- if (data == IN_PROGRESS)
- if (GameObject* go = instance->GetGameObject(Pod_AlphaGUID))
- go->UseDoorOrButton();
- m_auiEncounter[4] = data;
- break;
- case DATA_WARDEN_2:
- if (data == IN_PROGRESS)
- {
- if (GameObject* go = instance->GetGameObject(Pod_BetaGUID))
- go->UseDoorOrButton();
- }
- m_auiEncounter[5] = data;
- break;
- case DATA_WARDEN_3:
- if (data == IN_PROGRESS)
- {
- if (GameObject* go = instance->GetGameObject(Pod_DeltaGUID))
- go->UseDoorOrButton();
- }
- m_auiEncounter[6] = data;
- break;
- case DATA_WARDEN_4:
- if (data == IN_PROGRESS)
- {
- if (GameObject* go = instance->GetGameObject(Pod_GammaGUID))
- go->UseDoorOrButton();
- }
- m_auiEncounter[7] = data;
- break;
- case DATA_WARDEN_5:
- if (data == IN_PROGRESS)
- {
- if (GameObject* go = instance->GetGameObject(Pod_OmegaGUID))
- go->UseDoorOrButton();
- }
- m_auiEncounter[8] = data;
- break;
- case DATA_SHIELD_OPEN:
- if (data == IN_PROGRESS)
- {
- if (GameObject* go = instance->GetGameObject(Wardens_ShieldGUID))
- go->UseDoorOrButton();
- }
- break;
- case DATA_CONVERSATION:
- m_auiEncounter[12] = data;
- break;
+ case DATA_WARDEN_1:
+ if (data == IN_PROGRESS)
+ HandleGameObject(StasisPodGUIDs[0], true);
+ StasisPodStates[0] = uint8(data);
+ break;
+ case DATA_WARDEN_2:
+ if (data == IN_PROGRESS)
+ HandleGameObject(StasisPodGUIDs[1], true);
+ StasisPodStates[1] = uint8(data);
+ break;
+ case DATA_WARDEN_3:
+ if (data == IN_PROGRESS)
+ HandleGameObject(StasisPodGUIDs[2], true);
+ StasisPodStates[2] = uint8(data);
+ break;
+ case DATA_WARDEN_4:
+ if (data == IN_PROGRESS)
+ HandleGameObject(StasisPodGUIDs[3], true);
+ StasisPodStates[3] = uint8(data);
+ break;
+ case DATA_WARDEN_5:
+ if (data == IN_PROGRESS)
+ HandleGameObject(StasisPodGUIDs[4], true);
+ StasisPodStates[4] = uint8(data);
+ break;
+ case DATA_CONVERSATION:
+ ConversationState = uint8(data);
+ break;
+ default:
+ break;
}
}
@@ -220,13 +138,16 @@ class instance_arcatraz : public InstanceMapScript
{
switch (type)
{
- case DATA_HARBINGERSKYRISS: return m_auiEncounter[3];
- case DATA_WARDEN_1: return m_auiEncounter[4];
- case DATA_WARDEN_2: return m_auiEncounter[5];
- case DATA_WARDEN_3: return m_auiEncounter[6];
- case DATA_WARDEN_4: return m_auiEncounter[7];
- case DATA_WARDEN_5: return m_auiEncounter[8];
- case DATA_CONVERSATION: return m_auiEncounter[12];
+ case DATA_WARDEN_1:
+ case DATA_WARDEN_2:
+ case DATA_WARDEN_3:
+ case DATA_WARDEN_4:
+ case DATA_WARDEN_5:
+ return StasisPodStates[type - DATA_WARDEN_1];
+ case DATA_CONVERSATION:
+ return ConversationState;
+ default:
+ break;
}
return 0;
}
@@ -235,11 +156,89 @@ class instance_arcatraz : public InstanceMapScript
{
switch (data)
{
- case DATA_MELLICHAR: return MellicharGUID;
- case DATA_SPHERE_SHIELD: return GoSphereGUID;
+ case DATA_MELLICHAR:
+ return MellicharGUID;
+ case DATA_WARDENS_SHIELD:
+ return WardensShieldGUID;
+ default:
+ break;
}
return 0;
}
+
+ bool SetBossState(uint32 type, EncounterState state) OVERRIDE
+ {
+ if (!InstanceScript::SetBossState(type, state))
+ return false;
+
+ switch (type)
+ {
+ case DATA_HARBINGER_SKYRISS:
+ if (state == NOT_STARTED || state == FAIL)
+ {
+ SetData(DATA_WARDEN_1, NOT_STARTED);
+ SetData(DATA_WARDEN_2, NOT_STARTED);
+ SetData(DATA_WARDEN_3, NOT_STARTED);
+ SetData(DATA_WARDEN_4, NOT_STARTED);
+ SetData(DATA_WARDEN_5, NOT_STARTED);
+ }
+ break;
+ default:
+ break;
+ }
+ return true;
+ }
+
+ std::string GetSaveData() OVERRIDE
+ {
+ OUT_SAVE_INST_DATA;
+
+ std::ostringstream saveStream;
+ saveStream << "A Z " << GetBossSaveData();
+
+ OUT_SAVE_INST_DATA_COMPLETE;
+ return saveStream.str();
+ }
+
+ void Load(char const* str) OVERRIDE
+ {
+ 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 == 'A' && dataHead2 == 'Z')
+ {
+ 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;
+ }
+
+ protected:
+ uint64 StasisPodGUIDs[5];
+ uint64 MellicharGUID;
+ uint64 WardensShieldGUID;
+
+ uint8 ConversationState;
+ uint8 StasisPodStates[5];
};
InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE
@@ -250,6 +249,6 @@ class instance_arcatraz : public InstanceMapScript
void AddSC_instance_arcatraz()
{
- new instance_arcatraz;
+ new instance_arcatraz();
}