private static async Task <bool> JustAoe() { if (!ScholarSettings.Instance.FightLogicSuccorAoe) { return(false); } if (!Spells.Succor.IsKnownAndReady()) { return(false); } if (Core.Me.TargetCharacter.SpellCastInfo.RemainingCastTime <= Spells.Succor.AdjustedCastTime) { return(false); } if (Core.Me.HasAura(Auras.EmergencyTactics)) { return(false); } if (await FightLogic.DoAndBuffer(Spells.Succor.Heal(Core.Me))) { return(await Coroutine.Wait(2500, () => Casting.LastSpell == Spells.Succor || MovementManager.IsMoving)); } return(false); }
public static async Task <bool> NeutralSect() { if (!AstrologianSettings.Instance.NeutralSect) { return(false); } if (!Core.Me.InCombat) { return(false); } if (!Spells.NeutralSect.IsKnownAndReady()) { return(false); } if (AstrologianSettings.Instance.FightLogic_NeutralSectAspectedHelios && FightLogic.EnemyIsCastingBigAoe() && (AstrologianSettings.Instance.FightLogic_Macrocosmos && !Spells.Macrocosmos.IsKnownAndReady()) && !Core.Me.HasAnyAura(AstroUtils.ScholarAndSageShieldsNotToOverwrite)) { return(await FightLogic.DoAndBuffer(Spells.NeutralSect.CastAura(Core.Me, Auras.NeutralSect))); } var neutral = Group.CastableAlliesWithin15.Count(r => r.CurrentHealth > 0 && r.CurrentHealthPercent <= AstrologianSettings.Instance.NeutralSectHealthPercent); if (neutral < AstrologianSettings.Instance.NeutralSectAllies) { return(false); } return(await Spells.NeutralSect.CastAura(Core.Me, Auras.NeutralSect)); }
public static async Task <bool> Tankbuster() { if (!Globals.InParty) { return(false); } if (!FightLogic.ZoneHasFightLogic()) { return(false); } var target = FightLogic.EnemyIsCastingTankBuster(); if (target == null) { return(false); } if (!target.BeingTargetedBy(Core.Me.CurrentTarget)) { while (Group.CastableTanks.Any(r => !r.HasAura(Auras.Galvanize))) { await FightLogic.DoAndBuffer( Spells.Adloquium.Heal(Group.CastableTanks.FirstOrDefault(r => !r.HasAura(Auras.Galvanize)))); await Coroutine.Yield(); } return(true); } if (ScholarSettings.Instance.FightLogicExcogTank && Spells.Excogitation.IsKnownAndReady() && Core.Me.HasAetherflow() && !target.HasAura(Auras.Excogitation)) { return(await FightLogic.DoAndBuffer(Spells.Excogitation.CastAura(target, Auras.Excogitation))); } if (ScholarSettings.Instance.FightLogicAdloTank && Spells.Adloquium.IsKnownAndReady() && !target.HasAura(Auras.Galvanize)) { return(await FightLogic.DoAndBuffer(Spells.Adloquium.HealAura(target, Auras.Galvanize))); } return(false); }
public static async Task <bool> Exaltation() { if (!AstrologianSettings.Instance.Exaltation) { return(false); } if (!Core.Me.InCombat) { return(false); } if (!Globals.InParty) { return(false); } if (!Spells.Exaltation.IsKnownAndReady()) { return(false); } if (AstrologianSettings.Instance.FightLogic_Exaltation) { var tankBusterOnPartyMember = FightLogic.EnemyIsCastingTankBuster(); if (tankBusterOnPartyMember == null) { return(false); } return(await FightLogic.DoAndBuffer( Spells.Exaltation.HealAura(tankBusterOnPartyMember, Auras.Exaltation))); } var tankToShieldAndHeal = Group.CastableTanks.FirstOrDefault(x => x.CurrentHealthPercent < AstrologianSettings.Instance.ExaltationHealthPercent && x.CheckTankImmunity() == TankImmunityCheck.HealThem); if (tankToShieldAndHeal == null) { return(false); } return(await Spells.Exaltation.HealAura(tankToShieldAndHeal, Auras.Exaltation)); }
public static async Task <bool> FightLogic_ArcaneCrest() { if (!Spells.ArcaneCrest.IsKnownAndReady()) { return(false); } if (!FightLogic.ZoneHasFightLogic() || !FightLogic.EnemyHasAnyAoeLogic()) { return(false); } if (FightLogic.EnemyIsCastingAoe() || FightLogic.EnemyIsCastingBigAoe()) { return(await FightLogic.DoAndBuffer(Spells.ArcaneCrest.CastAura(Core.Me, Auras.CrestOfTimeBorrowed))); } return(false); }
public static async Task <bool> FightLogic_Feint() { if (!Spells.Feint.IsKnownAndReady()) { return(false); } if (!FightLogic.ZoneHasFightLogic()) { return(false); } if (FightLogic.EnemyIsCastingAoe() || FightLogic.EnemyIsCastingBigAoe() || FightLogic.EnemyIsCastingTankBuster() != null || FightLogic.EnemyIsCastingSharedTankBuster() != null) { return(await FightLogic.DoAndBuffer(Spells.Feint.CastAura(Core.Me.CurrentTarget, Auras.Feint))); } return(false); }
public static async Task <bool> CollectiveUnconscious() { if (!AstrologianSettings.Instance.CollectiveUnconscious) { return(false); } if (!Core.Me.InCombat) { return(false); } if (!Spells.CollectiveUnconscious.IsKnownAndReady()) { return(false); } if (AstrologianSettings.Instance.FightLogic_CollectiveUnconscious && FightLogic.EnemyIsCastingAoe() && Group.CastableAlliesWithin15.Count(x => x.WithinSpellRange(Spells.CollectiveUnconscious.Radius)) > AoeThreshold) { return(await FightLogic.DoAndBuffer( Spells.CollectiveUnconscious.HealAura(Core.Me, Auras.CollectiveUnconsciousMitigation))); } if (Group.CastableAlliesWithin10.Count(r => r.Distance() < 6 && r.IsAlive && r.CurrentHealthPercent <= AstrologianSettings.Instance.CollectiveUnconsciousHealth) < AstrologianSettings.Instance.CollectiveUnconsciousAllies) { return(false); } return(await Spells.CollectiveUnconscious.HealAura(Core.Me, Auras.WheelOfFortune, false)); }
public static async Task <bool> Lightspeed() { if (!AstrologianSettings.Instance.Lightspeed) { return(false); } if (!Core.Me.InCombat) { return(false); } if (Combat.CombatTotalTimeLeft <= 25) { return(false); } if (!Spells.Lightspeed.IsKnownAndReady()) { return(false); } if (Spells.EssentialDignity.Charges > 0) { return(false); } if (Globals.InParty) { if (AstrologianSettings.Instance.FightLogic_Lightspeed && FightLogic.EnemyIsCastingBigAoe() && !Spells.NeutralSect.IsKnownAndReady() && !Spells.Macrocosmos.IsKnownAndReady()) { return(await FightLogic.DoAndBuffer(Spells.Lightspeed.CastAura(Core.Me, Auras.Lightspeed))); } if (AstrologianSettings.Instance.LightspeedTankOnly && Group.CastableTanks.All(r => r.CurrentHealthPercent >= AstrologianSettings.Instance.LightspeedHealthPercent)) { return(false); } if (!Spells.Horoscope.IsReady()) { return(false); } if (!Spells.CelestialOpposition.IsReady()) { return(false); } if (Core.Me.HasAura(Auras.LadyOfCrownsDrawn)) { return(false); } if (Group.CastableAlliesWithin15.Count(r => r.CurrentHealthPercent <= AstrologianSettings.Instance.LightspeedHealthPercent) > Heals.AoeThreshold) { return(await Spells.Lightspeed.CastAura(Core.Me, Auras.Lightspeed)); } } if (Core.Me.CurrentHealthPercent >= 40f) { return(false); } return(await Spells.Lightspeed.CastAura(Core.Me, Auras.Lightspeed)); }
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> Macrocosmos() { if (!AstrologianSettings.Instance.Macrocosmos) { return(false); } if (!Core.Me.InCombat) { return(false); } if (!Globals.InParty) { return(false); } if (!Spells.Macrocosmos.IsKnown()) { return(false); } if (Core.Me.HasMyAura(Auras.Macrocosmos)) { return(await Microcosmos()); } if (!Spells.Macrocosmos.IsReady()) { return(false); } if (Group.CastableAlliesWithin20.Any(x => x.HasAura(Auras.Macrocosmos))) { return(false); } if (AstrologianSettings.Instance.FightLogic_Macrocosmos && FightLogic.EnemyIsCastingBigAoe()) { return(await FightLogic.DoAndBuffer(Spells.Macrocosmos.HealAura(Core.Me, Auras.Macrocosmos))); } var enemyCount = Combat.Enemies.Count(); if (enemyCount == 0) { return(false); } if (enemyCount > PartyManager.NumMembers) { if (Combat.Enemies.All(x => x.WithinSpellRange(Spells.Macrocosmos.Radius) && Group.CastableAlliesWithin20.Count() == PartyManager.NumMembers)) { return(await Spells.Macrocosmos.HealAura(Core.Me, Auras.Macrocosmos)); } } var isThereABoss = Combat.Enemies.Any(x => x.IsBoss()); if (isThereABoss || !Group.CastableTanks.All(x => x.Distance() <= Spells.Macrocosmos.Radius && x.CurrentHealthPercent < 30f) || enemyCount <= AoeThreshold) { return(false); } return(await Spells.Macrocosmos.HealAura(Core.Me, Auras.Macrocosmos)); }
private static async Task <bool> BigAoe() { if (!Spells.Succor.IsKnownAndReady()) { return(false); } if (Core.Me.TargetCharacter.SpellCastInfo.RemainingCastTime <= Spells.Succor.AdjustedCastTime) { return(false); } if (ScholarSettings.Instance.FightLogicAdloDeployBigAoe && Spells.DeploymentTactics.IsKnownAndReady()) { var target = Group.CastableParty.FirstOrDefault(x => x.HasAura(Auras.Catalyze)); if (target == null) { target = Group.CastableParty.FirstOrDefault(x => x.HasAura(Auras.Galvanize)); } if (target == null) { target = Core.Me; if (!await Spells.Adloquium.Cast(target)) { return(false); } } return(await FightLogic.DoAndBuffer(Spells.DeploymentTactics.Cast(target))); } if (ScholarSettings.Instance.FightLogicRecitSuccorBigAoe && Spells.Recitation.IsKnownAndReady() && !Core.Me.HasAura(Auras.EmergencyTactics) && Group.CastableParty.Count(x => x.HasAura(Auras.Galvanize)) < AoeThreshold) { if (!await Spells.Recitation.Cast(Core.Me)) { return(false); } return(await FightLogic.DoAndBuffer(Spells.Succor.Cast(Core.Me))); } if (ScholarSettings.Instance.FightLogicSoilBigAoe && Spells.SacredSoil.IsKnownAndReady() && Core.Me.HasAetherflow()) { return(await FightLogic.DoAndBuffer(Spells.SacredSoil.Cast(Core.Me))); } if (ScholarSettings.Instance.FightLogicSuccorAoe && Spells.Succor.IsKnownAndReady() && Group.CastableParty.Count(x => x.HasAura(Auras.Galvanize)) < AoeThreshold) { return(await FightLogic.DoAndBuffer(Spells.Succor.Cast(Core.Me))); } return(false); }