void UpdateAI(uint32 diff) override { if ((!UpdateVictim() && !events.IsInPhase(PHASE_INTRO)) || !CheckInRoom()) return; events.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING) && !events.IsInPhase(PHASE_INTRO)) return; while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { case EVENT_INTRO_2: Talk(SAY_INTRO_2); break; case EVENT_INTRO_3: Talk(SAY_INTRO_3); break; case EVENT_INTRO_4: Talk(SAY_INTRO_4); break; case EVENT_INTRO_5: Talk(SAY_INTRO_5); break; case EVENT_INTRO_6: Talk(SAY_INTRO_6); break; case EVENT_INTRO_7: Talk(SAY_INTRO_7); break; case EVENT_DEATH_AND_DECAY: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) DoCast(target, SPELL_DEATH_AND_DECAY); events.ScheduleEvent(EVENT_DEATH_AND_DECAY, urand(22000, 30000)); break; case EVENT_DOMINATE_MIND_H: Talk(SAY_DOMINATE_MIND); for (uint8 i = 0; i < _dominateMindCount; i++) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -SPELL_DOMINATE_MIND_H)) DoCast(target, SPELL_DOMINATE_MIND_H); events.ScheduleEvent(EVENT_DOMINATE_MIND_H, urand(40000, 45000)); break; case EVENT_P1_SUMMON_WAVE: SummonWaveP1(); events.ScheduleEvent(EVENT_P1_SUMMON_WAVE, IsHeroic() ? 45000 : 60000, 0, PHASE_ONE); break; case EVENT_P1_SHADOW_BOLT: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) DoCast(target, SPELL_SHADOW_BOLT); events.ScheduleEvent(EVENT_P1_SHADOW_BOLT, urand(5000, 8000), 0, PHASE_ONE); break; case EVENT_P1_REANIMATE_CULTIST: ReanimateCultist(); break; case EVENT_P1_EMPOWER_CULTIST: EmpowerCultist(); events.ScheduleEvent(EVENT_P1_EMPOWER_CULTIST, urand(18000, 25000)); break; case EVENT_P2_FROSTBOLT: DoCastVictim(SPELL_FROSTBOLT); events.ScheduleEvent(EVENT_P2_FROSTBOLT, urand(10000, 11000), 0, PHASE_TWO); break; case EVENT_P2_FROSTBOLT_VOLLEY: DoCastAOE(SPELL_FROSTBOLT_VOLLEY); events.ScheduleEvent(EVENT_P2_FROSTBOLT_VOLLEY, urand(13000, 15000), 0, PHASE_TWO); break; case EVENT_P2_TOUCH_OF_INSIGNIFICANCE: DoCastVictim(SPELL_TOUCH_OF_INSIGNIFICANCE); events.ScheduleEvent(EVENT_P2_TOUCH_OF_INSIGNIFICANCE, urand(9000, 13000), 0, PHASE_TWO); break; case EVENT_P2_SUMMON_SHADE: if (Unit* shadeTarget = SelectTarget(SELECT_TARGET_RANDOM, 1)) { _nextVengefulShadeTargetGUID = shadeTarget->GetGUID(); DoCast(shadeTarget, SPELL_SUMMON_SHADE); } events.ScheduleEvent(EVENT_P2_SUMMON_SHADE, urand(18000, 23000), 0, PHASE_TWO); break; case EVENT_P2_SUMMON_WAVE: SummonWaveP2(); events.ScheduleEvent(EVENT_P2_SUMMON_WAVE, 45000, 0, PHASE_TWO); break; case EVENT_BERSERK: DoCast(me, SPELL_BERSERK); Talk(SAY_BERSERK); break; } } // We should not melee attack when barrier is up if (me->HasAura(SPELL_MANA_BARRIER)) return; DoMeleeAttackIfReady(); }
void UpdateAI(uint32 const diff) { if ((!UpdateVictim() && !(events.GetPhaseMask() & PHASE_INTRO_MASK)) || !CheckInRoom()) return; events.Update(diff); if (me->HasUnitState(UNIT_STAT_CASTING) && !(events.GetPhaseMask() & PHASE_INTRO_MASK)) return; while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { case EVENT_INTRO_2: Talk(SAY_INTRO_2); break; case EVENT_INTRO_3: Talk(SAY_INTRO_3); break; case EVENT_INTRO_4: Talk(SAY_INTRO_4); break; case EVENT_INTRO_5: Talk(SAY_INTRO_5); break; case EVENT_INTRO_6: Talk(SAY_INTRO_6); break; case EVENT_INTRO_7: Talk(SAY_INTRO_7); break; case EVENT_INTRO_FINISH: me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); break; case EVENT_DEATH_AND_DECAY: if (!instance->GetData(DATA_INSTANCE_SPELL_VERIFICATION)) { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) DoCast(target, SPELL_DEATH_AND_DECAY); events.ScheduleEvent(EVENT_DEATH_AND_DECAY, urand(10000, 12000)); } break; case EVENT_DOMINATE_MIND_H: if (!instance->GetData(DATA_INSTANCE_SPELL_VERIFICATION)) { Talk(SAY_DOMINATE_MIND); for (uint8 i = 0; i < _dominateMindCount; i++) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -SPELL_DOMINATE_MIND_H)) DoCast(target, SPELL_DOMINATE_MIND_H); events.ScheduleEvent(EVENT_DOMINATE_MIND_H, urand(40000, 45000)); } break; case EVENT_P1_SUMMON_WAVE: if (!instance->GetData(DATA_INSTANCE_SPELL_VERIFICATION)) { SummonWaveP1(); events.ScheduleEvent(EVENT_P1_SUMMON_WAVE, 60000, 0, PHASE_ONE); } break; case EVENT_P1_SHADOW_BOLT: if (!instance->GetData(DATA_INSTANCE_SPELL_VERIFICATION)) { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) DoCast(target, SPELL_SHADOW_BOLT); events.ScheduleEvent(EVENT_P1_SHADOW_BOLT, urand(5000, 8000), 0, PHASE_ONE); } break; case EVENT_P1_REANIMATE_CULTIST: if (!instance->GetData(DATA_INSTANCE_SPELL_VERIFICATION)) ReanimateCultist(); break; case EVENT_P1_EMPOWER_CULTIST: if (!instance->GetData(DATA_INSTANCE_SPELL_VERIFICATION)) { EmpowerCultist(); events.ScheduleEvent(EVENT_P1_EMPOWER_CULTIST, urand(18000, 25000)); } break; case EVENT_P2_FROSTBOLT: if (!instance->GetData(DATA_INSTANCE_SPELL_VERIFICATION)) { DoCastVictim(SPELL_FROSTBOLT); events.ScheduleEvent(EVENT_P2_FROSTBOLT, urand(10000, 11000), 0, PHASE_TWO); } break; case EVENT_P2_FROSTBOLT_VOLLEY: if (!instance->GetData(DATA_INSTANCE_SPELL_VERIFICATION)) { DoCastAOE(SPELL_FROSTBOLT_VOLLEY); events.ScheduleEvent(EVENT_P2_FROSTBOLT_VOLLEY, urand(13000, 15000), 0, PHASE_TWO); } break; case EVENT_P2_TOUCH_OF_INSIGNIFICANCE: if (!instance->GetData(DATA_INSTANCE_SPELL_VERIFICATION)) { DoCastVictim(SPELL_TOUCH_OF_INSIGNIFICANCE); events.ScheduleEvent(EVENT_P2_TOUCH_OF_INSIGNIFICANCE, urand(9000, 13000), 0, PHASE_TWO); } break; case EVENT_P2_SUMMON_SHADE: if (!instance->GetData(DATA_INSTANCE_SPELL_VERIFICATION)) { if (Unit* shadeTarget = SelectTarget(SELECT_TARGET_RANDOM, 1)) { _nextVengefulShadeTargetGUID = shadeTarget->GetGUID(); DoCast(shadeTarget, SPELL_SUMMON_SHADE); } events.ScheduleEvent(EVENT_P2_SUMMON_SHADE, urand(18000, 23000), 0, PHASE_TWO); } break; case EVENT_P2_SUMMON_WAVE: if (!instance->GetData(DATA_INSTANCE_SPELL_VERIFICATION)) { SummonWaveP2(); events.ScheduleEvent(EVENT_P2_SUMMON_WAVE, 60000, 0, PHASE_TWO); } break; case EVENT_BERSERK: if (!instance->GetData(DATA_INSTANCE_SPELL_VERIFICATION)) { DoCast(me, SPELL_BERSERK); Talk(SAY_BERSERK); } break; } } // We should not melee attack when barrier is up if (me->HasAura(SPELL_MANA_BARRIER)) return; DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 uiDiff) { if(m_uiPhase == 1) DoStartNoMovement(me->getVictim()); else if(m_uiPhase == 2) DoStartMovement(me->getVictim()); if (m_uiIntroTimer <= uiDiff && bIntro && m_uiIntroPhase < 7) { switch (m_uiIntroPhase) { case 1: DoScriptText(SAY_INTRO_2, me); m_uiIntroTimer = 10000; break; case 2: DoScriptText(SAY_INTRO_3, me); m_uiIntroTimer = 7000; break; case 3: DoScriptText(SAY_INTRO_4, me); m_uiIntroTimer = 12000; break; case 4: DoScriptText(SAY_INTRO_5, me); m_uiIntroTimer = 7000; break; case 5: DoScriptText(SAY_INTRO_6, me); m_uiIntroTimer = 11000; break; case 6: DoScriptText(SAY_INTRO_7, me); m_uiIntroTimer = 20000; break; } ++m_uiIntroPhase; } else m_uiIntroTimer -= uiDiff; if (!UpdateVictim()) return; if (m_uiBerserkTimer < uiDiff) { DoCast(me, SPELL_BERSERK); DoScriptText(SAY_BERSERK, me); m_uiBerserkTimer = 600000; } else m_uiBerserkTimer -= uiDiff; if (m_uiCultTimer < uiDiff) { EmpowerCultist(); m_uiCultTimer = urand(20000, 23000); } else m_uiCultTimer -= uiDiff; if (m_uiDeathandDecayTimer < uiDiff) { if(Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1)) DoCast(pTarget, SPELL_DEATH_AND_DECAY); m_uiDeathandDecayTimer = 11000; } else m_uiDeathandDecayTimer -= uiDiff; if (m_uiDominateMindTimer < uiDiff) { for (uint8 i = 1; i <= RAID_MODE(0,1,1,3); ++i) { if(Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1, 100.0f, true, -SPELL_DOMINATE_MIND)) DoCast(pTarget, SPELL_DOMINATE_MIND); } DoScriptText(SAY_DOMINATE_MIND, me); m_uiDominateMindTimer = 15000; } else m_uiDominateMindTimer -= uiDiff; if (m_uiPhase == 1) { if (m_uiShadowBoltTimer < uiDiff) { if(Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1)) DoCast(pTarget, SPELL_SHADOW_BOLT); m_uiShadowBoltTimer = 6000; } else m_uiShadowBoltTimer -= uiDiff; if (m_uiSummonWaveTimer < uiDiff) { if (Difficulty() == RAID_DIFFICULTY_10MAN_NORMAL || Difficulty() == RAID_DIFFICULTY_10MAN_HEROIC) RandomSpawn(); else { DoSummon(CREATURE_FANATIC, SpawnLoc[0]); DoSummon(CREATURE_ADHERENT, SpawnLoc[1]); DoSummon(CREATURE_FANATIC, SpawnLoc[2]); DoSummon(CREATURE_ADHERENT, SpawnLoc[3]); DoSummon(CREATURE_FANATIC, SpawnLoc[4]); DoSummon(CREATURE_ADHERENT, SpawnLoc[5]); DoSummon(RAND(CREATURE_FANATIC,CREATURE_ADHERENT), SpawnLoc[6]); } bFirstSummon = false ? true : true; m_uiSummonWaveTimer = !bFirstSummon ? 10000 : 60000; } else m_uiSummonWaveTimer -= uiDiff; } if (m_uiPhase == 2) { if (m_uiFrostBoltTimer < uiDiff) { DoCast(me->getVictim(), SPELL_FROST_BOLT); m_uiFrostBoltTimer = 10000; } else m_uiFrostBoltTimer -= uiDiff; if (m_uiFrostValleyTimer < uiDiff) { DoCast(SPELL_FROST_BOLT_VALLEY); m_uiFrostValleyTimer = 19000; } else m_uiFrostValleyTimer -= uiDiff; if (m_uiInsignificanceTimer < uiDiff) { DoCast(me->getVictim(), SPELL_INSIGNIFICANCE); m_uiInsignificanceTimer = 8000; } else m_uiInsignificanceTimer -= uiDiff; if (m_uiSummonWaveTimer < uiDiff) { if (Difficulty() == RAID_DIFFICULTY_10MAN_HEROIC) DoSummon(RAND(CREATURE_FANATIC,CREATURE_ADHERENT), SpawnLoc[6]); if (Difficulty() == RAID_DIFFICULTY_25MAN_HEROIC) RandomSpawn(); m_uiSummonWaveTimer = 60000; } else m_uiSummonWaveTimer -= uiDiff; if (m_uiShadeTimer < uiDiff) { DoCast(SPELL_SUMMON_SHADE); m_uiShadeTimer = 15000; } else m_uiShadeTimer -= uiDiff; DoMeleeAttackIfReady(); } }