Scripts/TheEye: Clean up instance script

This commit is contained in:
Nyeriah
2015-06-10 01:07:24 -03:00
parent 9ecef15057
commit d86ff08145
6 changed files with 98 additions and 208 deletions

View File

@@ -77,12 +77,11 @@ class boss_alar : public CreatureScript
public:
boss_alar() : CreatureScript("boss_alar") { }
struct boss_alarAI : public ScriptedAI
struct boss_alarAI : public BossAI
{
boss_alarAI(Creature* creature) : ScriptedAI(creature)
boss_alarAI(Creature* creature) : BossAI(creature, DATA_ALAR)
{
Initialize();
instance = creature->GetInstanceScript();
DefaultMoveSpeedRate = creature->GetSpeedRate(MOVE_RUN);
DiveBomb_Timer = 0;
MeltArmor_Timer = 0;
@@ -105,8 +104,6 @@ class boss_alar : public CreatureScript
cur_wp = 4;
}
InstanceScript* instance;
WaitEventType WaitEvent;
uint32 WaitTimer;
@@ -129,9 +126,8 @@ class boss_alar : public CreatureScript
void Reset() override
{
instance->SetData(DATA_ALAREVENT, NOT_STARTED);
Initialize();
_Reset();
me->SetDisplayId(me->GetNativeDisplayId());
me->SetSpeed(MOVE_RUN, DefaultMoveSpeedRate);
@@ -145,18 +141,11 @@ class boss_alar : public CreatureScript
void EnterCombat(Unit* /*who*/) override
{
instance->SetData(DATA_ALAREVENT, IN_PROGRESS);
_EnterCombat();
me->SetDisableGravity(true); // after enterevademode will be set walk movement
DoZoneInCombat();
me->setActive(true);
}
void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_ALAREVENT, DONE);
}
void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() == CREATURE_EMBER_OF_ALAR)
@@ -508,7 +497,7 @@ class npc_ember_of_alar : public CreatureScript
DoCast(me, SPELL_EMBER_BLAST, true);
me->SetDisplayId(11686);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
if (instance->GetData(DATA_ALAREVENT) == 2)
if (instance->GetBossState(DATA_ALAR) == IN_PROGRESS)
{
if (Unit* Alar = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_ALAR)))
{

View File

@@ -92,17 +92,13 @@ class boss_high_astromancer_solarian : public CreatureScript
{
public:
boss_high_astromancer_solarian()
: CreatureScript("boss_high_astromancer_solarian")
{
}
boss_high_astromancer_solarian() : CreatureScript("boss_high_astromancer_solarian") { }
struct boss_high_astromancer_solarianAI : public ScriptedAI
struct boss_high_astromancer_solarianAI : public BossAI
{
boss_high_astromancer_solarianAI(Creature* creature) : ScriptedAI(creature), Summons(me)
boss_high_astromancer_solarianAI(Creature* creature) : BossAI(creature, DATA_HIGH_ASTROMANCER_SOLARIAN)
{
Initialize();
instance = creature->GetInstanceScript();
defaultarmor = creature->GetArmor();
defaultsize = creature->GetObjectScale();
@@ -126,9 +122,6 @@ class boss_high_astromancer_solarian : public CreatureScript
Phase = 1;
}
InstanceScript* instance;
SummonList Summons;
uint8 Phase;
uint32 ArcaneMissiles_Timer;
@@ -152,16 +145,13 @@ class boss_high_astromancer_solarian : public CreatureScript
void Reset() override
{
Initialize();
instance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, NOT_STARTED);
_Reset();
me->SetArmor(defaultarmor);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetVisible(true);
me->SetObjectScale(defaultsize);
me->SetDisplayId(MODEL_HUMAN);
Summons.DespawnAll();
}
void KilledUnit(Unit* /*victim*/) override
@@ -174,15 +164,13 @@ class boss_high_astromancer_solarian : public CreatureScript
me->SetObjectScale(defaultsize);
me->SetDisplayId(MODEL_HUMAN);
Talk(SAY_DEATH);
instance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, DONE);
_JustDied();
}
void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
DoZoneInCombat();
instance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, IN_PROGRESS);
_EnterCombat();
}
void SummonMinion(uint32 entry, float x, float y, float z)
@@ -193,7 +181,7 @@ class boss_high_astromancer_solarian : public CreatureScript
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
Summoned->AI()->AttackStart(target);
Summons.Summon(Summoned);
summons.Summon(Summoned);
}
}
@@ -431,10 +419,7 @@ class npc_solarium_priest : public CreatureScript
{
public:
npc_solarium_priest()
: CreatureScript("npc_solarium_priest")
{
}
npc_solarium_priest() : CreatureScript("npc_solarium_priest") { }
struct npc_solarium_priestAI : public ScriptedAI
{
@@ -462,9 +447,7 @@ class npc_solarium_priest : public CreatureScript
Initialize();
}
void EnterCombat(Unit* /*who*/) override
{
}
void EnterCombat(Unit* /*who*/) override { }
void UpdateAI(uint32 diff) override
{

View File

@@ -286,17 +286,13 @@ class boss_kaelthas : public CreatureScript
{
public:
boss_kaelthas()
: CreatureScript("boss_kaelthas")
boss_kaelthas() : CreatureScript("boss_kaelthas") { }
struct boss_kaelthasAI : public BossAI
{
}
//Kael'thas AI
struct boss_kaelthasAI : public ScriptedAI
{
boss_kaelthasAI(Creature* creature) : ScriptedAI(creature), summons(me)
boss_kaelthasAI(Creature* creature) : BossAI(creature, DATA_KAELTHAS)
{
Initialize();
instance = creature->GetInstanceScript();
PhaseSubphase = 0;
Phase_Timer = 0;
}
@@ -320,8 +316,6 @@ class boss_kaelthas : public CreatureScript
ChainPyros = false;
}
InstanceScript* instance;
uint32 Fireball_Timer;
uint32 ArcaneDisruption_Timer;
uint32 Phoenix_Timer;
@@ -341,8 +335,6 @@ class boss_kaelthas : public CreatureScript
bool IsCastingFireball;
bool ChainPyros;
SummonList summons;
ObjectGuid m_auiAdvisorGuid[MAX_ADVISORS];
void Reset() override
@@ -351,8 +343,8 @@ class boss_kaelthas : public CreatureScript
if (me->IsInCombat())
PrepareAdvisors();
summons.DespawnAll();
_Reset();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -413,7 +405,6 @@ class boss_kaelthas : public CreatureScript
}
void MoveInLineOfSight(Unit* who) override
{
if (!me->HasUnitState(UNIT_STATE_STUNNED) && me->CanCreatureAttack(who))
{
@@ -444,6 +435,8 @@ class boss_kaelthas : public CreatureScript
{
if (!instance->GetData(DATA_KAELTHASEVENT) && !Phase)
StartEvent();
instance->SetBossState(DATA_KAELTHAS, IN_PROGRESS);
}
void KilledUnit(Unit* /*victim*/) override
@@ -463,11 +456,6 @@ class boss_kaelthas : public CreatureScript
}
}
void SummonedCreatureDespawn(Creature* summon) override
{
summons.Despawn(summon);
}
void JustDied(Unit* /*killer*/) override
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -475,8 +463,6 @@ class boss_kaelthas : public CreatureScript
Talk(SAY_DEATH);
summons.DespawnAll();
instance->SetData(DATA_KAELTHASEVENT, 0);
for (uint8 i = 0; i < MAX_ADVISORS; ++i)
@@ -484,6 +470,7 @@ class boss_kaelthas : public CreatureScript
if (Unit* pAdvisor = ObjectAccessor::GetUnit(*me, m_auiAdvisorGuid[i]))
pAdvisor->Kill(pAdvisor);
}
_JustDied();
}
void UpdateAI(uint32 diff) override
@@ -1024,10 +1011,8 @@ class boss_thaladred_the_darkener : public CreatureScript
{
public:
boss_thaladred_the_darkener()
: CreatureScript("boss_thaladred_the_darkener")
{
}
boss_thaladred_the_darkener() : CreatureScript("boss_thaladred_the_darkener") { }
struct boss_thaladred_the_darkenerAI : public advisorbase_ai
{
boss_thaladred_the_darkenerAI(Creature* creature) : advisorbase_ai(creature)
@@ -1130,10 +1115,8 @@ class boss_lord_sanguinar : public CreatureScript
{
public:
boss_lord_sanguinar()
: CreatureScript("boss_lord_sanguinar")
{
}
boss_lord_sanguinar() : CreatureScript("boss_lord_sanguinar") { }
struct boss_lord_sanguinarAI : public advisorbase_ai
{
boss_lord_sanguinarAI(Creature* creature) : advisorbase_ai(creature)
@@ -1205,10 +1188,8 @@ class boss_grand_astromancer_capernian : public CreatureScript
{
public:
boss_grand_astromancer_capernian()
: CreatureScript("boss_grand_astromancer_capernian")
{
}
boss_grand_astromancer_capernian() : CreatureScript("boss_grand_astromancer_capernian") { }
struct boss_grand_astromancer_capernianAI : public advisorbase_ai
{
boss_grand_astromancer_capernianAI(Creature* creature) : advisorbase_ai(creature)
@@ -1358,10 +1339,8 @@ class boss_master_engineer_telonicus : public CreatureScript
{
public:
boss_master_engineer_telonicus()
: CreatureScript("boss_master_engineer_telonicus")
{
}
boss_master_engineer_telonicus() : CreatureScript("boss_master_engineer_telonicus") { }
struct boss_master_engineer_telonicusAI : public advisorbase_ai
{
boss_master_engineer_telonicusAI(Creature* creature) : advisorbase_ai(creature)
@@ -1449,10 +1428,8 @@ class npc_kael_flamestrike : public CreatureScript
{
public:
npc_kael_flamestrike()
: CreatureScript("npc_kael_flamestrike")
{
}
npc_kael_flamestrike() : CreatureScript("npc_kael_flamestrike") { }
struct npc_kael_flamestrikeAI : public ScriptedAI
{
npc_kael_flamestrikeAI(Creature* creature) : ScriptedAI(creature)
@@ -1482,7 +1459,6 @@ class npc_kael_flamestrike : public CreatureScript
void MoveInLineOfSight(Unit* /*who*/) override { }
void EnterCombat(Unit* /*who*/) override { }
void UpdateAI(uint32 diff) override
@@ -1523,10 +1499,8 @@ class npc_phoenix_tk : public CreatureScript
{
public:
npc_phoenix_tk()
: CreatureScript("npc_phoenix_tk")
{
}
npc_phoenix_tk() : CreatureScript("npc_phoenix_tk") { }
struct npc_phoenix_tkAI : public ScriptedAI
{
npc_phoenix_tkAI(Creature* creature) : ScriptedAI(creature)
@@ -1585,10 +1559,8 @@ class npc_phoenix_egg_tk : public CreatureScript
{
public:
npc_phoenix_egg_tk()
: CreatureScript("npc_phoenix_egg_tk")
{
}
npc_phoenix_egg_tk() : CreatureScript("npc_phoenix_egg_tk") { }
struct npc_phoenix_egg_tkAI : public ScriptedAI
{
npc_phoenix_egg_tkAI(Creature* creature) : ScriptedAI(creature)
@@ -1611,7 +1583,6 @@ class npc_phoenix_egg_tk : public CreatureScript
//ignore any
void MoveInLineOfSight(Unit* /*who*/) override { }
void AttackStart(Unit* who) override
{
if (me->Attack(who, false))

View File

@@ -47,17 +47,13 @@ class boss_void_reaver : public CreatureScript
{
public:
boss_void_reaver()
: CreatureScript("boss_void_reaver")
{
}
boss_void_reaver() : CreatureScript("boss_void_reaver") { }
struct boss_void_reaverAI : public ScriptedAI
struct boss_void_reaverAI : public BossAI
{
boss_void_reaverAI(Creature* creature) : ScriptedAI(creature)
boss_void_reaverAI(Creature* creature) : BossAI(creature, DATA_VOID_REAVER)
{
Initialize();
instance = creature->GetInstanceScript();
}
void Initialize()
@@ -70,8 +66,6 @@ class boss_void_reaver : public CreatureScript
Enraged = false;
}
InstanceScript* instance;
uint32 Pounding_Timer;
uint32 ArcaneOrb_Timer;
uint32 KnockAway_Timer;
@@ -82,9 +76,7 @@ class boss_void_reaver : public CreatureScript
void Reset() override
{
Initialize();
if (me->IsAlive())
instance->SetData(DATA_VOIDREAVEREVENT, NOT_STARTED);
_Reset();
}
void KilledUnit(Unit* /*victim*/) override
@@ -96,15 +88,13 @@ class boss_void_reaver : public CreatureScript
{
Talk(SAY_DEATH);
DoZoneInCombat();
instance->SetData(DATA_VOIDREAVEREVENT, DONE);
_JustDied();
}
void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetData(DATA_VOIDREAVEREVENT, IN_PROGRESS);
_EnterCombat();
}
void UpdateAI(uint32 diff) override

View File

@@ -27,8 +27,6 @@ EndScriptData */
#include "InstanceScript.h"
#include "the_eye.h"
#define MAX_ENCOUNTER 5
/* The Eye encounters:
0 - Kael'thas event
1 - Al' ar event
@@ -39,20 +37,16 @@ EndScriptData */
class instance_the_eye : public InstanceMapScript
{
public:
instance_the_eye()
: InstanceMapScript("instance_the_eye", 550)
{
}
instance_the_eye() : InstanceMapScript("instance_the_eye", 550) { }
struct instance_the_eye_InstanceMapScript : public InstanceScript
{
instance_the_eye_InstanceMapScript(Map* map) : InstanceScript(map)
{
SetHeaders(DataHeader);
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
SetBossNumber(EncounterCount);
KaelthasEventPhase = 0;
AlarEventPhase = 0;
}
ObjectGuid ThaladredTheDarkener;
@@ -63,44 +57,34 @@ class instance_the_eye : public InstanceMapScript
ObjectGuid Astromancer;
ObjectGuid Alar;
uint8 KaelthasEventPhase;
uint8 AlarEventPhase;
uint32 m_auiEncounter[MAX_ENCOUNTER];
bool IsEncounterInProgress() const override
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
return true;
return false;
}
void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
case 20064:
ThaladredTheDarkener = creature->GetGUID();
break;
case 20063:
MasterEngineerTelonicus = creature->GetGUID();
break;
case 20062:
GrandAstromancerCapernian = creature->GetGUID();
break;
case 20060:
LordSanguinar = creature->GetGUID();
break;
case 19622:
Kaelthas = creature->GetGUID();
break;
case 18805:
Astromancer = creature->GetGUID();
break;
case 19514:
Alar = creature->GetGUID();
break;
case NPC_SANGUINAR:
LordSanguinar = creature->GetGUID();
break;
case NPC_CAPERNIAN:
GrandAstromancerCapernian = creature->GetGUID();
break;
case NPC_TELONICUS:
MasterEngineerTelonicus = creature->GetGUID();
break;
case NPC_THALADRED:
ThaladredTheDarkener = creature->GetGUID();
break;
case NPC_KAELTHAS:
Kaelthas = creature->GetGUID();
break;
case NPC_HIGH_ASTROMANCER_SOLARIAN:
Astromancer = creature->GetGUID();
break;
case NPC_ALAR:
Alar = creature->GetGUID();
break;
default:
break;
}
}
@@ -113,7 +97,7 @@ class instance_the_eye : public InstanceMapScript
case DATA_GRANDASTROMANCERCAPERNIAN: return GrandAstromancerCapernian;
case DATA_MASTERENGINEERTELONICUS: return MasterEngineerTelonicus;
case DATA_KAELTHAS: return Kaelthas;
case DATA_ASTROMANCER: return Astromancer;
case DATA_HIGH_ASTROMANCER_SOLARIAN: return Astromancer;
case DATA_ALAR: return Alar;
}
return ObjectGuid::Empty;
@@ -123,64 +107,23 @@ class instance_the_eye : public InstanceMapScript
{
switch (type)
{
case DATA_ALAREVENT:
AlarEventPhase = data;
m_auiEncounter[0] = data;
break;
case DATA_HIGHASTROMANCERSOLARIANEVENT:
m_auiEncounter[1] = data;
break;
case DATA_VOIDREAVEREVENT:
m_auiEncounter[2] = data;
break;
case DATA_KAELTHASEVENT:
KaelthasEventPhase = data;
m_auiEncounter[3] = data;
break;
case DATA_KAELTHASEVENT:
KaelthasEventPhase = data;
break;
default:
break;
}
if (data == DONE)
SaveToDB();
}
uint32 GetData(uint32 type) const override
{
switch (type)
{
case DATA_ALAREVENT: return AlarEventPhase;
case DATA_HIGHASTROMANCERSOLARIANEVENT: return m_auiEncounter[1];
case DATA_VOIDREAVEREVENT: return m_auiEncounter[2];
case DATA_KAELTHASEVENT: return KaelthasEventPhase;
case DATA_KAELTHASEVENT:
return KaelthasEventPhase;
}
return 0;
}
std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
std::ostringstream stream;
stream << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' ' << m_auiEncounter[3];
OUT_SAVE_INST_DATA_COMPLETE;
return stream.str();
}
void Load(const char* in) override
{
if (!in)
{
OUT_LOAD_INST_DATA_FAIL;
return;
}
OUT_LOAD_INST_DATA(in);
std::istringstream stream(in);
stream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3];
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS) // Do not load an encounter as "In Progress" - reset it instead.
m_auiEncounter[i] = NOT_STARTED;
OUT_LOAD_INST_DATA_COMPLETE;
}
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override

View File

@@ -21,19 +21,33 @@
#define DataHeader "TE"
uint32 const EncounterCount = 4;
enum DataTypes
{
DATA_ALAREVENT = 1,
DATA_ASTROMANCER = 2,
DATA_GRANDASTROMANCERCAPERNIAN = 3,
DATA_HIGHASTROMANCERSOLARIANEVENT = 4,
DATA_KAELTHAS = 5,
// Encounter States/Boss GUIDs
DATA_KAELTHAS = 0,
DATA_ALAR = 1,
DATA_HIGH_ASTROMANCER_SOLARIAN = 2,
DATA_VOID_REAVER = 3,
DATA_ASTROMANCER = 4,
DATA_GRANDASTROMANCERCAPERNIAN = 5,
DATA_KAELTHASEVENT = 6,
DATA_LORDSANGUINAR = 7,
DATA_MASTERENGINEERTELONICUS = 8,
DATA_THALADREDTHEDARKENER = 10,
DATA_VOIDREAVEREVENT = 11,
DATA_ALAR = 12
DATA_THALADREDTHEDARKENER = 9
};
enum CreatureIds
{
NPC_SANGUINAR = 20060,
NPC_CAPERNIAN = 20062,
NPC_TELONICUS = 20063,
NPC_THALADRED = 20064,
NPC_KAELTHAS = 19622,
NPC_HIGH_ASTROMANCER_SOLARIAN = 18805,
NPC_ALAR = 19514
};
#endif