private Creature GetBestNearestMob(bool assistPriority = false, bool fightPlayersBack = false)
{
Creature mob = null;
double smallestDist = double.MaxValue;
bool isBestMobFresh = false;
try
{
List<Creature> nearbyMobs = core.getCreatures();
foreach (Creature obj in nearbyMobs)
{
bool isFresh = (core.hpp(obj) == 100);
double dist = core.me.dist(obj);
bool isOnPlayer = obj.target == core.me;
if (IsValidTarget(obj, fightPlayersBack)
&& (zone.ObjInZone(obj) || (isOnPlayer && dist < prefs.combatRange - 1))
&& (dist < smallestDist || (assistPriority && !isBestMobFresh && isFresh))
&& (!assistPriority || isFresh || isOnPlayer || (assistPriority && !isBestMobFresh && dist < prefs.combatRange))
)
{
// just return directly if we find something attacking us - we want to take that down for sure
if (obj.target == core.me)
return obj;
// second check to see if the creatures target is one of our party members (do we have healers/assistants?)
if (core.me.isPartyMember)
{
List<Creature> PartyMems = core.getVisiblePartyMembers();
if (PartyMems.Contains(obj.target)) { return obj; }
}
mob = obj;
smallestDist = dist;
isBestMobFresh = isFresh;
}
}
}
catch (Exception ex)
{
core.Log("Error while looking for a new target: " + ex.Message);
}
return mob;
}