void UpdateAI(const uint32 diff) { if (gateClose && (!isOnSameSide(me) || (me->getVictim() && !isOnSameSide(me->getVictim())))) { EnterEvadeMode(); return; } CombatAI::UpdateAI(diff); }
void EnterEvadeMode() { if (!gateClose) { CombatAI::EnterEvadeMode(); return; } if (!_EnterEvadeMode()) return; Map* pMap = me->GetMap(); if (pMap->IsDungeon()) { Map::PlayerList const &PlayerList = pMap->GetPlayers(); if (!PlayerList.isEmpty()) { for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) { if (i->getSource() && i->getSource()->isAlive() && isOnSameSide(i->getSource())) { AttackStart(i->getSource()); return; } } } } me->GetMotionMaster()->MoveIdle(); Reset(); }
void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; if (!_gateIsOpen && !isOnSameSide(me->GetVictim())) { // reset threat, then try to find someone on same side as us to attack if (Player* newTarget = FindEligibleTarget(me, _gateIsOpen)) { me->RemoveAurasByType(SPELL_AURA_MOD_TAUNT); me->getThreatManager().resetAllAggro(); me->AddThreat(newTarget, 1.0f); AttackStart(newTarget); } else EnterEvadeMode(EVADE_REASON_NO_HOSTILES); } _UpdateAI(diff); }
void DamageTaken(Unit *attacker, uint32 &damage) { if (gateClose && !isOnSameSide(attacker)) damage = 0; }
void DamageTaken(Unit* attacker, uint32 &damage) override { // do not allow minions to take damage before the gate is opened if (!_gateIsOpen && !isOnSameSide(attacker)) damage = 0; }