diff options
Diffstat (limited to 'src/scripts/outland')
4 files changed, 91 insertions, 77 deletions
diff --git a/src/scripts/outland/auchindoun/auchenai_crypts/boss_shirrak_the_dead_watcher.cpp b/src/scripts/outland/auchindoun/auchenai_crypts/boss_shirrak_the_dead_watcher.cpp index fe8e00cea87..29808075fce 100644 --- a/src/scripts/outland/auchindoun/auchenai_crypts/boss_shirrak_the_dead_watcher.cpp +++ b/src/scripts/outland/auchindoun/auchenai_crypts/boss_shirrak_the_dead_watcher.cpp @@ -49,7 +49,7 @@ struct boss_shirrak_the_dead_watcherAI : public ScriptedAI uint32 Carnivorousbite_Timer; uint32 FocusFire_Timer; - Unit *focusedTarget; + uint64 FocusedTargetGUID; void Reset() { @@ -57,7 +57,7 @@ struct boss_shirrak_the_dead_watcherAI : public ScriptedAI Attractmagic_Timer = 28000; Carnivorousbite_Timer = 10000; FocusFire_Timer = 17000; - focusedTarget = NULL; + FocusedTargetGUID = 0; } void EnterCombat(Unit *who) @@ -72,8 +72,8 @@ struct boss_shirrak_the_dead_watcherAI : public ScriptedAI summoned->SetLevel(m_creature->getLevel()); summoned->addUnitState(UNIT_STAT_ROOT); - if (focusedTarget) - summoned->AI()->AttackStart(focusedTarget); + if (Unit *pFocusedTarget = Unit::GetUnit(*m_creature, FocusedTargetGUID)) + summoned->AI()->AttackStart(pFocusedTarget); } } @@ -127,7 +127,7 @@ struct boss_shirrak_the_dead_watcherAI : public ScriptedAI Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,1); if (pTarget && pTarget->GetTypeId() == TYPEID_PLAYER && pTarget->isAlive()) { - focusedTarget = pTarget; + FocusedTargetGUID = pTarget->GetGUID(); m_creature->SummonCreature(ENTRY_FOCUS_FIRE,pTarget->GetPositionX(),pTarget->GetPositionY(),pTarget->GetPositionZ(),0,TEMPSUMMON_TIMED_DESPAWN,5500); // TODO: Find better way to handle emote diff --git a/src/scripts/outland/auchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp b/src/scripts/outland/auchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp index f8f015634b6..346970b86b6 100644 --- a/src/scripts/outland/auchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp +++ b/src/scripts/outland/auchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp @@ -66,13 +66,13 @@ struct mob_voidtravelerAI : public ScriptedAI { } - Unit *Vorpil; + uint64 VorpilGUID; uint32 move; bool sacrificed; void Reset() { - Vorpil = NULL; + VorpilGUID = 0; move = 0; sacrificed = false; } @@ -81,13 +81,20 @@ struct mob_voidtravelerAI : public ScriptedAI void UpdateAI(const uint32 diff) { - if (!Vorpil) + if (!VorpilGUID) { m_creature->Kill(m_creature); return; } if (move <= diff) { + Creature *Vorpil = Unit::GetCreature(*m_creature, VorpilGUID); + if(!Vorpil) + { + VorpilGUID = 0; + return; + } + if (sacrificed) { m_creature->AddAura(DUNGEON_MODE(SPELL_EMPOWERING_SHADOWS, H_SPELL_EMPOWERING_SHADOWS), Vorpil); @@ -197,7 +204,7 @@ struct boss_grandmaster_vorpilAI : public ScriptedAI void JustSummoned(Creature *summoned) { if (summoned && summoned->GetEntry() == MOB_VOID_TRAVELER) - CAST_AI(mob_voidtravelerAI, summoned->AI())->Vorpil = m_creature; + CAST_AI(mob_voidtravelerAI, summoned->AI())->VorpilGUID = m_creature->GetGUID(); } void KilledUnit(Unit *victim) diff --git a/src/scripts/outland/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp b/src/scripts/outland/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp index d16f9a9e57f..c3d50b78fda 100644 --- a/src/scripts/outland/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp +++ b/src/scripts/outland/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp @@ -574,7 +574,8 @@ struct mob_enchanted_elementalAI : public ScriptedAI uint32 move; uint32 phase; float x, y, z; - Creature *Vashj; + + uint64 VashjGUID; void Reset() { @@ -582,7 +583,8 @@ struct mob_enchanted_elementalAI : public ScriptedAI m_creature->SetSpeed(MOVE_RUN,0.6);//run move = 0; phase = 1; - Vashj = NULL; + + VashjGUID = 0; for (int i = 0; i<8; ++i)//search for nearest waypoint (up on stairs) { @@ -603,7 +605,7 @@ struct mob_enchanted_elementalAI : public ScriptedAI } } if (pInstance) - Vashj = Unit::GetCreature((*m_creature), pInstance->GetData64(DATA_LADYVASHJ)); + VashjGUID = pInstance->GetData64(DATA_LADYVASHJ); } void EnterCombat(Unit *who) { return; } @@ -615,10 +617,8 @@ struct mob_enchanted_elementalAI : public ScriptedAI if (!pInstance) return; - if (!Vashj) - { + if (!VashjGUID) return; - } if (move <= diff) { @@ -638,10 +638,13 @@ struct mob_enchanted_elementalAI : public ScriptedAI if (m_creature->IsWithinDist3d(MIDDLE_X, MIDDLE_Y, MIDDLE_Z, 3)) DoCast(m_creature, SPELL_SURGE); } - if (!Vashj->isInCombat() || CAST_AI(boss_lady_vashjAI, Vashj->AI())->Phase != 2 || Vashj->isDead()) + if (Creature *Vashj = Unit::GetCreature(*m_creature, VashjGUID)) { - //call Unsummon() - m_creature->Kill(m_creature); + if (!Vashj->isInCombat() || CAST_AI(boss_lady_vashjAI, Vashj->AI())->Phase != 2 || Vashj->isDead()) + { + //call Unsummon() + m_creature->Kill(m_creature); + } } move = 1000; } else move -= diff; diff --git a/src/scripts/outland/tempest_keep/arcatraz/instance_arcatraz.cpp b/src/scripts/outland/tempest_keep/arcatraz/instance_arcatraz.cpp index 039ee4a913d..0a903f6b84f 100644 --- a/src/scripts/outland/tempest_keep/arcatraz/instance_arcatraz.cpp +++ b/src/scripts/outland/tempest_keep/arcatraz/instance_arcatraz.cpp @@ -51,15 +51,14 @@ struct instance_arcatraz : public ScriptedInstance uint32 m_auiEncounter[MAX_ENCOUNTER]; - GameObject *Containment_Core_Security_Field_Alpha; - GameObject *Containment_Core_Security_Field_Beta; - GameObject *Pod_Alpha; - GameObject *Pod_Gamma; - GameObject *Pod_Beta; - GameObject *Pod_Delta; - GameObject *Pod_Omega; - GameObject *Wardens_Shield; - + 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; @@ -67,15 +66,14 @@ struct instance_arcatraz : public ScriptedInstance { memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); - Containment_Core_Security_Field_Alpha = NULL; - Containment_Core_Security_Field_Beta = NULL; - Pod_Alpha = NULL; - Pod_Beta = NULL; - Pod_Delta = NULL; - Pod_Gamma = NULL; - Pod_Omega = NULL; - Wardens_Shield = NULL; - + 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; } @@ -92,15 +90,15 @@ struct instance_arcatraz : public ScriptedInstance { switch(pGo->GetEntry()) { - case CONTAINMENT_CORE_SECURITY_FIELD_ALPHA: Containment_Core_Security_Field_Alpha = pGo; break; - case CONTAINMENT_CORE_SECURITY_FIELD_BETA: Containment_Core_Security_Field_Beta = pGo; break; - case SEAL_SPHERE: GoSphereGUID = pGo->GetGUID(); break; - case POD_ALPHA: Pod_Alpha = pGo; break; - case POD_BETA: Pod_Beta = pGo; break; - case POD_DELTA: Pod_Delta = pGo; break; - case POD_GAMMA: Pod_Gamma = pGo; break; - case POD_OMEGA: Pod_Omega = pGo; break; - //case WARDENS_SHIELD: Wardens_Shield = pGo; break; + case CONTAINMENT_CORE_SECURITY_FIELD_ALPHA: Containment_Core_Security_Field_AlphaGUID = pGo->GetGUID(); break; + case CONTAINMENT_CORE_SECURITY_FIELD_BETA: Containment_Core_Security_Field_BetaGUID = pGo->GetGUID(); break; + case POD_ALPHA: Pod_AlphaGUID = pGo->GetGUID(); break; + case POD_GAMMA: Pod_GammaGUID = pGo->GetGUID(); break; + case POD_BETA: Pod_BetaGUID = pGo->GetGUID(); break; + case POD_DELTA: Pod_DeltaGUID = pGo->GetGUID(); break; + case POD_OMEGA: Pod_OmegaGUID = pGo->GetGUID(); break; + case SEAL_SPHERE: GoSphereGUID = pGo->GetGUID(); break; + //case WARDENS_SHIELD: Wardens_ShieldGUID = pGo->GetGUID(); break; } } @@ -120,15 +118,19 @@ struct instance_arcatraz : public ScriptedInstance case TYPE_DALLIAH: if (data == DONE) - if (Containment_Core_Security_Field_Beta) - Containment_Core_Security_Field_Beta->UseDoorOrButton(); + { + if (GameObject *pGo = instance->GetGameObject(Containment_Core_Security_Field_BetaGUID)) + pGo->UseDoorOrButton(); + } m_auiEncounter[1] = data; break; case TYPE_SOCCOTHRATES: if (data == DONE) - if (Containment_Core_Security_Field_Alpha) - Containment_Core_Security_Field_Alpha->UseDoorOrButton(); + { + if (GameObject *pGo = instance->GetGameObject(Containment_Core_Security_Field_AlphaGUID)) + pGo->UseDoorOrButton(); + } m_auiEncounter[2] = data; break; @@ -146,43 +148,53 @@ struct instance_arcatraz : public ScriptedInstance case TYPE_WARDEN_1: if (data == IN_PROGRESS) - if (Pod_Alpha) - Pod_Alpha->UseDoorOrButton(); + if (GameObject *pGo = instance->GetGameObject(Pod_AlphaGUID)) + pGo->UseDoorOrButton(); m_auiEncounter[4] = data; break; case TYPE_WARDEN_2: if (data == IN_PROGRESS) - if (Pod_Beta) - Pod_Beta->UseDoorOrButton(); + { + if (GameObject *pGo = instance->GetGameObject(Pod_BetaGUID)) + pGo->UseDoorOrButton(); + } m_auiEncounter[5] = data; break; case TYPE_WARDEN_3: if (data == IN_PROGRESS) - if (Pod_Delta) - Pod_Delta->UseDoorOrButton(); + { + if (GameObject *pGo = instance->GetGameObject(Pod_DeltaGUID)) + pGo->UseDoorOrButton(); + } m_auiEncounter[6] = data; break; case TYPE_WARDEN_4: if (data == IN_PROGRESS) - if (Pod_Gamma) - Pod_Gamma->UseDoorOrButton(); + { + if (GameObject *pGo = instance->GetGameObject(Pod_GammaGUID)) + pGo->UseDoorOrButton(); + } m_auiEncounter[7] = data; break; case TYPE_WARDEN_5: if (data == IN_PROGRESS) - if (Pod_Omega) - Pod_Omega->UseDoorOrButton(); + { + if (GameObject *pGo = instance->GetGameObject(Pod_OmegaGUID)) + pGo->UseDoorOrButton(); + } m_auiEncounter[8] = data; break; case TYPE_SHIELD_OPEN: if (data == IN_PROGRESS) - if (Wardens_Shield) - Wardens_Shield->UseDoorOrButton(); + { + if (GameObject *pGo = instance->GetGameObject(Wardens_ShieldGUID)) + pGo->UseDoorOrButton(); + } break; } } @@ -191,18 +203,12 @@ struct instance_arcatraz : public ScriptedInstance { switch(type) { - case TYPE_HARBINGERSKYRISS: - return m_auiEncounter[3]; - case TYPE_WARDEN_1: - return m_auiEncounter[4]; - case TYPE_WARDEN_2: - return m_auiEncounter[5]; - case TYPE_WARDEN_3: - return m_auiEncounter[6]; - case TYPE_WARDEN_4: - return m_auiEncounter[7]; - case TYPE_WARDEN_5: - return m_auiEncounter[8]; + case TYPE_HARBINGERSKYRISS: return m_auiEncounter[3]; + case TYPE_WARDEN_1: return m_auiEncounter[4]; + case TYPE_WARDEN_2: return m_auiEncounter[5]; + case TYPE_WARDEN_3: return m_auiEncounter[6]; + case TYPE_WARDEN_4: return m_auiEncounter[7]; + case TYPE_WARDEN_5: return m_auiEncounter[8]; } return 0; } @@ -211,10 +217,8 @@ struct instance_arcatraz : public ScriptedInstance { switch(data) { - case DATA_MELLICHAR: - return MellicharGUID; - case DATA_SPHERE_SHIELD: - return GoSphereGUID; + case DATA_MELLICHAR: return MellicharGUID; + case DATA_SPHERE_SHIELD: return GoSphereGUID; } return 0; } |
