diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp index 727e10f4d..37a018435 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp @@ -62,19 +62,54 @@ void npc_escortAI::AttackStart(Unit* who) bool npc_escortAI::AssistPlayerInCombat(Unit* who) { if (!who || !who->GetVictim()) + { return false; + } + + if (me->HasReactState(REACT_PASSIVE)) + { + return false; + } //experimental (unknown) flag not present if (!(me->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_CAN_ASSIST)) + { return false; + } //not a player if (!who->GetVictim()->GetCharmerOrOwnerPlayerOrPlayerItself()) + { return false; + } + + if (!who->isInAccessiblePlaceFor(me)) + { + return false; + } + + if (!CanAIAttack(who)) + { + return false; + } + + // we cannot attack in evade mode + if (me->IsInEvadeMode()) + { + return false; + } + + // or if enemy is in evade mode + if (who->GetTypeId() == TYPEID_UNIT && who->ToCreature()->IsInEvadeMode()) + { + return false; + } //never attack friendly if (!me->IsValidAttackTarget(who)) + { return false; + } //too far away and no free sight? if (me->IsWithinDistInMap(who, GetMaxPlayerDistance()) && me->IsWithinLOSInMap(who)) diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h index 47058e330..665fe9a94 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h +++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h @@ -9,7 +9,7 @@ #include "ScriptSystem.h" #include "ScriptedCreature.h" -#define DEFAULT_MAX_PLAYER_DISTANCE 50 +#define DEFAULT_MAX_PLAYER_DISTANCE 100 struct Escort_Waypoint {