void SummonedCreatureDespawn(Creature* summon) { if (summon->GetEntry() == 46842) { killedEggs++; if (killedEggs >= 2 && phase == PHASE_TWO) { phase = PHASE_THREE; events.CancelEventGroup(PHASE_TWO); me->CastStop(); me->RemoveAura(SPELL_MANA_BARRIER); if (Creature* calen = me->FindNearestCreature(46277, 100.0f, true)) { calen->CastStop(); calen->CastSpell(calen, SPELL_ESSENCE_OF_THE_RED, true); calen->DisappearAndDie(); } events.ScheduleEvent(EVENT_WRACK, 15000, PHASE_THREE); events.ScheduleEvent(EVENT_FLAME_BREATH, 20000, PHASE_THREE); events.ScheduleEvent(EVENT_TWILIGHT_SLICER, 28000, PHASE_THREE); events.ScheduleEvent(EVENT_CHECK_MELEE, 2000, PHASE_THREE); events.ScheduleEvent(EVENT_WHELP, 15000, PHASE_THREE); } } }
void DoAction( int32 action) { switch (action) { case ACTION_AZURE_SERPENT_P_1: movementTimer = 100; break; case ACTION_AZURE_SERPENT_P_2: events.CancelEventGroup(PHASE_ONE); events.ScheduleEvent(EVENT_MAGNETIC_SHROUD, urand(10000, 15000), PHASE_TWO); events.ScheduleEvent(EVENT_LIGHTNING_BREATH, urand (2500, 7500), PHASE_TWO); me->SetReactState(REACT_AGGRESSIVE); me->GetMotionMaster()->MovePoint(4, azureSerpentPositions[3].GetPositionX(), azureSerpentPositions[3].GetPositionY(), azureSerpentPositions[3].GetPositionZ()); me->RemoveAurasDueToSpell(SPELL_LIGHTNING_SHIELD); DoZoneInCombat(); break; case ACTION_AZURE_SERPENT_RESET: if (!me->IsAlive()) me->Respawn(); me->CombatStop(); Reset(); me->NearTeleportTo(3829.19f, 2927.29f, 705.71f, 0.0f); break; } }
void DamageTaken(Unit* who, uint32& damage) { if (me->GetHealthPct() <= 30.0f && phase == PHASE_ONE) { phase = PHASE_TWO; events.CancelEventGroup(PHASE_ONE); me->RemoveAura(SPELL_DRAINED); DoCast(SPELL_MANA_BARRIER); events.ScheduleEvent(EVENT_START_MAGIC_FIGHT, 2000, PHASE_TWO); events.ScheduleEvent(EVENT_TWILIGHT_DRAKE, urand(18000, 30000), PHASE_TWO); events.ScheduleEvent(EVENT_SPITECALLER, urand(18000, 35000), PHASE_TWO); } }
void DoAction(const int32 action) { switch (action) { case ACTION_SIMON_ROUND_FINISHED: listening = false; DoCast(SPELL_VISUAL_START_AI_LEVEL); GiveRewardForLevel(gameLevel); _events.CancelEventGroup(0); if (gameLevel == 10) ResetNode(); else _events.ScheduleEvent(EVENT_SIMON_SETUP_PRE_GAME, 1000); break; case ACTION_SIMON_CORRECT_FULL_SEQUENCE: gameLevel++; DoAction(ACTION_SIMON_ROUND_FINISHED); break; case ACTION_SIMON_WRONG_SEQUENCE: GivePunishment(); DoAction(ACTION_SIMON_ROUND_FINISHED); break; } }
void UpdateAI(const uint32 diff) { // Falled to water in out of platform = die CheckPlayersInWater(); if (!UpdateVictim()) return; events.Update(diff); switch (events.ExecuteEvent()) { case EVENT_HARD_STARE: if (me->getVictim()) { DoPlaySoundToSet(me, 35334); // wound DoCast(me->getVictim(),SPELL_HARD_STARE); } events.ScheduleEvent(EVENT_HARD_STARE, 13000); break; case EVENT_GAZE: { Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 2.0f, true); if (!target) if (!me->HasUnitState(UNIT_STATE_CASTING)) DoCast(SPELL_GAZE); events.ScheduleEvent(EVENT_GAZE, 2000); break; } case EVENT_BERSERK: events.CancelEventGroup(0); // clear all events me->AI()->Talk(SAY_BERSERK); DoCast(SPELL_BERSERK_KILLALL); break; // Spectrum phase start case EVENT_LIGHT_SPECTRUM_SAY_SUMMON: FogKilled = 0; me->AI()->Talk(SAY_SUMMON_SPECTRUM); SummonSomeCreatures(RED_FOG, 3, 10.0f); // 3 red fog SummonSomeCreatures(BLUE_FOG, 1, 10.0f); // 1 blue fog events.ScheduleEvent(EVENT_LIGHT_SPECTRUM, 3000); break; case EVENT_LIGHT_SPECTRUM: me->AI()->Talk(SAY_SPECTRUM_INF); SummonBeamsEye(); break; // Spectrum phase end // Disintegration Beam phase start case EVENT_MAZE_TIME: Maze(true); events.ScheduleEvent(EVENT_MAZE_ORIENTATION, 5000); events.ScheduleEvent(EVENT_MAZE_END, 47000); events.ScheduleEvent(EVENT_MIND_DAGGERS, 6000); SendMazeToEyes(true); break; case EVENT_MAZE_ORIENTATION: UpdateOrientation(); TryKillPlayerInFront(); events.ScheduleEvent(EVENT_MAZE_ORIENTATION, 200); break; case EVENT_MAZE_END: Maze(false); SendMazeToEyes(false); events.ScheduleEvent(EVENT_LIGHT_SPECTRUM_SAY_SUMMON, 40000); break; case EVENT_MIND_DAGGERS: DoCast(SPELL_MIND_DAGGERS); events.ScheduleEvent(EVENT_MIND_DAGGERS, 6000); break; // Disintegration Beam phase end default: break; } if (!me->HasUnitState(UNIT_STATE_CASTING)) DoMeleeAttackIfReady(); }