diff --git a/BasicRotations/Healer/AST_Default.cs b/BasicRotations/Healer/AST_Default.cs index e942a8a..1ef0025 100644 --- a/BasicRotations/Healer/AST_Default.cs +++ b/BasicRotations/Healer/AST_Default.cs @@ -9,6 +9,12 @@ public sealed class AST_Default : AstrologianRotation [RotationConfig(CombatType.PvE, Name = "Enable Swiftcast Restriction Logic to attempt to prevent actions other than Raise when you have swiftcast")] public bool SwiftLogic { get; set; } = true; + [RotationConfig(CombatType.PvE, Name = "Use both stacks of Lightspeed while moving")] + public bool LightspeedMove { get; set; } = true; + + [RotationConfig(CombatType.PvE, Name = "Use experimental card logic to pool for divination buff if possible")] + public bool SmartCard { get; set; } = true; + [RotationConfig(CombatType.PvE, Name = "Use spells with cast times to heal. (Ignored if you are the only healer in party)")] public bool GCDHeal { get; set; } = false; @@ -34,6 +40,8 @@ public sealed class AST_Default : AstrologianRotation public bool DOTUpkeep { get; set; } = true; #endregion + private static bool InBurstStatus => !Player.WillStatusEnd(0, true, StatusID.Divination); + #region Countdown Logic protected override IAction? CountDownAction(float remainTime) { @@ -161,8 +169,8 @@ protected override bool GeneralAbility(IAction nextGCD, out IAction? act) if (AstralDrawPvE.CanUse(out act)) return true; if (UmbralDrawPvE.CanUse(out act)) return true; - if (InCombat && TheBalancePvE.CanUse(out act)) return true; - if (InCombat && TheSpearPvE.CanUse(out act)) return true; + if (((Player.HasStatus(true, StatusID.Divination) || !DivinationPvE.Cooldown.WillHaveOneCharge(45) || !DivinationPvE.EnoughLevel || UmbralDrawPvE.Cooldown.WillHaveOneCharge(3)) && SmartCard || (!SmartCard)) && InCombat && TheBalancePvE.CanUse(out act)) return true; + if (((Player.HasStatus(true, StatusID.Divination) || !DivinationPvE.Cooldown.WillHaveOneCharge(45) || !DivinationPvE.EnoughLevel || UmbralDrawPvE.Cooldown.WillHaveOneCharge(3)) && SmartCard || (!SmartCard)) && InCombat && TheSpearPvE.CanUse(out act)) return true; return base.GeneralAbility(nextGCD, out act); } @@ -171,14 +179,18 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) act = null; if (BubbleProtec && Player.HasStatus(true, StatusID.CollectiveUnconscious_848)) return false; + if (InCombat && DivinationPvE.Cooldown.ElapsedAfter(115) && LightspeedPvE.CanUse(out act, usedUp: true)) return true; + if (IsBurst && !IsMoving && DivinationPvE.CanUse(out act)) return true; if (AstralDrawPvE.CanUse(out act, usedUp: IsBurst)) return true; + if ((InBurstStatus || DivinationPvE.Cooldown.ElapsedAfter(115)) && InCombat && LightspeedPvE.CanUse(out act, usedUp: true)) return true; + if (InCombat) { - if (IsMoving && LightspeedPvE.CanUse(out act)) return true; + if (IsMoving && LightspeedPvE.CanUse(out act, usedUp: LightspeedMove)) return true; if (!IsMoving) { @@ -189,7 +201,7 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) } { - if (LordOfCrownsPvE.CanUse(out act)) return true; + if (((Player.HasStatus(true, StatusID.Divination) || !DivinationPvE.Cooldown.WillHaveOneCharge(45) || !DivinationPvE.EnoughLevel || UmbralDrawPvE.Cooldown.WillHaveOneCharge(3)) && SmartCard || (!SmartCard)) && LordOfCrownsPvE.CanUse(out act)) return true; } } return base.AttackAbility(nextGCD, out act); diff --git a/BasicRotations/RebornRotations.csproj b/BasicRotations/RebornRotations.csproj index 91977f9..37ed4ca 100644 --- a/BasicRotations/RebornRotations.csproj +++ b/BasicRotations/RebornRotations.csproj @@ -16,7 +16,7 @@ - +