Script/Misc: Fix two script crashes when spawned outside instance

also remove redundant null check in boss_lich_king_toc and an unused variable in npc_announcer_toc10
Closes #7785
This commit is contained in:
kaelima
2012-09-16 17:56:18 +02:00
parent bb03cfb0a2
commit b6ff06a796
2 changed files with 13 additions and 15 deletions
@@ -120,11 +120,8 @@ class npc_announcer_toc10 : public CreatureScript
{ {
npc_announcer_toc10AI(Creature* creature) : ScriptedAI(creature) npc_announcer_toc10AI(Creature* creature) : ScriptedAI(creature)
{ {
instance = creature->GetInstanceScript();
} }
InstanceScript* instance;
void Reset() void Reset()
{ {
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -274,7 +271,7 @@ class boss_lich_king_toc : public CreatureScript
void MovementInform(uint32 uiType, uint32 uiId) void MovementInform(uint32 uiType, uint32 uiId)
{ {
if (uiType != POINT_MOTION_TYPE) if (uiType != POINT_MOTION_TYPE || !instance)
return; return;
switch (uiId) switch (uiId)
{ {
@@ -338,20 +335,18 @@ class boss_lich_king_toc : public CreatureScript
if (GameObject* go = instance->instance->GetGameObject(instance->GetData64(GO_ARGENT_COLISEUM_FLOOR))) if (GameObject* go = instance->instance->GetGameObject(instance->GetData64(GO_ARGENT_COLISEUM_FLOOR)))
go->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED); go->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
me->CastSpell(me, 69016, false); me->CastSpell(me, 69016, false);
if (instance)
{
instance->SetData(TYPE_LICH_KING, DONE); instance->SetData(TYPE_LICH_KING, DONE);
Creature* temp = Unit::GetCreature(*me, instance->GetData64(NPC_ANUBARAK)); Creature* temp = Unit::GetCreature(*me, instance->GetData64(NPC_ANUBARAK));
if (!temp || !temp->isAlive()) if (!temp || !temp->isAlive())
temp = me->SummonCreature(NPC_ANUBARAK, AnubarakLoc[0].GetPositionX(), AnubarakLoc[0].GetPositionY(), AnubarakLoc[0].GetPositionZ(), 3, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME); temp = me->SummonCreature(NPC_ANUBARAK, AnubarakLoc[0].GetPositionX(), AnubarakLoc[0].GetPositionY(), AnubarakLoc[0].GetPositionZ(), 3, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME);
instance->SetData(TYPE_EVENT, 0); instance->SetData(TYPE_EVENT, 0);
}
me->DespawnOrUnsummon(); me->DespawnOrUnsummon();
m_uiUpdateTimer = 20000; m_uiUpdateTimer = 20000;
break; break;
} }
} else m_uiUpdateTimer -= uiDiff; } else m_uiUpdateTimer -= uiDiff;
instance->SetData(TYPE_EVENT_TIMER, m_uiUpdateTimer); instance->SetData(TYPE_EVENT_TIMER, m_uiUpdateTimer);
} }
}; };
@@ -125,6 +125,7 @@ public:
void Reset() void Reset()
{ {
if (instance)
instance->SetData(DATA_PRINCEKELESETH_EVENT, NOT_STARTED); instance->SetData(DATA_PRINCEKELESETH_EVENT, NOT_STARTED);
events.Reset(); events.Reset();
@@ -140,12 +141,14 @@ public:
void EnterCombat(Unit* /*who*/) void EnterCombat(Unit* /*who*/)
{ {
me->SetInCombatWithZone(); me->SetInCombatWithZone();
if (instance)
instance->SetData(DATA_PRINCEKELESETH_EVENT, IN_PROGRESS); instance->SetData(DATA_PRINCEKELESETH_EVENT, IN_PROGRESS);
Talk(SAY_START_COMBAT); Talk(SAY_START_COMBAT);
} }
void JustDied(Unit* /*killer*/) void JustDied(Unit* /*killer*/)
{ {
if (instance)
instance->SetData(DATA_PRINCEKELESETH_EVENT, DONE); instance->SetData(DATA_PRINCEKELESETH_EVENT, DONE);
summons.DespawnAll(); summons.DespawnAll();
Talk(SAY_DEATH); Talk(SAY_DEATH);