internal static async Task <bool> HandleWait() { if (OracleCombatManager.IsPlayerBeingAttacked() && !Core.Player.IsMounted && Poi.Current.Type != PoiType.Kill && Poi.Current.Type != PoiType.None) { OracleFateManager.ClearPoi("We're being attacked.", false); return(true); } if (await OracleFateManager.AnyViableFates()) { OracleFateManager.ClearPoi("Viable FATE detected."); return(true); } return(await RunWait()); }
internal static async Task <bool> HandleWaitInPlace() { if (OracleCombatManager.IsPlayerBeingAttacked() && Poi.Current.Type != PoiType.Kill && Poi.Current.Type != PoiType.None) { OracleFateManager.ClearPoi("We're being attacked.", false); return(true); } if (Poi.Current.Type != PoiType.Wait) { return(false); } if (await OracleFateManager.AnyViableFates()) { OracleFateManager.ClearPoi("Found a FATE."); } return(true); }
private static async Task <bool> SelectClosestFate() { if (!await OracleFateManager.AnyViableFates()) { return(false); } var fateDistances = await GetFateDistances(); var closestFates = fateDistances.OrderBy(kvp => kvp.Value).Where(fate => OracleFateManager.FateFilter(fate.Key)).ToArray(); foreach (var fate in closestFates) { if (fate.Value > 0) { Logger.SendDebugLog("Found FATE '" + fate.Key.Name + "'. Distance to it is " + Math.Round(fate.Value, 2) + " yalms."); } else { Logger.SendDebugLog("Found FATE '" + fate.Key.Name + "'. Distance to it is 0 yalms."); } } if (!closestFates.Any()) { return(false); } Logger.SendLog("Selecting closest viable FATE."); var closestFate = closestFates.FirstOrDefault().Key; Logger.SendLog("Selected FATE: " + closestFate.Name + "."); Logger.SendDebugLog("Location of FATE: " + closestFate.Location); OracleFateManager.CurrentFateId = closestFate.Id; Poi.Current = new Poi(closestFate, PoiType.Fate); return(true); }