Scripts/Arcatraz: cleanup InstanceScript to make it work with BossAI
This commit is contained in:
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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) { }
|
||||
|
||||
+12
-13
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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,113 +15,36 @@
|
||||
* 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));
|
||||
SetBossNumber(EncounterCount);
|
||||
LoadDoorData(doorData);
|
||||
|
||||
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;
|
||||
}
|
||||
MellicharGUID = 0;
|
||||
WardensShieldGUID = 0;
|
||||
|
||||
bool IsEncounterInProgress() const OVERRIDE
|
||||
{
|
||||
for (uint8 i = 0; i < EncounterCount; ++i)
|
||||
if (m_auiEncounter[i] == IN_PROGRESS)
|
||||
return true;
|
||||
ConversationState = NOT_STARTED;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
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;*/
|
||||
}
|
||||
memset(StasisPodGUIDs, 0, 5 * sizeof(uint64));
|
||||
memset(StasisPodStates, NOT_STARTED, 5 * sizeof(uint8));
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* creature) OVERRIDE
|
||||
@@ -131,88 +53,84 @@ class instance_arcatraz : public InstanceMapScript
|
||||
MellicharGUID = creature->GetGUID();
|
||||
}
|
||||
|
||||
void OnGameObjectCreate(GameObject* go) OVERRIDE
|
||||
{
|
||||
switch (go->GetEntry())
|
||||
{
|
||||
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 OnGameObjectRemove(GameObject* go) OVERRIDE
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user