void SetEnding() { m_uiEndingTimer = 4000; m_uiEndingPhase = 1; EndingPhase(); }
void UpdateAI(const uint32 uiDiff) { if(!UpdateVictim()) return; if (m_uiResetTimer <= uiDiff) { if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 80) EnterEvadeMode(); m_uiResetTimer = 5000; } else m_uiResetTimer -= uiDiff; if(TransitionPhase3 == false) { if (m_uiRandomSpeechTimer < uiDiff) { DoScriptText(SAY_RANDOM, me); m_uiRandomSpeechTimer = 33000; } else m_uiRandomSpeechTimer -= uiDiff; } if (m_uiBerserkTimer < uiDiff) { DoScriptText(SAY_BERSERK, me); DoCast(me, SPELL_BERSERK); m_uiBerserkTimer = 900000; } else m_uiBerserkTimer -= uiDiff; if(m_uiPhase == 1) { if (getDifficulty() == RAID_DIFFICULTY_10MAN_HEROIC || getDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC) { if (m_uiSummonShadowTrap < uiDiff) { Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,1); DoCast(pTarget, SPELL_SUMMON_SHADOW_TRAP); m_uiSummonShadowTrap = 30000; } else m_uiSummonShadowTrap -= uiDiff; } if (m_uiInfestTimer < uiDiff) { Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,1); DoCast(pTarget, SPELL_INFEST); m_uiInfestTimer = 30000; } else m_uiInfestTimer -= uiDiff; if (m_uiPlagueSiphonTimer < uiDiff) { DoCast(me, SPELL_PLAGUE_SIPHON); m_uiPlagueSiphonTimer = 30000; } else m_uiPlagueSiphonTimer -= uiDiff; if (m_uiSummonDrudgeGhoulsTimer < uiDiff) { DoCast(SPELL_SUMMON_DRUDGE_GHOULS); m_uiSummonDrudgeGhoulsTimer = 20000; } else m_uiSummonDrudgeGhoulsTimer -= uiDiff; if (m_uiSummonShamblingHorrorTimer < uiDiff) { DoCast(me, SPELL_SUMMON_SHAMBLING_HORROR); m_uiSummonShamblingHorrorTimer = 40000; } else m_uiSummonShamblingHorrorTimer -= uiDiff; if (m_uiNecroticPlagueTimer < uiDiff) { Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,1); DoCast(pTarget, SPELL_NECROTIC_PLAGUE); m_uiNecroticPlagueTimer = 5000; } else m_uiNecroticPlagueTimer -= uiDiff; } if(TransitionPhase1 == true) { if (m_uiRemorselesWinterTimer < uiDiff) { DoScriptText(SAY_REMORSELESS_WINTER, me); DoCast(me, SPELL_REMORSELES_WINTER); m_uiRemorselesWinterTimer = 90000; } else m_uiRemorselesWinterTimer -= uiDiff; if (m_uiSummonSpiritTimer < uiDiff) { Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,1); DoCast(pTarget, SPELL_SUMMON_RAGING_SPIRIT); m_uiSummonSpiritTimer = 16000; } else m_uiSummonSpiritTimer -= uiDiff; if (m_uiIcePulsSummonTimer < uiDiff) { DoCast(SPELL_SUMMON_ICE_SPEHERE); m_uiIcePulsSummonTimer = 15000; } else m_uiIcePulsSummonTimer -= uiDiff; if (m_uiPainandSufferingTimer < uiDiff) { Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1); DoCast(pTarget, SPELL_PAIN_AND_SUFFERING); m_uiPainandSufferingTimer = 2000; } else m_uiPainandSufferingTimer -= uiDiff; if (m_uiQuakeTimer < uiDiff) { DoScriptText(SAY_BROKEN_ARENA, me); DoCast(SPELL_QUAKE); me->SetReactState(REACT_AGGRESSIVE); me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveChase(me->getVictim()); m_uiPhase = 2; TransitionPhase1 = false; } else m_uiQuakeTimer -= uiDiff; } if(m_uiPhase == 2) { if (m_uiDefileTimer < uiDiff) { Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,1); DoCast(pTarget, SPELL_SPAWN_DEFILE); m_uiDefileTimer = 20000; } else m_uiDefileTimer -= uiDiff; if (m_uiSummonValkyrTimer < uiDiff) { DoScriptText(SAY_SUMMON_VALKYR, me); DoCast(me, SPELL_SUMMON_VALKYR); m_uiSummonValkyrTimer = 20000; } else m_uiSummonValkyrTimer -= uiDiff; if (m_uiSoulReaperTimer < uiDiff) { DoCast(me->getVictim(), SPELL_SOUL_REAPER); m_uiSoulReaperTimer = 20000; } else m_uiSoulReaperTimer -= uiDiff; if (m_uiInfestTimer < uiDiff) { DoCast(me, SPELL_INFEST); m_uiInfestTimer = 30000; } else m_uiInfestTimer -= uiDiff; } if(TransitionPhase2 = true) { if (m_uiRemorselesWinterTimer < uiDiff) { DoScriptText(SAY_REMORSELESS_WINTER, me); DoCast(me, SPELL_REMORSELES_WINTER); m_uiRemorselesWinterTimer = 90000; } else m_uiRemorselesWinterTimer -= uiDiff; if (m_uiSummonSpiritTimer < uiDiff) { Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,1); DoCast(pTarget, SPELL_SUMMON_RAGING_SPIRIT); m_uiSummonSpiritTimer = 16000; } else m_uiSummonSpiritTimer -= uiDiff; if (m_uiIcePulsSummonTimer < uiDiff) { DoCast(me, SPELL_SUMMON_ICE_SPEHERE); m_uiIcePulsSummonTimer = 15000; } else m_uiIcePulsSummonTimer -= uiDiff; if (m_uiPainandSufferingTimer < uiDiff) { Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,1); DoCast(pTarget, SPELL_PAIN_AND_SUFFERING); m_uiPainandSufferingTimer = 3000; } else m_uiPainandSufferingTimer -= uiDiff; if (m_uiQuakeTimer < uiDiff) { DoScriptText(SAY_BROKEN_ARENA, me); DoCast(me, SPELL_QUAKE); me->SetReactState(REACT_AGGRESSIVE); me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveChase(me->getVictim()); m_uiPhase = 3; TransitionPhase2 = false; } else m_uiQuakeTimer -= uiDiff; } if(m_uiPhase == 3) { if (m_uiSummonVileSpiritTimer < uiDiff) { DoCast(me, SPELL_SUMMON_VILE_SPIRIT); m_uiSummonVileSpiritTimer = 30000; } else m_uiSummonVileSpiritTimer -= uiDiff; if (m_uiHarvestSoulTimer < uiDiff) { DoScriptText(SAY_HARVEST_SOUL, me); Unit* pTarget = SelectUnit(SELECT_TARGET_TOPAGGRO, 0); DoCast(pTarget, SPELL_HARVEST_SOULS); m_uiHarvestSoulTimer = 70000; } else m_uiHarvestSoulTimer -= uiDiff; } DoMeleeAttackIfReady(); if (m_uiEndingTimer <= uiDiff) EndingPhase(); else m_uiEndingTimer -= uiDiff; if(me->GetHealth()*100 / me->GetMaxHealth() < 70) { if(TransitionPhase1 = false) { TransitionPhase1 = true; Phasenswitch(); } } if(me->GetHealth()*100 / me->GetMaxHealth() < 40) { if(TransitionPhase2 = false) { m_uiPhase = 3; m_uiRemorselesWinterTimer = 5000; m_uiQuakeTimer = 70000; m_uiIcePulsSummonTimer = 10000; m_uiPainandSufferingTimer = 10000; m_uiSummonSpiritTimer = 18000; Phasenswitch(); TransitionPhase2 = true; } } if(me->GetHealth()*100 / me->GetMaxHealth() < 11) { if(!TriggerSpawned) { pSafeZone = me->SummonCreature(CREATURE_TRIGGER, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_CORPSE_DESPAWN, 360000); pSafeZone->AI()->AttackStart(me); pSafeZone->SetDisplayId(MODEL_INVISIBLE); TriggerSpawned = true; } } if(me->GetHealth()*100 / me->GetMaxHealth() < 10) { if(TransitionPhase3 = false) { TransitionPhase3 = true; SetEnding(); } } }
void UpdateAI(const uint32 uiDiff) { if (m_uiTirionSpawneTimer < uiDiff && !m_bIsTirionSpawned) { me->SummonCreature(CREATURE_TIRION_ICC, 528.552002, -2124.620117, 1040.859985, 3.183670, TEMPSUMMON_CORPSE_DESPAWN, 5000); m_bIsTirionSpawned = true; } else m_uiTirionSpawneTimer -= uiDiff; if(!UpdateVictim()) return; if(!m_bIsDeathPhase) { if (m_uiRandomSpeechTimer < uiDiff) { DoScriptText(RAND(SAY_RANDOM_1,SAY_RANDOM_2), me); m_uiRandomSpeechTimer = urand(30*IN_MILISECONDS,35*IN_MILISECONDS); } else m_uiRandomSpeechTimer -= uiDiff; } if (m_uiBerserkTimer < uiDiff && !m_bIsBerserk) { DoScriptText(SAY_BERSERK, me); DoCast(me, SPELL_BERSERK); m_bIsBerserk = true; } else m_uiBerserkTimer -= uiDiff; /******************** Start Phase 1 Spells ********************/ if(m_uiPhase == 1) { if (m_uiInfestTimer < uiDiff) { DoCast(me, SPELL_INFEST); m_uiInfestTimer = urand(30*IN_MILISECONDS,35*IN_MILISECONDS); } else m_uiInfestTimer -= uiDiff; if (m_uiPlagueSiphonTimer < uiDiff) { DoCast(me, SPELL_PLAGUE_SIPHON); m_uiPlagueSiphonTimer = urand(29*IN_MILISECONDS,30*IN_MILISECONDS); } else m_uiPlagueSiphonTimer -= uiDiff; if (m_uiSummonDrudgeGhoulsTimer < uiDiff) { DoCast(me, SPELL_SUMMON_DRUDGE_GHOULS); m_uiSummonDrudgeGhoulsTimer = urand(20*IN_MILISECONDS,21*IN_MILISECONDS); } else m_uiSummonDrudgeGhoulsTimer -= uiDiff; if (m_uiSummonShamblingHorrorTimer < uiDiff) { DoCast(me, SPELL_SUMMON_SHAMBLING_HORROR); m_uiSummonShamblingHorrorTimer = urand(60*IN_MILISECONDS,61*IN_MILISECONDS); } else m_uiSummonShamblingHorrorTimer -= uiDiff; if (m_uiNecroticPlagueTimer < uiDiff) { if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) DoCast(target, SPELL_NECROTIC_PLAGUE); m_uiNecroticPlagueTimer = urand(5*IN_MILISECONDS,10*IN_MILISECONDS); } else m_uiNecroticPlagueTimer -= uiDiff; } /******************** Start Phase 1.5 Spells ********************/ if(m_uiPhase == 2) { if (m_uiRemorselesWinterTimer < uiDiff) { DoScriptText(SAY_REMORSELESS_WINTER, me); DoCast(me, SPELL_REMORSELES_WINTER); m_uiRemorselesWinterTimer = 90*IN_MILISECONDS; } else m_uiRemorselesWinterTimer -= uiDiff; if (m_uiSummonSpiritTimer < uiDiff) { if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) DoCast(target, SPELL_SUMMON_RAGING_SPIRIT); m_uiSummonSpiritTimer = 16*IN_MILISECONDS; } else m_uiSummonSpiritTimer -= uiDiff; if (m_uiIcePulsSummonTimer < uiDiff) { DoCast(me, SPELL_SUMMON_ICE_SPEHERE); m_uiIcePulsSummonTimer = 15*IN_MILISECONDS; } else m_uiIcePulsSummonTimer -= uiDiff; if (m_uiPainandSufferingTimer < uiDiff) { if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0)) DoCast(target, SPELL_PAIN_AND_SUFFERING); m_uiPainandSufferingTimer = urand(1.5*IN_MILISECONDS,2.0*IN_MILISECONDS); } else m_uiPainandSufferingTimer -= uiDiff; if (m_uiQuakeTimer < uiDiff) { DoScriptText(SAY_BROKEN_ARENA, me); DoCast(me, SPELL_QUAKE); me->SetReactState(REACT_AGGRESSIVE); me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveChase(me->getVictim()); m_uiPhase = 3; } else m_uiQuakeTimer -= uiDiff; } /******************** Start Phase 2 Spells ********************/ if(m_uiPhase == 3) { if (m_uiDefileTimer < uiDiff) { if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) DoCast(target, SPELL_SPAWN_DEFILE); m_uiDefileTimer = 20*IN_MILISECONDS; } else m_uiDefileTimer -= uiDiff; if (m_uiSummonValkyrTimer < uiDiff) { DoScriptText(SAY_SUMMON_VALKYR, me); me->SummonCreature(CREATURE_VALKYR, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()+10, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 99999999); //DoCast(me, SPELL_SUMMON_VALKYR); m_uiSummonValkyrTimer = 20*IN_MILISECONDS; } else m_uiSummonValkyrTimer -= uiDiff; if (m_uiSoulReaperTimer < uiDiff) { DoCast(me->getVictim(), SPELL_SOUL_REAPER); m_uiSoulReaperTimer = 20*IN_MILISECONDS; } else m_uiSoulReaperTimer -= uiDiff; if (m_uiInfestTimer < uiDiff) { DoCast(me, SPELL_INFEST); m_uiInfestTimer = urand(30*IN_MILISECONDS,35*IN_MILISECONDS); } else m_uiInfestTimer -= uiDiff; } /******************** Start Phase 2.5 Spells ********************/ if(m_uiPhase == 4) { if (m_uiRemorselesWinterTimer < uiDiff) { DoScriptText(SAY_REMORSELESS_WINTER, me); DoCast(me, SPELL_REMORSELES_WINTER); m_uiRemorselesWinterTimer = 90*IN_MILISECONDS; } else m_uiRemorselesWinterTimer -= uiDiff; if (m_uiSummonSpiritTimer < uiDiff) { if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) DoCast(target, SPELL_SUMMON_RAGING_SPIRIT); m_uiSummonSpiritTimer = 16*IN_MILISECONDS; } else m_uiSummonSpiritTimer -= uiDiff; if (m_uiIcePulsSummonTimer < uiDiff) { DoCast(me, SPELL_SUMMON_ICE_SPEHERE); m_uiIcePulsSummonTimer = 15*IN_MILISECONDS; } else m_uiIcePulsSummonTimer -= uiDiff; if (m_uiPainandSufferingTimer < uiDiff) { if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) DoCast(target, SPELL_PAIN_AND_SUFFERING); m_uiPainandSufferingTimer = urand(2*IN_MILISECONDS,4*IN_MILISECONDS); } else m_uiPainandSufferingTimer -= uiDiff; if (m_uiQuakeTimer < uiDiff) { DoScriptText(SAY_BROKEN_ARENA, me); DoCast(me, SPELL_QUAKE); me->SetReactState(REACT_AGGRESSIVE); me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveChase(me->getVictim()); m_uiPhase = 5; } else m_uiQuakeTimer -= uiDiff; } /******************** Start Phase 3 Spells ********************/ if(m_uiPhase == 5) { if (m_uiSummonVileSpiritTimer < uiDiff) { DoCast(me, SPELL_SUMMON_VILE_SPIRIT); m_uiSummonVileSpiritTimer = 30*IN_MILISECONDS; } else m_uiSummonVileSpiritTimer -= uiDiff; if (m_uiHarvestSoulTimer < uiDiff) { DoScriptText(SAY_HARVEST_SOUL, me); Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1); DoCast(pTarget, SPELL_HARVEST_SOULS); m_uiHarvestSoulTimer = 70*IN_MILISECONDS; } else m_uiHarvestSoulTimer -= uiDiff; } DoMeleeAttackIfReady(); /*************** Start Ending Phase ******************/ if (m_uiEndingTimer <= uiDiff) EndingPhase(); else m_uiEndingTimer -= uiDiff; /************* Switch Phase 1 to 2 *************/ if (HealthBelowPct(70) && !m_bIsSwitchPhase1) { m_uiPhase = 2; Phasenswitch(); m_bIsSwitchPhase1 = true; } else /************* Switch Phase 2 to 3 **************/ if (HealthBelowPct(40) && !m_bIsSwitchPhase2) { m_uiPhase = 4; m_uiRemorselesWinterTimer = 5*IN_MILISECONDS; m_uiQuakeTimer = 70*IN_MILISECONDS; m_uiIcePulsSummonTimer = 10*IN_MILISECONDS; m_uiPainandSufferingTimer = urand(10*IN_MILISECONDS,11*IN_MILISECONDS); m_uiSummonSpiritTimer = 18*IN_MILISECONDS; Phasenswitch(); m_bIsSwitchPhase2 = true; } else /************* Save Trigger Spawned ************/ if (HealthBelowPct(11) && !m_bIsTriggerSpawned) { pSafeZone = me->SummonCreature(30494, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_CORPSE_DESPAWN, 360000); //safe zone.. raid do not leave combat while mounting pSafeZone->AI()->AttackStart(me); pSafeZone->SetDisplayId(MODEL_INVISIBLE); m_bIsTriggerSpawned = true; } else /************* Switch Phase 5 to 6 Ending Phase *************/ if (HealthBelowPct(10) && !m_bIsDeathPhase) { m_uiPhase = 6; m_bIsDeathPhase = true; SetEnding(); } }