From 8f550fb76e119eee3a791bdb690c66cd83030752 Mon Sep 17 00:00:00 2001 From: LTS-FFXIV <127939494+LTS-FFXIV@users.noreply.github.com> Date: Fri, 30 Aug 2024 12:22:03 -0500 Subject: [PATCH] MCH barrel stabilizer prioritization option, healer dot options --- BasicRotations/Healer/AST_Default.cs | 93 ++++++++++++++------------- BasicRotations/Healer/SCH_Default.cs | 9 ++- BasicRotations/Healer/WHM_Default.cs | 5 +- BasicRotations/Healer/zAST_BETA.cs | 5 +- BasicRotations/Ranged/MCH_Default.cs | 7 +- BasicRotations/RebornRotations.csproj | 2 +- 6 files changed, 69 insertions(+), 52 deletions(-) diff --git a/BasicRotations/Healer/AST_Default.cs b/BasicRotations/Healer/AST_Default.cs index b4c4cc0..50121ba 100644 --- a/BasicRotations/Healer/AST_Default.cs +++ b/BasicRotations/Healer/AST_Default.cs @@ -26,6 +26,9 @@ public sealed class AST_Default : AstrologianRotation [Range(0, 1, ConfigUnitType.Percent)] [RotationConfig(CombatType.PvE, Name = "Minimum HP threshold among party member needed to use Horoscope")] public float HoroscopeHeal { get; set; } = 0.3f; + + [RotationConfig(CombatType.PvE, Name = "Use DOT while moving even if it does not need refresh (disabling is a damage down)")] + public bool DOTUpkeep { get; set; } = true; #endregion #region Countdown Logic @@ -87,51 +90,6 @@ protected override bool DefenseAreaAbility(IAction nextGCD, out IAction? act) } #endregion - #region GCD Logic - protected override bool GeneralGCD(out IAction? act) - { - act = null; - if (BubbleProtec && Player.HasStatus(true, StatusID.CollectiveUnconscious_848)) return false; - - if (GravityPvE.CanUse(out act)) return true; - - if (CombustPvE.CanUse(out act)) return true; - if (MaleficPvE.CanUse(out act)) return true; - if (CombustPvE.CanUse(out act, skipStatusProvideCheck: true)) return true; - - return base.GeneralGCD(out act); - } - - [RotationDesc(ActionID.AspectedBeneficPvE, ActionID.BeneficIiPvE, ActionID.BeneficPvE)] - protected override bool HealSingleGCD(out IAction? act) - { - act = null; - if (BubbleProtec && Player.HasStatus(true, StatusID.CollectiveUnconscious_848)) return false; - if (MicroPrio && Player.HasStatus(true, StatusID.Macrocosmos)) return false; - - if (AspectedBeneficPvE.CanUse(out act) - && (IsMoving - || AspectedBeneficPvE.Target.Target?.GetHealthRatio() > AspectedBeneficHeal)) return true; - - if (BeneficIiPvE.CanUse(out act)) return true; - if (BeneficPvE.CanUse(out act)) return true; - - return base.HealSingleGCD(out act); - } - - [RotationDesc(ActionID.AspectedHeliosPvE, ActionID.HeliosPvE)] - protected override bool HealAreaGCD(out IAction? act) - { - act = null; - if (BubbleProtec && Player.HasStatus(true, StatusID.CollectiveUnconscious_848)) return false; - if (MicroPrio && Player.HasStatus(true, StatusID.Macrocosmos)) return false; - - if (AspectedHeliosPvE.CanUse(out act)) return true; - if (HeliosPvE.CanUse(out act)) return true; - return base.HealAreaGCD(out act); - } - #endregion - #region oGCD Logic protected override bool EmergencyAbility(IAction nextGCD, out IAction? act) { @@ -240,6 +198,51 @@ protected override bool HealAreaAbility(IAction nextGCD, out IAction? act) } #endregion + #region GCD Logic + protected override bool GeneralGCD(out IAction? act) + { + act = null; + if (BubbleProtec && Player.HasStatus(true, StatusID.CollectiveUnconscious_848)) return false; + + if (GravityPvE.CanUse(out act)) return true; + + if (CombustPvE.CanUse(out act)) return true; + if (MaleficPvE.CanUse(out act)) return true; + if (CombustPvE.CanUse(out act, skipStatusProvideCheck: DOTUpkeep)) return true; + + return base.GeneralGCD(out act); + } + + [RotationDesc(ActionID.AspectedBeneficPvE, ActionID.BeneficIiPvE, ActionID.BeneficPvE)] + protected override bool HealSingleGCD(out IAction? act) + { + act = null; + if (BubbleProtec && Player.HasStatus(true, StatusID.CollectiveUnconscious_848)) return false; + if (MicroPrio && Player.HasStatus(true, StatusID.Macrocosmos)) return false; + + if (AspectedBeneficPvE.CanUse(out act) + && (IsMoving + || AspectedBeneficPvE.Target.Target?.GetHealthRatio() > AspectedBeneficHeal)) return true; + + if (BeneficIiPvE.CanUse(out act)) return true; + if (BeneficPvE.CanUse(out act)) return true; + + return base.HealSingleGCD(out act); + } + + [RotationDesc(ActionID.AspectedHeliosPvE, ActionID.HeliosPvE)] + protected override bool HealAreaGCD(out IAction? act) + { + act = null; + if (BubbleProtec && Player.HasStatus(true, StatusID.CollectiveUnconscious_848)) return false; + if (MicroPrio && Player.HasStatus(true, StatusID.Macrocosmos)) return false; + + if (AspectedHeliosPvE.CanUse(out act)) return true; + if (HeliosPvE.CanUse(out act)) return true; + return base.HealAreaGCD(out act); + } + #endregion + #region Extra Methods public override bool CanHealSingleSpell => base.CanHealSingleSpell && (GCDHeal || PartyMembers.GetJobCategory(JobRole.Healer).Count() < 2); public override bool CanHealAreaSpell => base.CanHealAreaSpell && (GCDHeal || PartyMembers.GetJobCategory(JobRole.Healer).Count() < 2); diff --git a/BasicRotations/Healer/SCH_Default.cs b/BasicRotations/Healer/SCH_Default.cs index 9d4f82c..edb30e7 100644 --- a/BasicRotations/Healer/SCH_Default.cs +++ b/BasicRotations/Healer/SCH_Default.cs @@ -21,6 +21,9 @@ public sealed class SCH_Default : ScholarRotation [Range(0, 1, ConfigUnitType.Percent)] [RotationConfig(CombatType.PvE, Name = "Remove Aetherpact to conserve resources if party member is above this percentage")] public float AetherpactRemove { get; set; } = 0.9f; + + [RotationConfig(CombatType.PvE, Name = "Use DOT while moving even if it does not need refresh (disabling is a damage down)")] + public bool DOTUpkeep { get; set; } = true; #endregion #region Countdown Logic @@ -208,9 +211,9 @@ protected override bool GeneralGCD(out IAction? act) if (RuinIiPvE.CanUse(out act)) return true; //Add dot while moving. - if (BiolysisPvE.CanUse(out act, skipStatusProvideCheck: true)) return true; - if (BioIiPvE.CanUse(out act, skipStatusProvideCheck: true)) return true; - if (BioPvE.CanUse(out act, skipStatusProvideCheck: true)) return true; + if (BiolysisPvE.CanUse(out act, skipStatusProvideCheck: DOTUpkeep)) return true; + if (BioIiPvE.CanUse(out act, skipStatusProvideCheck: DOTUpkeep)) return true; + if (BioPvE.CanUse(out act, skipStatusProvideCheck: DOTUpkeep)) return true; return base.GeneralGCD(out act); } diff --git a/BasicRotations/Healer/WHM_Default.cs b/BasicRotations/Healer/WHM_Default.cs index d431876..043a6db 100644 --- a/BasicRotations/Healer/WHM_Default.cs +++ b/BasicRotations/Healer/WHM_Default.cs @@ -10,6 +10,9 @@ public sealed class WHM_Default : WhiteMageRotation [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; + [RotationConfig(CombatType.PvE, Name = "Use DOT while moving even if it does not need refresh (disabling is a damage down)")] + public bool DOTUpkeep { get; set; } = true; + [RotationConfig(CombatType.PvE, Name = "Use Lily at max stacks.")] public bool UseLilyWhenFull { get; set; } = true; @@ -180,7 +183,7 @@ protected override bool GeneralGCD(out IAction? act) if (UseLily(out act)) return true; } - if (AeroPvE.CanUse(out act, skipStatusProvideCheck: true)) return true; + if (AeroPvE.CanUse(out act, skipStatusProvideCheck: DOTUpkeep)) return true; return base.GeneralGCD(out act); } diff --git a/BasicRotations/Healer/zAST_BETA.cs b/BasicRotations/Healer/zAST_BETA.cs index 982db47..e9a09f0 100644 --- a/BasicRotations/Healer/zAST_BETA.cs +++ b/BasicRotations/Healer/zAST_BETA.cs @@ -10,6 +10,9 @@ public sealed class zAST_BETA : AstrologianRotation [Range(4, 20, ConfigUnitType.Seconds)] [RotationConfig(CombatType.PvE, Name = "Use Earthly Star during countdown timer.")] public float UseEarthlyStarTime { get; set; } = 15; + + [RotationConfig(CombatType.PvE, Name = "Use DOT while moving even if it does not need refresh (disabling is a damage down)")] + public bool DOTUpkeep { get; set; } = true; #endregion #region Countdown Logic @@ -175,7 +178,7 @@ protected override bool GeneralGCD(out IAction? act) if (FallMaleficPvE.CanUse(out act)) return true; - if (CombustIiiPvE.CanUse(out act, skipStatusProvideCheck: true)) return true; + if (CombustIiiPvE.CanUse(out act, skipStatusProvideCheck: DOTUpkeep)) return true; return base.GeneralGCD(out act); } diff --git a/BasicRotations/Ranged/MCH_Default.cs b/BasicRotations/Ranged/MCH_Default.cs index 14ff893..e96d942 100644 --- a/BasicRotations/Ranged/MCH_Default.cs +++ b/BasicRotations/Ranged/MCH_Default.cs @@ -1,6 +1,6 @@ namespace DefaultRotations.Ranged; -[Rotation("Default", CombatType.PvE, GameVersion = "7.00", Description = "")] +[Rotation("Default", CombatType.PvE, GameVersion = "7.05")] [SourceCode(Path = "main/DefaultRotations/Ranged/MCH_Default.cs")] [Api(3)] public sealed class MCH_Default : MachinistRotation @@ -8,6 +8,9 @@ public sealed class MCH_Default : MachinistRotation #region Config Options [RotationConfig(CombatType.PvE, Name = "(Warning: Queen logic is new and untested, uncheck to test new logic) Skip Queen Logic and uses Rook Autoturret/Automaton Queen immediately whenever you get 50 battery")] private bool SkipQueenLogic { get; set; } = true; + + [RotationConfig(CombatType.PvE, Name = "Prioritize Barrel Stabilizer use")] + private bool BSPrio { get; set; } = false; #endregion #region Countdown logic @@ -65,6 +68,8 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act) // Logic for using attack abilities outside of GCD, focusing on burst windows and cooldown management. protected override bool AttackAbility(IAction nextGCD, out IAction? act) { + if (BSPrio && BarrelStabilizerPvE.CanUse(out act)) return true; + // Check for not burning Hypercharge below level 52 on AOE bool LowLevelHyperCheck = !AutoCrossbowPvE.EnoughLevel && SpreadShotPvE.CanUse(out _); diff --git a/BasicRotations/RebornRotations.csproj b/BasicRotations/RebornRotations.csproj index 884ef5b..efc187b 100644 --- a/BasicRotations/RebornRotations.csproj +++ b/BasicRotations/RebornRotations.csproj @@ -16,7 +16,7 @@ - +