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);