void UpdateAI(const uint32 diff) { /* No target to kill */ if (!UpdateVictim()) return; if (me->HasUnitState(UNIT_STAT_CASTING)) return; events.Update(diff); if (uiPhase == PHASE_1 && !HealthAbovePct(50)) { uiPhase = PHASE_2; EnterPhase2(); } uiPhase = PHASE_1; while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { EnterPhase1(); case EVENT_FIFTY_LASHING: DoCast(me->getVictim(), SPELL_FIFTY_LASHING); events.ScheduleEvent(EVENT_FIFTY_LASHING, 4000); return; case EVENT_PLAGUE_OF_AGES: if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0)) DoCast(target, SPELL_PLAGUE_OF_AGES); events.ScheduleEvent(EVENT_PLAGUE_OF_AGES, 6000); return; default: break; } } DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 uiDiff) { if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) return; if (Phase2 == true) { //Arcane Blast if (ArcaneBlast_Timer < uiDiff) { m_creature->InterruptSpell(CURRENT_GENERIC_SPELL); m_creature->CastSpell(m_creature, m_bIsRegularMode ? SPELL_ARCANE_BLAST : H_SPELL_ARCANE_BLAST, true); ArcaneBlast_Timer = urand(25000, 30000); }else ArcaneBlast_Timer -= uiDiff; //Wrath Of Misery or Blizzard if (SpecialCast_Timer < uiDiff) { m_creature->InterruptSpell(CURRENT_GENERIC_SPELL); switch(urand(0, 1)) { case 0: DoCast(m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0), m_bIsRegularMode ? SPELL_WRATH_OF_MISERY : H_SPELL_WRATH_OF_MISERY); case 1: DoCast(m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0), m_bIsRegularMode ? SPELL_BLIZZARD : H_SPELL_BLIZZARD); } SpecialCast_Timer = urand(10000, 15000); }else ArcaneBlast_Timer -= uiDiff; //Regual cast - frostbolt if (Cast_Timer < uiDiff && ArcaneBlast_Timer > uiDiff && SpecialCast_Timer > uiDiff) { DoCast(m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0), m_bIsRegularMode ? SPELL_FROSTBOLT : H_SPELL_FROSTBOLT); Cast_Timer = 1000; }else Cast_Timer -= uiDiff; //Summon Minions (Heroic) if (SummonMinion_Timer < uiDiff) { if(m_bIsRegularMode) return; uint8 SummonLoc = rand()%POS; if (Creature* pAdd1 = m_creature->SummonCreature(NPC_FETID_TROLL_CORPSE, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000)) pAdd1->AI()->AttackStart(m_creature->getVictim()); if (Creature* pAdd2 = m_creature->SummonCreature(NPC_FETID_TROLL_CORPSE, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000)) pAdd2->AI()->AttackStart(m_creature->getVictim()); if (Creature* pAdd3 = m_creature->SummonCreature(NPC_FETID_TROLL_CORPSE, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000)) pAdd3->AI()->AttackStart(m_creature->getVictim()); if (Creature* pAdd4 = m_creature->SummonCreature(NPC_FETID_TROLL_CORPSE, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000)) pAdd4->AI()->AttackStart(m_creature->getVictim()); if (Creature* pAdd5 = m_creature->SummonCreature(NPC_FETID_TROLL_CORPSE, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000)) pAdd5->AI()->AttackStart(m_creature->getVictim()); SummonMinion_Timer = urand (15000,20000); }else SummonMinion_Timer -= uiDiff; } if (m_creature->getVictim() && Start_Check == 1) { EnterPhase1(); DoCast(m_creature, SPELL_ARCANE_FIELD); Start_Check = 0; } //Phase 1 Waves spawn if (Handler_Spawn < uiDiff && Phase1 == true) { Handler_Count ++; if(Handler_Count < 5) { uint8 SummonLoc = rand()%POS; m_creature->SummonCreature(NPC_CRYSTAL_HANDLER, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000); if (Creature* pAdd1 = m_creature->SummonCreature(NPC_HULKING_CORPSE, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000)) pAdd1->AI()->AttackStart(m_creature->getVictim()); if (Creature* pAdd2 = m_creature->SummonCreature(NPC_RISEN_SHADOWCASTER, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000)) pAdd2->AI()->AttackStart(m_creature->getVictim()); if (Creature* pAdd3 = m_creature->SummonCreature(NPC_FETID_TROLL_CORPSE, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000)) pAdd3->AI()->AttackStart(m_creature->getVictim()); if (Creature* pAdd4 = m_creature->SummonCreature(NPC_FETID_TROLL_CORPSE, PosSummonHandler[SummonLoc][0],PosSummonHandler[SummonLoc][1],PosSummonHandler[SummonLoc][2],0, TEMPSUMMON_TIMED_DESPAWN, 120000)) pAdd4->AI()->AttackStart(m_creature->getVictim()); Handler_Spawn = 17500; } if(Handler_Count == 5) { EnterPhase2(); if (Creature* pTrigger = GetClosestCreatureWithEntry(m_creature, NPC_CRYSTAL_CHANNEL, 85.0f)) pTrigger->ForcedDespawn(); } }else Handler_Spawn -= uiDiff; }