private static async Task <bool> ShieldTarget(IEnumerable <ff14bot.Objects.Character> targetBase, bool keepUp) { var targets = targetBase.Where(r => !r.HasAura(Auras.EukrasianDiagnosis, true)); ff14bot.Objects.Character target = null; if (keepUp) { if (SageSettings.Instance.ShieldKeepUpUnlessAdderstingFull && ActionResourceManager.Sage.Addersting >= 3) { target = null; } else { if (SageSettings.Instance.ShieldKeepUpOnlyOutOfCombat) { if (!Core.Me.InCombat) { target = targets.FirstOrDefault(); } } else { target = targets.FirstOrDefault(); } } } if (target == null) { target = targets.FirstOrDefault(r => r.CurrentHealthPercent <= SageSettings.Instance.ShieldHealthPercent); } if (target == null) { return(false); } if (!await Heal.UseEukrasia(targetObject: target)) { return(false); } return(await Spells.EukrasianDiagnosis.HealAura(target, Auras.EukrasianDiagnosis)); }
public static async Task <bool> EukrasianDosis() { if (!SageSettings.Instance.DoDamage) { return(false); } if (SageSettings.Instance.UseTTDForDots && Combat.CurrentTargetCombatTimeLeft <= SageSettings.Instance.DontDotIfEnemyDyingWithin) { return(false); } if (!SageSettings.Instance.EukrasianDosis) { return(false); } if (!Heal.IsEukrasiaReady()) { return(false); } var targetChar = Core.Me.CurrentTarget as Character; if (targetChar != null && targetChar.CharacterAuras.Count() >= 25) { return(false); } if (Core.Me.CurrentTarget.HasAnyAura(DotAuras, true, msLeft: SageSettings.Instance.DotRefreshMSeconds)) { return(false); } if (Core.Me.CurrentTarget.Distance(Core.Me) > 25 + Core.Me.CurrentTarget.CombatReach) { return(false); } return(await UseEukrasianDosis(Core.Me.CurrentTarget)); }
private static async Task <bool> UseEukrasianDosis(GameObject target) { var spell = Spells.EukrasianDosisIII; var aura = Auras.EukrasianDosisIII; if (Core.Me.ClassLevel < 82) { spell = Spells.EukrasianDosisII; aura = Auras.EukrasianDosisII; } if (Core.Me.ClassLevel < 72) { spell = Spells.EukrasianDosis; aura = Auras.EukrasianDosis; } if (!await Heal.UseEukrasia(spell.Id, target)) { return(false); } return(await spell.CastAura(target, (uint)aura)); }
public static async Task <bool> ShieldsUpRedAlert() { if (!SageSettings.Instance.Shield) { return(false); } if (SageSettings.Instance.OnlyShieldWhileMoving && !MovementManager.IsMoving) { return(false); } if (Globals.InParty) { if (await ShieldTanks()) { return(true); } if (await ShieldSelf()) { return(true); } if (await ShieldHealers()) { return(true); } return(await ShieldDps()); } else { if (Core.Me.HasAura(Auras.EukrasianDiagnosis)) { return(false); } var keepUpOnMe = SageSettings.Instance.ShieldKeepUpOnHealers || SageSettings.Instance.ShieldKeepUpOnSelf; var useOnMe = SageSettings.Instance.ShieldOnHealers || SageSettings.Instance.ShieldOnSelf; if (!useOnMe) { return(false); } if (!keepUpOnMe && Core.Me.CurrentHealthPercent > SageSettings.Instance.ShieldHealthPercent) { return(false); } if (keepUpOnMe && SageSettings.Instance.ShieldKeepUpUnlessAdderstingFull && ActionResourceManager.Sage.Addersting >= 3) { return(false); } if (keepUpOnMe && SageSettings.Instance.ShieldKeepUpOnlyOutOfCombat && Core.Me.InCombat) { return(false); } if (!await Heal.UseEukrasia()) { return(false); } return(await Spells.EukrasianDiagnosis.HealAura(Core.Me, Auras.EukrasianDiagnosis)); } }
public static async Task <bool> Aoe() { if (!Globals.InParty) { return(false); } if (!FightLogic.ZoneHasFightLogic()) { return(false); } if (!FightLogic.EnemyIsCastingBigAoe() && !FightLogic.EnemyIsCastingAoe()) { return(false); } var useAoEBuffs = Heal.UseAoEHealingBuff(Group.CastableAlliesWithin15); if (SageSettings.Instance.FightLogic_Kerachole && Spells.Kerachole.IsKnownAndReady() && Addersgall >= 1 && useAoEBuffs) { var targets = Group.CastableAlliesWithin15.Where(r => !r.HasAura(Auras.Kerachole) && !r.HasAura(Auras.Taurochole)); var tankCheck = !SageSettings.Instance.FightLogic_RespectOnlyTank || !SageSettings.Instance.KeracholeOnlyWithTank || targets.Any(r => r.IsTank(SageSettings.Instance.KeracholeOnlyWithMainTank)); if (targets.Count() >= Heal.AoeNeedHealing && tankCheck) { if (BaseSettings.Instance.DebugFightLogic) { Logger.WriteInfo($"[AOE Response] Cast Kerachole"); } return(await FightLogic.DoAndBuffer(Spells.Kerachole.CastAura(Core.Me, Auras.Kerachole))); } } if (SageSettings.Instance.FightLogic_Panhaima && Spells.Panhaima.IsKnownAndReady() && useAoEBuffs) { var targets = Group.CastableAlliesWithin15.Where(r => !r.HasAura(Auras.Panhaimatinon)); var tankCheck = !SageSettings.Instance.FightLogic_RespectOnlyTank || !SageSettings.Instance.PanhaimaOnlyWithTank || targets.Any(r => r.IsTank(SageSettings.Instance.PanhaimaOnlyWithMainTank)); if (targets.Count() >= Heal.AoeNeedHealing && tankCheck) { if (BaseSettings.Instance.DebugFightLogic) { Logger.WriteInfo($"[AOE Response] Cast Panhaima"); } return(await FightLogic.DoAndBuffer(Spells.Panhaima.CastAura(Core.Me, Auras.Panhaimatinon))); } } if (SageSettings.Instance.FightLogic_Holos && Spells.Holos.IsKnownAndReady() && useAoEBuffs) { var targets = Group.CastableAlliesWithin15.Where(r => !r.HasAura(Auras.Holos)); var tankCheck = !SageSettings.Instance.FightLogic_RespectOnlyTank || !SageSettings.Instance.HolosTankOnly || targets.Any(r => r.IsTank(SageSettings.Instance.HolosMainTankOnly)); if (targets.Count() >= Heal.AoeNeedHealing && tankCheck) { if (BaseSettings.Instance.DebugFightLogic) { Logger.WriteInfo($"[AOE Response] Cast Holos"); } return(await FightLogic.DoAndBuffer(Spells.Holos.CastAura(Core.Me, Auras.Holos))); } } if (SageSettings.Instance.FightLogic_EukrasianPrognosis && Core.Me.ClassLevel >= Spells.Eukrasia.LevelAcquired && Heal.IsEukrasiaReady()) { var targets = Group.CastableAlliesWithin15.Where(r => !r.HasAura(Auras.EukrasianDiagnosis) && !r.HasAura(Auras.EukrasianPrognosis) && !r.HasAura(Auras.Galvanize)); var tankCheck = !SageSettings.Instance.FightLogic_RespectOnlyTank || targets.Any(r => r.IsTank()); if (targets.Count() >= Heal.AoeNeedHealing && tankCheck) { if (BaseSettings.Instance.DebugFightLogic) { Logger.WriteInfo($"[AOE Response] Cast Eukrasian Prognosis"); } if (await Heal.UseEukrasia(Spells.EukrasianPrognosis.Id)) { return(await FightLogic.DoAndBuffer(Spells.EukrasianPrognosis.HealAura(Core.Me, Auras.EukrasianPrognosis))); } } } return(false); }
public static async Task <bool> Tankbuster() { if (!Globals.InParty) { return(false); } if (!FightLogic.ZoneHasFightLogic()) { return(false); } var target = FightLogic.EnemyIsCastingTankBuster(); if (target == null) { target = FightLogic.EnemyIsCastingSharedTankBuster(); if (target == null) { return(false); } } if (SageSettings.Instance.FightLogic_Haima && Spells.Haima.IsKnownAndReady() && !target.HasAura(Auras.Haimatinon) && !target.HasAura(Auras.Panhaimatinon) && Spells.Haima.CanCast(target)) { if (BaseSettings.Instance.DebugFightLogic) { Logger.WriteInfo($"[TankBuster Response] Cast Haima on {target.Name}"); } return(await FightLogic.DoAndBuffer(Spells.Haima.CastAura(target, Auras.Haimatinon))); } if (SageSettings.Instance.FightLogic_Taurochole && Spells.Taurochole.IsKnownAndReady() && !target.HasAura(Auras.Taurochole) && Spells.Taurochole.CanCast(target)) { if (BaseSettings.Instance.DebugFightLogic) { Logger.WriteInfo($"[TankBuster Response] Cast Taurochole on {target.Name}"); } return(await FightLogic.DoAndBuffer(Spells.Taurochole.HealAura(target, Auras.Taurochole))); } if (SageSettings.Instance.FightLogic_EukrasianDiagnosis && Core.Me.ClassLevel >= Spells.Eukrasia.LevelAcquired && !target.HasAura(Auras.EukrasianDiagnosis) && !target.HasAura(Auras.Galvanize) && !target.HasAura(Auras.EukrasianPrognosis) && Heal.IsEukrasiaReady()) { if (BaseSettings.Instance.DebugFightLogic) { Logger.WriteInfo($"[TankBuster Response] Cast Eukrasian Diagnosis on {target.Name}"); } if (await Heal.UseEukrasia(targetObject: target)) { return(await FightLogic.DoAndBuffer(Spells.EukrasianDiagnosis.HealAura(target, Auras.EukrasianDiagnosis))); } } return(false); }
public static async Task <bool> DotMultipleTargets() { if (!SageSettings.Instance.DoDamage) { return(false); } if (!SageSettings.Instance.EukrasianDosis) { return(false); } if (!SageSettings.Instance.DotMultipleTargets) { return(false); } if (!Heal.IsEukrasiaReady()) { return(false); } if (Combat.Enemies.Count < 2) { return(false); } var DotTarget = Combat.Enemies.Where(NeedsDot).Where(CanDot).FirstOrDefault(); if (DotTarget == null) { return(false); } return(await UseEukrasianDosis(DotTarget)); bool NeedsDot(BattleCharacter unit) { if (unit.CharacterAuras.Count() >= 25) { return(false); } return(!unit.HasAnyAura(DotAuras, true, msLeft: SageSettings.Instance.DotRefreshMSeconds)); } bool CanDot(GameObject unit) { // Check dosis since no eukrasia buff yet. if (!Spells.Dosis.CanCast(unit)) { return(false); } if (unit.Distance(Core.Me) > 25 + unit.CombatReach) { return(false); } if (!SageSettings.Instance.UseTTDForDots) { return(true); } return(unit.CombatTimeLeft() >= SageSettings.Instance.DontDotIfEnemyDyingWithin); } }