void UpdateAI(uint32 diff) override { if (!events.IsInPhase(PHASE_INTRO) && (!UpdateVictim() || !CheckInRoom())) return; events.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING)) return; while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { case EVENT_ANRAPHET_APPEAR: me->GetMotionMaster()->MoveSmoothPath(POINT_ANRAPHET_ACTIVATE, AnraphetPath, AnraphetPathSize); break; case EVENT_ANRAPHET_ACTIVATE: Talk(ANRAPHET_SAY_INTRO); events.ScheduleEvent(EVENT_ANRAPHET_DESTRUCTION, Seconds(10), 0, PHASE_INTRO); // Note: 10800 ms break; case EVENT_ANRAPHET_DESTRUCTION: DoCastAOE(SPELL_DESTRUCTION_PROTOCOL); events.ScheduleEvent(EVENT_ANRAPHET_READY, Seconds(6), 0, PHASE_INTRO); // Note: 6400 ms break; case EVENT_ANRAPHET_READY: me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); events.SetPhase(PHASE_COMBAT); ScheduleCombatEvents(); break; case EVENT_ANRAPHET_NEMESIS_STRIKE: DoCastVictim(SPELL_NEMESIS_STRIKE); events.ScheduleEvent(EVENT_ANRAPHET_NEMESIS_STRIKE, Seconds(21), 0, PHASE_COMBAT); break; case EVENT_ANRAPHET_ALPHA_BEAMS: DoCastSelf(SPELL_ALPHA_BEAMS); events.ScheduleEvent(EVENT_ANRAPHET_CRUMBLING_RUIN, Seconds(12), 0, PHASE_COMBAT); events.ScheduleEvent(EVENT_ANRAPHET_ALPHA_BEAMS, Seconds(40), Seconds(45), 0, PHASE_COMBAT); break; case EVENT_ANRAPHET_OMEGA_STANCE: DoCastSelf(SPELL_OMEGA_STANCE_SUMMON); DoCastSelf(SPELL_OMEGA_STANCE); Talk(ANRAPHET_SAY_OMEGA_STANCE); events.ScheduleEvent(EVENT_ANRAPHET_OMEGA_STANCE, Seconds(45), Seconds(50), 0, PHASE_COMBAT); events.ScheduleEvent(EVENT_ANRAPHET_CRUMBLING_RUIN, Seconds(13), 0, PHASE_COMBAT); break; case EVENT_ANRAPHET_CRUMBLING_RUIN: DoCastSelf(SPELL_CRUMBLING_RUIN); break; } if (me->HasUnitState(UNIT_STATE_CASTING)) return; } if (UpdateVictim()) DoMeleeAttackIfReady(); }
void UpdateAI(uint32 diff) override { if ((events.GetPhaseMask() & PHASE_MASK_COMBAT) && (!UpdateVictim() || !CheckInRoom())) return; events.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING)) return; while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { case EVENT_ANRAPHET_APPEAR: me->SetWalk(true); me->GetMotionMaster()->MovePoint(POINT_ANRAPHET_ACTIVATE, AnraphetActivatePos); break; case EVENT_ANRAPHET_ACTIVATE: me->SetWalk(false); Talk(ANRAPHET_SAY_INTRO); events.ScheduleEvent(EVENT_ANRAPHET_DESTROY, 17500, 0, PHASE_INTRO); return; case EVENT_ANRAPHET_DESTROY: DoCastAOE(SPELL_DESTRUCTION_PROTOCOL); events.ScheduleEvent(EVENT_ANRAPHET_READY, 6000, 0, PHASE_INTRO); break; case EVENT_ANRAPHET_READY: me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); events.SetPhase(PHASE_COMBAT); ScheduleCombatEvents(); break; case EVENT_ANRAPHET_NEMESIS_STRIKE: DoCastVictim(SPELL_NEMESIS_STRIKE); events.ScheduleEvent(EVENT_ANRAPHET_NEMESIS_STRIKE, 21500, 0, PHASE_COMBAT); break; case EVENT_ANRAPHET_ALPHA_BEAMS: DoCast(me, SPELL_ALPHA_BEAMS); events.ScheduleEvent(EVENT_ANRAPHET_CRUMBLING_RUIN, 12500, 0, PHASE_COMBAT); events.ScheduleEvent(EVENT_ANRAPHET_ALPHA_BEAMS, urand(40000, 45000), 0, PHASE_COMBAT); break; case EVENT_ANRAPHET_OMEGA_STANCE: DoCast(me, SPELL_OMEGA_STANCE_SUMMON); DoCast(me, SPELL_OMEGA_STANCE); Talk(ANRAPHET_SAY_OMEGA_STANCE); events.ScheduleEvent(EVENT_ANRAPHET_OMEGA_STANCE, urand(45000, 50000), 0, PHASE_COMBAT); events.ScheduleEvent(EVENT_ANRAPHET_CRUMBLING_RUIN, 13000, 0, PHASE_COMBAT); break; case EVENT_ANRAPHET_CRUMBLING_RUIN: DoCast(me, SPELL_CRUMBLING_RUIN); break; } } if (events.GetPhaseMask() & PHASE_MASK_COMBAT) DoMeleeAttackIfReady(); }
void Reset() override { _Reset(); me->SetWalk(false); events.SetPhase(PHASE_INTRO); if (instance->GetData(DATA_DEAD_ELEMENTALS) == 4) { // Set to combat automatically, Brann's event won't repeat me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); events.SetPhase(PHASE_COMBAT); ScheduleCombatEvents(); me->SetHomePosition(AnraphetActivatePos); } }
void Reset() override { _Reset(); // Vault of Lights not yet done? //if (instance->GetData(DATA_DEAD_ELEMENTALS) < 4) if (instance->GetBossState(DATA_VAULT_OF_LIGHTS) != DONE) return; me->SetHomePosition(AnraphetActivatePos); me->GetMotionMaster()->MoveTargetedHome(); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); events.SetPhase(PHASE_COMBAT); ScheduleCombatEvents(); }