diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/scripts/northrend/azjol_nerub/ahnkahet/boss_prince_taldaram.cpp | 64 |
1 files changed, 39 insertions, 25 deletions
diff --git a/src/scripts/northrend/azjol_nerub/ahnkahet/boss_prince_taldaram.cpp b/src/scripts/northrend/azjol_nerub/ahnkahet/boss_prince_taldaram.cpp index cea11171861..1d3e8ac9cd3 100644 --- a/src/scripts/northrend/azjol_nerub/ahnkahet/boss_prince_taldaram.cpp +++ b/src/scripts/northrend/azjol_nerub/ahnkahet/boss_prince_taldaram.cpp @@ -96,12 +96,7 @@ struct boss_taldaramAI : public ScriptedAI uint32 uiFlamesphereTimer; uint32 uiPhaseTimer; - uint64 uiSphereGuids[2]; - - Unit *pEmbraceTarget; - Unit *pSphereTarget; - - Creature* pSpheres[3]; + uint64 uiEmbraceTarget; CombatPhase Phase; @@ -116,7 +111,7 @@ struct boss_taldaramAI : public ScriptedAI uiEmbraceTakenDamage = 0; Phase = NORMAL; uiPhaseTimer = 0; - pEmbraceTarget = NULL; + uiEmbraceTarget = 0; if (pInstance) pInstance->SetData(DATA_PRINCE_TALDARAM_EVENT, NOT_STARTED); } @@ -137,9 +132,12 @@ struct boss_taldaramAI : public ScriptedAI switch (Phase) { case CASTING_FLAME_SPHERES: + { + Creature* pSpheres[3]; + //DoCast(m_creature, SPELL_FLAME_SPHERE_SUMMON_1); pSpheres[0] = DoSpawnCreature(CREATURE_FLAME_SPHERE, 0, 0, 5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000); - pSphereTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); + Unit *pSphereTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); if (pSphereTarget && pSpheres[0]) { float angle,x,y; @@ -170,9 +168,10 @@ struct boss_taldaramAI : public ScriptedAI Phase = NORMAL; uiPhaseTimer = 0; - break; + break; + } case JUST_VANISHED: - if(pEmbraceTarget) + if (Unit *pEmbraceTarget = GetEmbraceTarget()) { m_creature->GetMotionMaster()->Clear(); m_creature->SetSpeed(MOVE_WALK, 2.0f, true); @@ -180,21 +179,21 @@ struct boss_taldaramAI : public ScriptedAI } Phase = VANISHED; uiPhaseTimer = 1300; - break; + break; case VANISHED: - if(pEmbraceTarget) + if (Unit *pEmbraceTarget = GetEmbraceTarget()) DoCast(pEmbraceTarget, DUNGEON_MODE(SPELL_EMBRACE_OF_THE_VAMPYR, H_SPELL_EMBRACE_OF_THE_VAMPYR)); - m_creature->GetMotionMaster()->Clear(); - m_creature->SetSpeed(MOVE_WALK, 1.0f, true); - m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim()); + m_creature->GetMotionMaster()->Clear(); + m_creature->SetSpeed(MOVE_WALK, 1.0f, true); + m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim()); Phase = FEEDING; uiPhaseTimer = 20000; - break; + break; case FEEDING: Phase = NORMAL; uiPhaseTimer = 0; - pEmbraceTarget = NULL; - break; + uiEmbraceTarget = 0; + break; case NORMAL: if (uiBloodthirstTimer <= diff) { @@ -231,7 +230,9 @@ struct boss_taldaramAI : public ScriptedAI DoCast(m_creature, SPELL_VANISH); Phase = JUST_VANISHED; uiPhaseTimer = 500; - pEmbraceTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); + if (Unit* pEmbraceTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) + uiEmbraceTarget = pEmbraceTarget->GetGUID(); + } uiVanishTimer = urand(25000,35000); } else uiVanishTimer -= diff; @@ -244,6 +245,8 @@ struct boss_taldaramAI : public ScriptedAI void DamageTaken(Unit* done_by, uint32 &damage) { + Unit* pEmbraceTarget = GetEmbraceTarget(); + if (Phase == FEEDING && pEmbraceTarget && pEmbraceTarget->isAlive()) { uiEmbraceTakenDamage += damage; @@ -251,7 +254,7 @@ struct boss_taldaramAI : public ScriptedAI { Phase = NORMAL; uiPhaseTimer = 0; - pEmbraceTarget = NULL; + uiEmbraceTarget = 0; m_creature->CastStop(); } } @@ -282,11 +285,13 @@ struct boss_taldaramAI : public ScriptedAI { if (victim == m_creature) return; + + Unit* pEmbraceTarget = GetEmbraceTarget(); if (Phase == FEEDING && pEmbraceTarget && victim == pEmbraceTarget) { Phase = NORMAL; uiPhaseTimer = 0; - pEmbraceTarget = NULL; + uiEmbraceTarget = 0; } DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), m_creature); } @@ -295,22 +300,31 @@ struct boss_taldaramAI : public ScriptedAI { if(!pInstance) return false; + + uint64 uiSphereGuids[2]; uiSphereGuids[0] = pInstance->GetData64(DATA_SPHERE1); uiSphereGuids[1] = pInstance->GetData64(DATA_SPHERE2); - GameObject *pSpheres[2]; for (uint8 i=0; i < 2; ++i) { - pSpheres[i] = pInstance->instance->GetGameObject(uiSphereGuids[i]); - if (!pSpheres[i]) + GameObject *pSpheres = pInstance->instance->GetGameObject(uiSphereGuids[i]); + if (!pSpheres) return false; - if (pSpheres[i]->GetGoState() != GO_STATE_ACTIVE) + if (pSpheres->GetGoState() != GO_STATE_ACTIVE) return false; } RemovePrison(); return true; } + Unit* GetEmbraceTarget() + { + if (!uiEmbraceTarget) + return NULL; + + return Unit::GetUnit(*m_creature, uiEmbraceTarget); + } + void RemovePrison() { if(!pInstance) |