Scripts/Icecrown Citadel: Replace instance check with a safer one, this way if failed the creature is not idle

This commit is contained in:
Shauren
2011-03-21 19:00:56 +01:00
parent 1fc5905b89
commit 99104ab576
11 changed files with 80 additions and 158 deletions
@@ -181,14 +181,6 @@ class boss_blood_council_controller : public CreatureScript
{ {
} }
void InitializeAI()
{
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(ICCScriptName))
me->IsAIEnabled = false;
else if (!me->isDead())
Reset();
}
void Reset() void Reset()
{ {
events.Reset(); events.Reset();
@@ -370,7 +362,7 @@ class boss_blood_council_controller : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new boss_blood_council_controllerAI(creature); return GetIcecrownCitadelAI<boss_blood_council_controllerAI>(creature);
} }
}; };
@@ -393,9 +385,7 @@ class boss_prince_keleseth_icc : public CreatureScript
if (data->curhealth) if (data->curhealth)
spawnHealth = data->curhealth; spawnHealth = data->curhealth;
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(ICCScriptName)) if (!me->isDead())
me->IsAIEnabled = false;
else if (!me->isDead())
JustRespawned(); JustRespawned();
me->SetReactState(REACT_DEFENSIVE); me->SetReactState(REACT_DEFENSIVE);
@@ -569,7 +559,7 @@ class boss_prince_keleseth_icc : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new boss_prince_kelesethAI(creature); return GetIcecrownCitadelAI<boss_prince_kelesethAI>(creature);
} }
}; };
@@ -594,9 +584,7 @@ class boss_prince_taldaram_icc : public CreatureScript
if (data->curhealth) if (data->curhealth)
spawnHealth = data->curhealth; spawnHealth = data->curhealth;
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(ICCScriptName)) if (!me->isDead())
me->IsAIEnabled = false;
else if (!me->isDead())
JustRespawned(); JustRespawned();
me->SetReactState(REACT_DEFENSIVE); me->SetReactState(REACT_DEFENSIVE);
@@ -776,7 +764,7 @@ class boss_prince_taldaram_icc : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new boss_prince_taldaramAI(creature); return GetIcecrownCitadelAI<boss_prince_taldaramAI>(creature);
} }
}; };
@@ -799,9 +787,7 @@ class boss_prince_valanar_icc : public CreatureScript
if (data->curhealth) if (data->curhealth)
spawnHealth = data->curhealth; spawnHealth = data->curhealth;
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(ICCScriptName)) if (!me->isDead())
me->IsAIEnabled = false;
else if (!me->isDead())
JustRespawned(); JustRespawned();
me->SetReactState(REACT_DEFENSIVE); me->SetReactState(REACT_DEFENSIVE);
@@ -1000,7 +986,7 @@ class boss_prince_valanar_icc : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new boss_prince_valanarAI(creature); return GetIcecrownCitadelAI<boss_prince_valanarAI>(creature);
} }
}; };
@@ -1017,14 +1003,6 @@ class npc_blood_queen_lana_thel : public CreatureScript
instance = creature->GetInstanceScript(); instance = creature->GetInstanceScript();
} }
void InitializeAI()
{
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(ICCScriptName))
me->IsAIEnabled = false;
else if (!me->isDead())
Reset();
}
void Reset() void Reset()
{ {
events.Reset(); events.Reset();
@@ -1101,7 +1079,7 @@ class npc_blood_queen_lana_thel : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_blood_queen_lana_thelAI(creature); return GetIcecrownCitadelAI<npc_blood_queen_lana_thelAI>(creature);
} }
}; };
@@ -1186,7 +1164,7 @@ class npc_ball_of_flame : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_ball_of_flameAI(creature); return GetIcecrownCitadelAI<npc_ball_of_flameAI>(creature);
} }
}; };
@@ -1253,7 +1231,7 @@ class npc_kinetic_bomb : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_kinetic_bombAI(creature); return GetIcecrownCitadelAI<npc_kinetic_bombAI>(creature);
} }
}; };
@@ -1351,7 +1329,7 @@ class npc_dark_nucleus : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_dark_nucleusAI(creature); return GetIcecrownCitadelAI<npc_dark_nucleusAI>(creature);
} }
}; };
@@ -132,14 +132,6 @@ class boss_blood_queen_lana_thel : public CreatureScript
{ {
} }
void InitializeAI()
{
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(ICCScriptName))
me->IsAIEnabled = false;
else if (!me->isDead())
Reset();
}
void Reset() void Reset()
{ {
_Reset(); _Reset();
@@ -472,7 +464,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new boss_blood_queen_lana_thelAI(creature); return GetIcecrownCitadelAI<boss_blood_queen_lana_thelAI>(creature);
} }
}; };
@@ -248,14 +248,6 @@ class boss_deathbringer_saurfang : public CreatureScript
fallenChampionCount = 0; fallenChampionCount = 0;
} }
void InitializeAI()
{
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(ICCScriptName))
me->IsAIEnabled = false;
else if (!me->isDead())
Reset();
}
void Reset() void Reset()
{ {
_Reset(); _Reset();
@@ -550,7 +542,7 @@ class boss_deathbringer_saurfang : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new boss_deathbringer_saurfangAI(creature); return GetIcecrownCitadelAI<boss_deathbringer_saurfangAI>(creature);
} }
}; };
@@ -592,11 +584,8 @@ class npc_high_overlord_saurfang_icc : public CreatureScript
Talk(SAY_INTRO_HORDE_1); Talk(SAY_INTRO_HORDE_1);
events.SetPhase(PHASE_INTRO_H); events.SetPhase(PHASE_INTRO_H);
events.ScheduleEvent(EVENT_INTRO_HORDE_3, 18500, 0, PHASE_INTRO_H); events.ScheduleEvent(EVENT_INTRO_HORDE_3, 18500, 0, PHASE_INTRO_H);
if (instance)
{
deathbringerSaurfangGUID = instance->GetData64(DATA_DEATHBRINGER_SAURFANG); deathbringerSaurfangGUID = instance->GetData64(DATA_DEATHBRINGER_SAURFANG);
instance->HandleGameObject(instance->GetData64(GO_SAURFANG_S_DOOR), true); instance->HandleGameObject(instance->GetData64(GO_SAURFANG_S_DOOR), true);
}
if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, deathbringerSaurfangGUID)) if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, deathbringerSaurfangGUID))
deathbringer->AI()->DoAction(PHASE_INTRO_H); deathbringer->AI()->DoAction(PHASE_INTRO_H);
break; break;
@@ -769,7 +758,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_high_overlord_saurfangAI(creature); return GetIcecrownCitadelAI<npc_high_overlord_saurfangAI>(creature);
} }
}; };
@@ -810,11 +799,8 @@ class npc_muradin_bronzebeard_icc : public CreatureScript
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
Talk(SAY_INTRO_ALLIANCE_1); Talk(SAY_INTRO_ALLIANCE_1);
events.ScheduleEvent(EVENT_INTRO_ALLIANCE_4, 2500+17500+9500, 0, PHASE_INTRO_A); events.ScheduleEvent(EVENT_INTRO_ALLIANCE_4, 2500+17500+9500, 0, PHASE_INTRO_A);
if (instance)
{
deathbringerSaurfangGUID = instance->GetData64(DATA_DEATHBRINGER_SAURFANG); deathbringerSaurfangGUID = instance->GetData64(DATA_DEATHBRINGER_SAURFANG);
instance->HandleGameObject(instance->GetData64(GO_SAURFANG_S_DOOR), true); instance->HandleGameObject(instance->GetData64(GO_SAURFANG_S_DOOR), true);
}
if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, deathbringerSaurfangGUID)) if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, deathbringerSaurfangGUID))
deathbringer->AI()->DoAction(PHASE_INTRO_A); deathbringer->AI()->DoAction(PHASE_INTRO_A);
break; break;
@@ -923,7 +909,7 @@ class npc_muradin_bronzebeard_icc : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_muradin_bronzebeard_iccAI(creature); return GetIcecrownCitadelAI<npc_muradin_bronzebeard_iccAI>(creature);
} }
}; };
@@ -968,7 +954,7 @@ class npc_saurfang_event : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_saurfang_eventAI(creature); return GetIcecrownCitadelAI<npc_saurfang_eventAI>(creature);
} }
}; };
@@ -87,14 +87,6 @@ class boss_festergut : public CreatureScript
gasDummyGUID = 0; gasDummyGUID = 0;
} }
void InitializeAI()
{
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(ICCScriptName))
me->IsAIEnabled = false;
else if (!me->isDead())
Reset();
}
void Reset() void Reset()
{ {
_Reset(); _Reset();
@@ -281,7 +273,7 @@ class boss_festergut : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new boss_festergutAI(creature); return GetIcecrownCitadelAI<boss_festergutAI>(creature);
} }
}; };
@@ -337,8 +329,7 @@ class npc_stinky_icc : public CreatureScript
void JustDied(Unit* /*who*/) void JustDied(Unit* /*who*/)
{ {
uint64 festergutGUID = instance ? instance->GetData64(DATA_FESTERGUT) : 0; if (Creature* festergut = me->GetCreature(*me, instance->GetData64(DATA_FESTERGUT)))
if (Creature* festergut = me->GetCreature(*me, festergutGUID))
if (festergut->isAlive()) if (festergut->isAlive())
festergut->AI()->Talk(SAY_STINKY_DEAD); festergut->AI()->Talk(SAY_STINKY_DEAD);
} }
@@ -350,7 +341,7 @@ class npc_stinky_icc : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_stinky_iccAI(creature); return GetIcecrownCitadelAI<npc_stinky_iccAI>(creature);
} }
}; };
@@ -220,14 +220,6 @@ class boss_lady_deathwhisper : public CreatureScript
dominateMindCount = RAID_MODE<uint8>(0, 1, 1, 3); dominateMindCount = RAID_MODE<uint8>(0, 1, 1, 3);
} }
void InitializeAI()
{
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(ICCScriptName))
me->IsAIEnabled = false;
else if (!me->isDead())
Reset();
}
void Reset() void Reset()
{ {
_Reset(); _Reset();
@@ -628,7 +620,7 @@ class boss_lady_deathwhisper : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new boss_lady_deathwhisperAI(creature); return GetIcecrownCitadelAI<boss_lady_deathwhisperAI>(creature);
} }
}; };
@@ -707,7 +699,7 @@ class npc_cult_fanatic : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_cult_fanaticAI(creature); return GetIcecrownCitadelAI<npc_cult_fanaticAI>(creature);
} }
}; };
@@ -793,7 +785,7 @@ class npc_cult_adherent : public CreatureScript
CreatureAI* GetAI(Creature* pCreature) const CreatureAI* GetAI(Creature* pCreature) const
{ {
return new npc_cult_adherentAI(pCreature); return GetIcecrownCitadelAI<npc_cult_adherentAI>(pCreature);
} }
}; };
@@ -833,7 +825,7 @@ class npc_vengeful_shade : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_vengeful_shadeAI(creature); return GetIcecrownCitadelAI<npc_vengeful_shadeAI>(creature);
} }
}; };
@@ -953,7 +945,7 @@ class npc_darnavan : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_darnavanAI(creature); return GetIcecrownCitadelAI<npc_darnavanAI>(creature);
} }
}; };
@@ -93,14 +93,6 @@ class boss_lord_marrowgar : public CreatureScript
boneSlice = false; boneSlice = false;
} }
void InitializeAI()
{
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(ICCScriptName))
me->IsAIEnabled = false;
else if (!me->isDead())
Reset();
}
void Reset() void Reset()
{ {
_Reset(); _Reset();
@@ -260,7 +252,7 @@ class boss_lord_marrowgar : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new boss_lord_marrowgarAI(creature); return GetIcecrownCitadelAI<boss_lord_marrowgarAI>(creature);
} }
}; };
@@ -334,7 +326,7 @@ class npc_coldflame : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_coldflameAI(creature); return GetIcecrownCitadelAI<npc_coldflameAI>(creature);
} }
}; };
@@ -392,7 +384,7 @@ class npc_bone_spike : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_bone_spikeAI(creature); return GetIcecrownCitadelAI<npc_bone_spikeAI>(creature);
} }
}; };
@@ -190,14 +190,6 @@ class boss_professor_putricide : public CreatureScript
phase = PHASE_NONE; phase = PHASE_NONE;
} }
void InitializeAI()
{
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(ICCScriptName))
me->IsAIEnabled = false;
else if (!me->isDead())
Reset();
}
void Reset() void Reset()
{ {
if (!(events.GetPhaseMask() & PHASE_MASK_NOT_SELF)) if (!(events.GetPhaseMask() & PHASE_MASK_NOT_SELF))
@@ -690,7 +682,7 @@ class boss_professor_putricide : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new boss_professor_putricideAI(creature); return GetIcecrownCitadelAI<boss_professor_putricideAI>(creature);
} }
}; };
@@ -751,7 +743,7 @@ class npc_volatile_ooze : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_volatile_oozeAI(creature); return GetIcecrownCitadelAI<npc_volatile_oozeAI>(creature);
} }
}; };
@@ -88,14 +88,6 @@ class boss_rotface : public CreatureScript
infectionCooldown = 14000; infectionCooldown = 14000;
} }
void InitializeAI()
{
if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != GetScriptId(ICCScriptName))
me->IsAIEnabled = false;
else if (!me->isDead())
Reset();
}
void Reset() void Reset()
{ {
_Reset(); _Reset();
@@ -237,7 +229,7 @@ class boss_rotface : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new boss_rotfaceAI(creature); return GetIcecrownCitadelAI<boss_rotfaceAI>(creature);
} }
}; };
@@ -287,7 +279,7 @@ class npc_little_ooze : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_little_oozeAI(creature); return GetIcecrownCitadelAI<npc_little_oozeAI>(creature);
} }
}; };
@@ -298,7 +290,7 @@ class npc_big_ooze : public CreatureScript
struct npc_big_oozeAI : public ScriptedAI struct npc_big_oozeAI : public ScriptedAI
{ {
npc_big_oozeAI(Creature* creature) : ScriptedAI(creature) npc_big_oozeAI(Creature* creature) : ScriptedAI(creature), instance(creature->GetInstanceScript())
{ {
} }
@@ -311,14 +303,12 @@ class npc_big_ooze : public CreatureScript
DoCast(me, SPELL_GREEN_ABOMINATION_HITTIN__YA_PROC, true); DoCast(me, SPELL_GREEN_ABOMINATION_HITTIN__YA_PROC, true);
events.ScheduleEvent(EVENT_STICKY_OOZE, 5000); events.ScheduleEvent(EVENT_STICKY_OOZE, 5000);
// register in Rotface's summons - not summoned with Rotface as owner // register in Rotface's summons - not summoned with Rotface as owner
if (InstanceScript* instance = me->GetInstanceScript())
if (Creature* rotface = Unit::GetCreature(*me, instance->GetData64(DATA_ROTFACE))) if (Creature* rotface = Unit::GetCreature(*me, instance->GetData64(DATA_ROTFACE)))
rotface->AI()->JustSummoned(me); rotface->AI()->JustSummoned(me);
} }
void JustDied(Unit* /*killer*/) void JustDied(Unit* /*killer*/)
{ {
if (InstanceScript* instance = me->GetInstanceScript())
if (Creature* rotface = Unit::GetCreature(*me, instance->GetData64(DATA_ROTFACE))) if (Creature* rotface = Unit::GetCreature(*me, instance->GetData64(DATA_ROTFACE)))
rotface->AI()->SummonedCreatureDespawn(me); rotface->AI()->SummonedCreatureDespawn(me);
me->DespawnOrUnsummon(); me->DespawnOrUnsummon();
@@ -355,11 +345,12 @@ class npc_big_ooze : public CreatureScript
private: private:
EventMap events; EventMap events;
InstanceScript* instance;
}; };
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_big_oozeAI(creature); return GetIcecrownCitadelAI<npc_big_oozeAI>(creature);
} }
}; };
@@ -414,8 +405,7 @@ class npc_precious_icc : public CreatureScript
void JustDied(Unit* /*who*/) void JustDied(Unit* /*who*/)
{ {
uint64 rotfaceGUID = instance ? instance->GetData64(DATA_ROTFACE) : 0; if (Creature* rotface = Unit::GetCreature(*me, instance->GetData64(DATA_ROTFACE)))
if (Creature* rotface = Unit::GetCreature(*me, rotfaceGUID))
if (rotface->isAlive()) if (rotface->isAlive())
rotface->AI()->Talk(SAY_PRECIOUS_DIES); rotface->AI()->Talk(SAY_PRECIOUS_DIES);
} }
@@ -427,7 +417,7 @@ class npc_precious_icc : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_precious_iccAI(creature); return GetIcecrownCitadelAI<npc_precious_iccAI>(creature);
} }
}; };
@@ -152,9 +152,6 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript
// of The Damned SAI // of The Damned SAI
void SetData(uint32 type, uint32 data) void SetData(uint32 type, uint32 data)
{ {
if (!instance)
return;
if (type == DATA_DAMNED_KILLS && data == 1) if (type == DATA_DAMNED_KILLS && data == 1)
{ {
if (++_damnedKills == 2) if (++_damnedKills == 2)
@@ -338,7 +335,7 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_highlord_tirion_fordringAI(creature); return GetIcecrownCitadelAI<npc_highlord_tirion_fordringAI>(creature);
} }
}; };
@@ -410,7 +407,7 @@ class npc_rotting_frost_giant : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_rotting_frost_giantAI(creature); return GetIcecrownCitadelAI<npc_rotting_frost_giantAI>(creature);
} }
}; };
@@ -459,7 +456,7 @@ class npc_frost_freeze_trap : public CreatureScript
CreatureAI* GetAI(Creature* creature) const CreatureAI* GetAI(Creature* creature) const
{ {
return new npc_frost_freeze_trapAI(creature); return GetIcecrownCitadelAI<npc_frost_freeze_trapAI>(creature);
} }
}; };
@@ -19,6 +19,8 @@
#define ICECROWN_CITADEL_H_ #define ICECROWN_CITADEL_H_
#include "SpellScript.h" #include "SpellScript.h"
#include "Map.h"
#include "Creature.h"
#define ICCScriptName "instance_icecrown_citadel" #define ICCScriptName "instance_icecrown_citadel"
@@ -370,4 +372,14 @@ class spell_trigger_spell_from_caster : public SpellScriptLoader
uint32 _triggerId; uint32 _triggerId;
}; };
template<class AI>
CreatureAI* GetIcecrownCitadelAI(Creature* creature)
{
if (InstanceMap* instance = creature->GetMap()->ToInstanceMap())
if (instance->GetInstanceScript())
if (instance->GetScriptId() == GetScriptId(ICCScriptName))
return new AI(creature);
return NULL;
}
#endif // ICECROWN_CITADEL_H_ #endif // ICECROWN_CITADEL_H_