private static double GetWeight(BattleCharacter battleCharacter) { var weight = 1800f; var currentFate = OracleFateManager.GetCurrentFateData(); var oracleFate = new Fate(); if (currentFate != null) { oracleFate = OracleFateManager.FateDatabase.GetFateFromFateData(currentFate); } // If FATE has a preferred target, prioritise it if we're out of combat. if (oracleFate.PreferredTargetId != null && oracleFate.PreferredTargetId.Contains(battleCharacter.NpcId) && !Core.Player.InCombat) { weight += 20000; } if (battleCharacter.Pointer == Core.Player.PrimaryTargetPtr) { weight += 150; } if (battleCharacter.HasTarget && battleCharacter.CurrentTargetId == Core.Player.ObjectId) { weight += 750; } if (ChocoboManager.Object != null && battleCharacter.HasTarget && battleCharacter.CurrentTargetId == ChocoboManager.Object.ObjectId) { weight += 400; } if (!battleCharacter.TappedByOther) { weight += 200; } if (battleCharacter.CurrentTargetId == Core.Player.ObjectId) { weight += 1000 / Convert.ToSingle(battleCharacter.CurrentHealth) * 3000; } if (!battleCharacter.InCombat) { weight += 130; } // Prefer nearer targets in combat if melee, and always out of combat. if (OracleClassManager.IsMeleeDpsClassJob(Core.Player.CurrentJob) || OracleClassManager.IsTankClassJob(Core.Player.CurrentJob) || !Core.Player.InCombat) { weight -= battleCharacter.Distance(Core.Player) * 30; } return(weight); }
internal static async Task <bool> Main() { if (Poi.Current.Type != PoiType.Kill) { return(false); } OracleFateManager.ForceUpdateGameCache(); if (!Poi.Current.BattleCharacter.IsValid || Poi.Current.BattleCharacter.IsDead) { OracleFateManager.ClearPoi("Mob is " + "no longer" + " valid.", false); return(false); } if (Core.Player.CurrentHealthPercent < MainSettings.Instance.RestHealthPercent) { WaitForPlayerRegeneration(); return(true); } if (OracleClassManager.IsTankClassJob(Core.Player.CurrentJob) || OracleClassManager.IsMeleeDpsClassJob(Core.Player.CurrentJob) || OracleClassManager.IsRangedDpsClassJob(Core.Player.CurrentJob)) { if (Core.Player.CurrentTPPercent < MainSettings.Instance.RestTPManaPercent) { WaitForPlayerRegeneration(); return(true); } } if (OracleClassManager.IsCasterClassJob(Core.Player.CurrentJob) || OracleClassManager.IsHealerClassJob(Core.Player.CurrentJob)) { if (Core.Player.CurrentManaPercent < MainSettings.Instance.RestTPManaPercent) { WaitForPlayerRegeneration(); return(true); } } return(false); }