Here is the function from the old PartolWhen you set the poi the bot will request a path, if it returns a path that won't reach the mob the it will blacklist the mob and clear the poi.
public static GameObject FindNavigableTarget(GameObject[] targets)
{
if (!targets.Any()) return null;
var navtarget = targets.Select(unit => new CanFullyNavigateTarget { Id = unit.ObjectId, Position = unit.Location });
if (Navigator.NavigationProvider == null) return null;
var resultsArray = Navigator.NavigationProvider.CanFullyNavigateTo(navtarget);
if (resultsArray == null) return null;
var result = resultsArray.OrderBy(z => z.PathLength).FirstOrDefault(r => r.CanNavigate == 1);
return result != null ? targets.FirstOrDefault(z => z.ObjectId == result.Id) : null;
}
var navReq = fateDatas.Select(r => new CanFullyNavigateTarget { Id = r.Id, Position = r.Location });
if (!navReq.Any())
{
if (!string.IsNullOrEmpty(thisfateonly))
{
Logging.Write(@"Waiting for {0} ...",thisfateonly);
}
else
{
Logging.Write(@"No fates within operational parameters.");
}
return RunStatus.Failure;
}
var paths = nav.CanFullyNavigateTo(navReq);
if (paths == null)
{
Logging.WriteDiagnostic("Something strange happened, null path returned.");
return RunStatus.Failure;
}
foreach (var badfate in paths.Where(r => r.CanNavigate == 0))
{
var val = fateDatas.FirstOrDefault(r => r.Id == badfate.Id);
if (val != null)
{
var feedback = string.Format("Could not find a path to {0} from {1} ({2})", val.Location, Core.Player.Location, val.Name);
Blacklist.Add(badfate.Id, BlacklistFlags.Node, TimeSpan.FromMinutes(20), feedback);
}
else
{
var feedback = string.Format("Could not navigate to");
Blacklist.Add(badfate.Id, BlacklistFlags.Node, TimeSpan.FromMinutes(20), "Could not navigate to " + badfate.Id);
}
}