From 34bdac5c500c3054bb1790d3a7380e7ed42c1bc7 Mon Sep 17 00:00:00 2001 From: LTS-FFXIV <127939494+LTS-FFXIV@users.noreply.github.com> Date: Sat, 7 Sep 2024 06:41:42 -0500 Subject: [PATCH] Add new WHM options, update WAR abilities, and project file Added `UseDivine` and `AsylumSingle` options to `WHM_Default` for enhanced healing capabilities. Modified `EmergencyAbility` and `HealSingleAbility` methods to incorporate these options. Added `GeneralAbility` method for Divine Caress usage. Updated `RebornRotations.csproj` to reference `RotationSolverReborn. Basic` version 7.0.5.51. Updated `WAR_Default` class to remove description and update game version to "7.05". Simplified `CountDownAction` method. Modified `GeneralAbility` to use burst medicine. Enhanced `GeneralGCD` method with new checks and abilities based on Surging Tempest status. --- BasicRotations/Healer/WHM_Default.cs | 16 ++++++++- BasicRotations/RebornRotations.csproj | 2 +- BasicRotations/Tank/WAR_Default.cs | 52 +++++++++++++-------------- 3 files changed, 40 insertions(+), 30 deletions(-) diff --git a/BasicRotations/Healer/WHM_Default.cs b/BasicRotations/Healer/WHM_Default.cs index 043a6db..5001021 100644 --- a/BasicRotations/Healer/WHM_Default.cs +++ b/BasicRotations/Healer/WHM_Default.cs @@ -19,6 +19,12 @@ public sealed class WHM_Default : WhiteMageRotation [RotationConfig(CombatType.PvE, Name = "Regen on Tank at 5 seconds remaining on Prepull Countdown.")] public bool UsePreRegen { get; set; } = true; + [RotationConfig(CombatType.PvE, Name = "Use Divine Carress as soon as its available")] + public bool UseDivine { get; set; } = false; + + [RotationConfig(CombatType.PvE, Name = "Use Asylum as soon a single player heal (i.e. tankbusters) while moving, in addition to normal logic")] + public bool AsylumSingle { get; set; } = false; + [Range(0, 1, ConfigUnitType.Percent)] [RotationConfig(CombatType.PvE, Name = "Minimum health threshold party member needs to be to use Benediction")] public float BenedictionHeal { get; set; } = 0.3f; @@ -51,6 +57,8 @@ public sealed class WHM_Default : WhiteMageRotation #region oGCD Logic protected override bool EmergencyAbility(IAction nextGCD, out IAction? act) { + if (Player.WillStatusEndGCD(0, 3, true, StatusID.DivineGrace) && DivineCaressPvE.CanUse(out act)) return true; + if (nextGCD is IBaseAction action && action.Info.MPNeed >= ThinAirNeed && ThinAirPvE.CanUse(out act)) return true; @@ -63,6 +71,12 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act) return base.EmergencyAbility(nextGCD, out act); } + protected override bool GeneralAbility(IAction nextGCD, out IAction? act) + { + if (UseDivine && DivineCaressPvE.CanUse(out act)) return true; + return base.GeneralAbility(nextGCD, out act); + } + [RotationDesc(ActionID.TemperancePvE, ActionID.LiturgyOfTheBellPvE)] protected override bool DefenseAreaAbility(IAction nextGCD, out IAction? act) { @@ -105,7 +119,7 @@ protected override bool HealSingleAbility(IAction nextGCD, out IAction? act) if (BenedictionPvE.CanUse(out act) && RegenPvE.Target.Target?.GetHealthRatio() < BenedictionHeal) return true; - if (!IsMoving && AsylumPvE.CanUse(out act)) return true; + if (AsylumSingle && !IsMoving && AsylumPvE.CanUse(out act)) return true; if (DivineBenisonPvE.CanUse(out act)) return true; diff --git a/BasicRotations/RebornRotations.csproj b/BasicRotations/RebornRotations.csproj index cdc5727..ede4df2 100644 --- a/BasicRotations/RebornRotations.csproj +++ b/BasicRotations/RebornRotations.csproj @@ -16,7 +16,7 @@ - + diff --git a/BasicRotations/Tank/WAR_Default.cs b/BasicRotations/Tank/WAR_Default.cs index 86c757c..46b1378 100644 --- a/BasicRotations/Tank/WAR_Default.cs +++ b/BasicRotations/Tank/WAR_Default.cs @@ -1,6 +1,6 @@ namespace DefaultRotations.Tank; -[Rotation("Default", CombatType.PvE, GameVersion = "7.00", Description = "Additional Contributions from Sascha")] +[Rotation("Default", CombatType.PvE, GameVersion = "7.05")] [SourceCode(Path = "main/DefaultRotations/Tank/WAR_Default.cs")] [Api(3)] public sealed class WAR_Default : WarriorRotation @@ -29,17 +29,7 @@ public sealed class WAR_Default : WarriorRotation #region Countdown Logic protected override IAction? CountDownAction(float remainTime) { - if (remainTime <= CountDownAhead) - { - if (HasTankStance) - { - if (ProvokePvE.CanUse(out var act)) return act; - } - else - { - if (TomahawkPvE.CanUse(out var act)) return act; - } - } + if (remainTime < 0.54f && TomahawkPvE.CanUse(out var act)) return act; return base.CountDownAction(remainTime); } #endregion @@ -51,8 +41,6 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) if (CombatElapsedLessGCD(1)) return false; - if (UseBurstMedicine(out act)) return true; - if (Player.HasStatus(false, StatusID.SurgingTempest) && !Player.WillStatusEndGCD(2, 0, true, StatusID.SurgingTempest) || !MythrilTempestPvE.EnoughLevel) @@ -61,7 +49,7 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) } - if (IsBurstStatus) + if (IsBurstStatus && (InnerReleaseStacks == 0 || InnerReleaseStacks == 3)) { if (InfuriatePvE.CanUse(out act, usedUp: true)) return true; } @@ -90,6 +78,8 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) protected override bool GeneralAbility(IAction nextGCD, out IAction? act) { + if (IsBurstStatus && UseBurstMedicine(out act)) return true; + if (Player.GetHealthRatio() < ThrillOfBattleHeal) { if (ThrillOfBattlePvE.CanUse(out act)) return true; @@ -143,40 +133,46 @@ protected override bool DefenseAreaAbility(IAction nextGCD, out IAction? act) #region GCD Logic protected override bool GeneralGCD(out IAction? act) { - if (IsLastAction(false, InnerReleasePvE)) + if (!Player.WillStatusEndGCD(3, 0, true, StatusID.SurgingTempest)) { - if (FellCleavePvE.CanUse(out act, skipStatusProvideCheck: true)) return true; + if (ChaoticCyclonePvE.CanUse(out act)) return true; + if (InnerChaosPvE.CanUse(out act)) return true; } - if (Player.HasStatus(false, StatusID.SurgingTempest) && - (IsBurstStatus || !Player.HasStatus(false, StatusID.NascentChaos) || BeastGauge > 80)) + if (!Player.WillStatusEndGCD(3, 0, true, StatusID.SurgingTempest) && !Player.HasStatus(true, StatusID.NascentChaos) && InnerReleaseStacks > 0) { - if (SteelCyclonePvE.CanUse(out act)) return true; - if (InnerBeastPvE.CanUse(out act)) return true; + if (DecimatePvE.CanUse(out act, skipStatusProvideCheck: true)) return true; + if (FellCleavePvE.CanUse(out act, skipStatusProvideCheck: true)) return true; } - if (!Player.WillStatusEndGCD(3, 0, true, StatusID.SurgingTempest)) + if (!Player.WillStatusEndGCD(3, 0, true, StatusID.SurgingTempest) && InnerReleaseStacks == 0) { if (!IsMoving && PrimalRendPvE.CanUse(out act, skipAoeCheck: true)) { if (PrimalRendPvE.Target.Target?.DistanceToPlayer() < 2) return true; } + if (PrimalRuinationPvE.CanUse(out act)) return true; + } - // New check for Primal Ruination - if (Player.HasStatus(false, StatusID.PrimalRuinationReady) && !Player.HasStatus(false, StatusID.InnerRelease)) - { - if (PrimalRuinationPvE.CanUse(out act, skipAoeCheck: true)) return true; - } - + if (!Player.WillStatusEndGCD(3, 0, true, StatusID.SurgingTempest) && !Player.HasStatus(true, StatusID.NascentChaos) && Player.Level <= 60) + { + if (SteelCyclonePvE.CanUse(out act)) return true; + if (InnerBeastPvE.CanUse(out act)) return true; } + // AOE + if (!Player.WillStatusEndGCD(3, 0, true, StatusID.SurgingTempest) && DecimatePvE.CanUse(out act, skipStatusProvideCheck: true)) return true; if (MythrilTempestPvE.CanUse(out act)) return true; if (OverpowerPvE.CanUse(out act)) return true; + + // Single Target + if (!Player.WillStatusEndGCD(3, 0, true, StatusID.SurgingTempest) && FellCleavePvE.CanUse(out act, skipStatusProvideCheck: true)) return true; if (StormsEyePvE.CanUse(out act)) return true; if (StormsPathPvE.CanUse(out act)) return true; if (MaimPvE.CanUse(out act)) return true; if (HeavySwingPvE.CanUse(out act)) return true; + // Ranged if (TomahawkPvE.CanUse(out act)) return true; return base.GeneralGCD(out act);