void UpdateAI(const uint32 uiDiff) { if (m_uiIntroText == 1 || m_uiIntroText == 2 || m_uiIntroText == 3 || m_uiIntroText == 4 || m_uiIntroText == 5 || m_uiIntroText == 6) { if (m_uiIntroTextTimer < uiDiff) { switch(m_uiIntroText) { case 1: DoScriptText(SAY_INTRO_2, me); break; case 2: DoScriptText(SAY_INTRO_3, me); break; case 3: DoScriptText(SAY_INTRO_4, me); break; case 4: DoScriptText(SAY_INTRO_5, me); break; case 5: DoScriptText(SAY_INTRO_6, me); break; case 6: DoScriptText(SAY_INTRO_7, me); break; } m_uiIntroText++; m_uiIntroTextTimer = 10500; } else m_uiIntroTextTimer -= uiDiff; } if (!UpdateVictim()) return; if (m_uiPhase == 1) { if (m_uiShadowBoltTimer < uiDiff) { Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM); DoCast(pTarget, SPELL_SHADOW_BOLT); m_uiShadowBoltTimer = urand(5000,10000); } else m_uiShadowBoltTimer -= uiDiff; if (m_uiDarkEmpoweredTimer < uiDiff) { DoScriptText(SAY_EMPOWERMENT, me); switch(rand() % 2) { case 0: AdherentList(me); break; case 1: FanaticList(me); break; } m_uiDarkEmpoweredTimer = urand(25000,30000); } else m_uiDarkEmpoweredTimer -= uiDiff; if (m_uiSummonWaveTimer < uiDiff) { for (uint8 i = 0; i < RAID_MODE(3,6,3,6); ++i) { me->SummonCreature(RAND(NPC_CULT_FANATIC, NPC_CULT_ADHERENT), SpawnLoc[i][0], SpawnLoc [i][1], SpawnLoc[i][2],0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000); } m_uiSummonWaveTimer = 60000; } else m_uiSummonWaveTimer -= uiDiff; if (!me->HasAura(SPELL_MANA_BARRIER)) DoCast(me, SPELL_MANA_BARRIER); if (!me->HasAura(SPELL_ROOT)) DoCast(me, SPELL_ROOT); if (m_uiPhase == 1 || m_uiPhase == 2) { if (m_uiDominateMindTimer < uiDiff) { uint32 count = RAID_MODE(0,1,1,3); for (uint8 i = 1; i <= count; i++) { Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1, 200, true); if (pTarget && !pTarget->isCharmed()) { DoCast(pTarget, SPELL_DOMINATE_MIND); } } m_uiDominateMindTimer = urand(15000,30000); } else m_uiDominateMindTimer -= uiDiff; if (m_uiDeathandDecayTimer < uiDiff) { Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM); DoCast(pTarget, SPELL_DEATH_AND_DECAY); m_uiDeathandDecayTimer = urand(10000,12000); } else m_uiDeathandDecayTimer -= uiDiff; if (getDifficulty() == RAID_DIFFICULTY_10MAN_HEROIC || getDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC) if (m_uiSummonWaveTimer < uiDiff) { for (uint8 i = 0; i < RAID_MODE(3,3,3,3); ++i) { me->SummonCreature(RAND(NPC_CULT_FANATIC, NPC_CULT_ADHERENT), HeroicSpawnLoc[i][0], HeroicSpawnLoc [i][1], HeroicSpawnLoc[i][2],0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000); } m_uiSummonWaveTimer = 60000; } else m_uiSummonWaveTimer -= uiDiff; } if ((me->GetPower(POWER_MANA)*100 / me->GetMaxPower(POWER_MANA)) < 1) { DoScriptText(SAY_PHASE_2, me); m_uiPhase = 2; } } if (m_uiPhase == 2) { if (me->HasAura(SPELL_MANA_BARRIER)) me->RemoveAurasDueToSpell(SPELL_MANA_BARRIER); if (me->HasAura(SPELL_ROOT)) me->RemoveAurasDueToSpell(SPELL_ROOT); if (m_uiFrostBoltTimer < uiDiff) { DoCast(me->getVictim(), SPELL_FROST_BOLT); m_uiFrostBoltTimer = urand(5000,10000); } else m_uiFrostBoltTimer -= uiDiff; if (m_uiFrostValleyTimer < uiDiff) { DoCastAOE(SPELL_FROST_BOLT_VALLEY); m_uiFrostValleyTimer = urand(30000,35000); } else m_uiFrostValleyTimer -= uiDiff; DoMeleeAttackIfReady(); } }
void UpdateAI(const uint32 uiDiff) { if (!UpdateVictim()) return; if (me->hasUnitState(UNIT_STAT_CASTING)) return; if (m_uiIntroText == 1 || m_uiIntroText == 2 || m_uiIntroText == 3 || m_uiIntroText == 4 || m_uiIntroText == 5 || m_uiIntroText == 6) { if (m_uiIntroTextTimer < uiDiff) { switch(m_uiIntroText) { case 1: DoScriptText(SAY_INTRO_2, me); break; case 2: DoScriptText(SAY_INTRO_3, me); break; case 3: DoScriptText(SAY_INTRO_4, me); break; case 4: DoScriptText(SAY_INTRO_5, me); break; case 5: DoScriptText(SAY_INTRO_6, me); break; case 6: DoScriptText(SAY_INTRO_7, me); break; } m_uiIntroText++; m_uiIntroTextTimer = 10500; } else m_uiIntroTextTimer -= uiDiff; } if (m_uiResetTimer <= uiDiff) { if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 100) EnterEvadeMode(); m_uiResetTimer = 5000; } else m_uiResetTimer -= uiDiff; if (m_uiBerserkTimer < uiDiff) { DoCast(me, SPELL_BERSERK); DoScriptText(SAY_BERSERK, me); m_uiBerserkTimer = 600000; } else m_uiBerserkTimer -= uiDiff; if (m_uiDeathandDecayTimer < uiDiff) { Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1); DoCast(pTarget, RAID_MODE(SPELL_DEATH_AND_DECAY_10_NORMAL,SPELL_DEATH_AND_DECAY_25_NORMAL,SPELL_DEATH_AND_DECAY_10_HEROIC,SPELL_DEATH_AND_DECAY_25_HEROIC)); m_uiDeathandDecayTimer = 11000; } else m_uiDeathandDecayTimer -= uiDiff; if (m_uiDarkEmpoweredTimer < uiDiff) { DoScriptText(SAY_EMPOWERMENT, me); switch(rand() % 2) { case 0: AdherentList(me); break; case 1: FanaticList(me); break; } m_uiDarkEmpoweredTimer = 20000; } else m_uiDarkEmpoweredTimer -= uiDiff; if (m_uiDominateMindTimer < uiDiff) { uint32 count = RAID_MODE(0,1,1,3); for (uint8 i = 1; i <= count; i++) { Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1); if (pTarget && !pTarget->HasAura(71289)) { DoCast(pTarget, SPELL_DOMINATE_MIND); DoScriptText(SAY_DOMINATE_MIND, me); } } m_uiDominateMindTimer = 12000; } else m_uiDominateMindTimer -= uiDiff; if (m_uiPhase == 1) { if (me->GetPower(POWER_MANA) == 100000) { me->MonsterTextEmote(EMOTE_MANA_BARRIER,NULL); } if (m_uiShadowBoltTimer < uiDiff) { Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1); DoCast(pTarget, RAID_MODE(SPELL_SHADOW_BOLT_10_NORMAL,SPELL_SHADOW_BOLT_25_NORMAL,SPELL_SHADOW_BOLT_10_HEROIC,SPELL_SHADOW_BOLT_25_HEROIC)); m_uiShadowBoltTimer = 5000; } else m_uiShadowBoltTimer -= uiDiff; if (m_uiSummonWaveTimer < uiDiff) { if (getDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL || getDifficulty() == RAID_DIFFICULTY_10MAN_HEROIC) { RandomSpawn(); } if (getDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL || getDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC) { me->SummonCreature(NPC_CULT_FANATIC,-619.006,2158.104,50.848,0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,10000); me->SummonCreature(NPC_CULT_ADHERENT,-598.697,2157.767,50.848,0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,10000); me->SummonCreature(NPC_CULT_FANATIC,-577.992,2156.989,50.848,0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,10000); me->SummonCreature(NPC_CULT_ADHERENT,-618.748,2266.648,50.849,0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,10000); me->SummonCreature(NPC_CULT_FANATIC,-598.573,2266.870,50.849,0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,10000); me->SummonCreature(NPC_CULT_ADHERENT,-578.360,2267.210,50.849,0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,10000); me->SummonCreature(RAND(NPC_CULT_FANATIC, NPC_CULT_ADHERENT), -555.643,2211.281,49.476,0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,10000); } m_uiSummonWaveTimer = 60000; } else m_uiSummonWaveTimer -= uiDiff; if ((me->GetPower(POWER_MANA)*100 / me->GetMaxPower(POWER_MANA)) < 1) { me->MonsterTextEmote(EMOTE_MANA_BARRIER,NULL); DoScriptText(SAY_PHASE_2, me); DoResetThreat(); m_uiPhase = 2; } } if (m_uiPhase == 2) { if (me->HasAura(SPELL_MANA_BARRIER)) me->RemoveAurasDueToSpell(SPELL_MANA_BARRIER); if (me->HasAura(SPELL_ROOT)) me->RemoveAurasDueToSpell(SPELL_ROOT); if (m_uiFrostBoltTimer < uiDiff) { Unit* pTarget = SelectUnit(SELECT_TARGET_TOPAGGRO,0); me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_INTERRUPT, false); DoCast(pTarget, RAID_MODE(SPELL_FROST_BOLT_10_NORMAL,SPELL_FROST_BOLT_25_NORMAL,SPELL_FROST_BOLT_10_HEROIC,SPELL_FROST_BOLT_25_HEROIC)); m_uiFrostBoltTimer = 5000; } else m_uiFrostBoltTimer -= uiDiff; if (m_uiFrostValleyTimer < uiDiff) { me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_INTERRUPT, true); DoCastAOE(RAID_MODE(SPELL_FROST_BOLT_VALLEY_10_NORMAL,SPELL_FROST_BOLT_VALLEY_25_NORMAL,SPELL_FROST_BOLT_VALLEY_10_HEROIC,SPELL_FROST_BOLT_VALLEY_25_HEROIC)); m_uiFrostValleyTimer = 15000; } else m_uiFrostValleyTimer -= uiDiff; if (m_uiInsignificanceTimer < uiDiff) { Unit* pTarget = SelectUnit(SELECT_TARGET_TOPAGGRO,0); DoCast(pTarget, SPELL_INSIGNIFICANCE); m_uiInsignificanceTimer = 30000; } else m_uiInsignificanceTimer -= uiDiff; if (m_uiSummonWaveTimer < uiDiff) { if (getDifficulty() == RAID_DIFFICULTY_10MAN_HEROIC) { Unit* pSummoned= NULL; me->SummonCreature(RAND(NPC_CULT_FANATIC, NPC_CULT_ADHERENT), -555.643,2211.281,49.476,0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,10000); } if (getDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC) { RandomSpawn(); } m_uiSummonWaveTimer = 60000; } else m_uiSummonWaveTimer -= uiDiff; if (m_uiShadeTimer < uiDiff) { uint32 count = RAID_MODE(0,1,1,1); for (uint8 i = 1; i <= count; i++) { Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1); DoCast(pTarget, SPELL_SUMMON_SHADE); m_uiShadeTimer = 15000; } } else m_uiShadeTimer -= uiDiff; DoMeleeAttackIfReady(); } }