void UpdateAI(uint32 diff) { events2.Update(diff); switch (events2.ExecuteEvent()) { case EVENT_AKAMA_START_ENCOUNTER: me->RemoveAura(SPELL_STEALTH); me->SetWalk(true); me->GetMotionMaster()->MovePoint(POINT_START, 517.4877f, 400.7993f, 112.7837f, false); events2.ScheduleEvent(EVENT_AKAMA_START_CHANNEL, 11000); break; case EVENT_AKAMA_START_CHANNEL: me->CastSpell(me, SPELL_AKAMA_SOUL_CHANNEL, false); if (Creature* shade = ObjectAccessor::GetCreature(*me, instance->GetData64(NPC_SHADE_OF_AKAMA))) { shade->AI()->AttackStart(me); shade->GetMotionMaster()->Clear(); shade->AI()->DoAction(ACTION_START_ENCOUNTER); } break; case EVENT_AKAMA_SCENE0: me->SetWalk(true); me->GetMotionMaster()->MovePoint(POINT_CHANNEL_SOUL, 467.0f, 400.7993f, 118.537f); break; case EVENT_AKAMA_SCENE1: me->CastSpell(me, SPELL_AKAMA_SOUL_RETRIEVE, true); break; case EVENT_AKAMA_SCENE2: Talk(SAY_BROKEN_FREE_0); break; case EVENT_AKAMA_SCENE3: me->SummonCreatureGroup(SUMMON_GROUP_BROKENS); break; case EVENT_AKAMA_SCENE4: Talk(SAY_BROKEN_FREE_1); break; case EVENT_AKAMA_SCENE5: for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) if (Creature* broken = ObjectAccessor::GetCreature(*me, *itr)) broken->SetStandState(UNIT_STAND_STATE_KNEEL); Talk(SAY_BROKEN_FREE_2); break; case EVENT_AKAMA_SCENE6: if (Creature* broken = summons.GetCreatureWithEntry(NPC_ASHTONGUE_BROKEN)) broken->AI()->Talk(SAY_BROKEN_S1); break; case EVENT_AKAMA_SCENE7: for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) if (Creature* broken = ObjectAccessor::GetCreature(*me, *itr)) broken->AI()->Talk(SAY_BROKEN_S2); break; } if (!UpdateVictim()) return; events.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING)) return; switch (events.ExecuteEvent()) { case EVENT_SPELL_CHAIN_LIGHTNING: me->CastSpell(me->GetVictim(), SPELL_CHAIN_LIGHTNING, false); events.ScheduleEvent(EVENT_SPELL_CHAIN_LIGHTNING, urand(10000, 15000)); break; case EVENT_SPELL_DESTRUCTIVE_POISON: me->CastSpell(me, SPELL_DESTRUCTIVE_POISON, false); events.ScheduleEvent(EVENT_SPELL_DESTRUCTIVE_POISON, urand(4000, 5000)); break; } DoMeleeAttackIfReady(); }