void StartMovement(SpellEffIndex /*effIndex*/) { Player* target = GetRandomPlayer(false); if (!target) // Try to get tank. target = GetRandomPlayer(true); if (target) { GetCaster()->SetWalk(true); GetCaster()->GetMotionMaster()->MoveChase(target); } }
void UpdateAI(const uint32 diff) { if (checkPlayers()) { if (!eventStarted) // Event not started, player found { _events.ScheduleEvent(EVENT_NEXT_MOVEMENT, 1000); _events.ScheduleEvent(EVENT_LIGHTNING, 5000); eventStarted = true; } } else { if (eventStarted) // Event started, no player found Reset(); return; } _events.Update(diff); switch (_events.ExecuteEvent()) { case EVENT_NEXT_MOVEMENT: { if (me->HasAura(SPELL_STUNNED)) _events.ScheduleEvent(EVENT_NEXT_MOVEMENT, 2000); GoToNextPos(); break; } case EVENT_STUNNED: { me->RemoveAurasDueToSpell(SPELL_STUNNED); me->CastSpell(me, SPELL_SERPENT_SWEEP, false); _events.ScheduleEvent(EVENT_NEXT_MOVEMENT, 3000); break; } case EVENT_LIGHTNING: { if (Player* player = GetRandomPlayer()) me->CastSpell(player, SPELL_LIGHTNING, false); _events.ScheduleEvent(EVENT_LIGHTNING, 5000); break; } } }
void UpdateAI(uint32 diff) { if (!bActive) return; if (me->HealthBelowPct(50) && !b50) { b50 = true; Talk(SAY_50); } if (me->HealthBelowPct(25) && !b25) { b25 = true; Talk(SAY_25); } events.Update(diff); while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { case EVENT_INTRO_2: Talk(SAY_INTRO_2); bActive = false; break; case EVENT_INTRO_3_2: Talk(SAY_INTRO_3_2); break; case EVENT_PHASE_2_2: Talk(SAY_PHASE_2_1); break; case EVENT_SUMMON_MINDLASHER: if (Creature* pMindlasher = me->SummonCreature(NPC_VICIOUS_MINDLASHER, spawnPos[urand(0, 1)])) { pMindlasher->AddThreat(me, 1.0f); pMindlasher->AI()->AttackStart(me); } break; case EVENT_SUMMON_BEHEMOTH: if (Creature* pBehemoth = me->SummonCreature(NPC_UNYIELDING_BEHEMOTH, spawnPos[urand(0, 1)])) { pBehemoth->AddThreat(me, 1.0f); pBehemoth->AI()->AttackStart(me); } break; case EVENT_SUMMON_SAPPER: for (uint8 i = 2; i < 5; i++) if (Creature* pSapper = me->SummonCreature(NPC_FACELESS_SAPPER, spawnPos[i])) pSapper->CastSpell(me, SPELL_ENTANGLING_GRASP, false); break; case EVENT_SUMMON_BEAST: if (Creature* pBeast = me->SummonCreature(NPC_BLIGHT_BEAST, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation())) if (Player* pTarget = GetRandomPlayer()) pBeast->AI()->AttackStart(pTarget); events.ScheduleEvent(EVENT_SUMMON_BEAST, urand(15000, 24000)); break; case EVENT_SUMMON_MURLOC: for (uint8 i = 0; i < 5; i++) { if (Creature* pMurloc = me->SummonCreature(NPC_DEEP_MURLOC_INVADER, spawnPos[urand(0, 1)])) { pMurloc->AddThreat(me, 1.0f); pMurloc->AI()->AttackStart(me); } } events.ScheduleEvent(EVENT_SUMMON_MURLOC, urand(10000, 17000)); break; case EVENT_BLIGHT_OF_OZUMAT: if (Player* pTarget = GetRandomPlayer()) DoCast(pTarget, SPELL_BLIGHT_OF_OZUMAT_MISSILE); events.ScheduleEvent(EVENT_BLIGHT_OF_OZUMAT, urand(10000, 18000)); break; } } }