From e519419f333d3d25d06c62fa0deab88a7bc97331 Mon Sep 17 00:00:00 2001
From: LTS-FFXIV <127939494+LTS-FFXIV@users.noreply.github.com>
Date: Sat, 28 Sep 2024 18:45:13 -0500
Subject: [PATCH] Nuget bump and moved all ability call logic to rotations
---
BasicRotations/Melee/MNK_Default.cs | 30 ++++++++++++++++++++++++++-
BasicRotations/Melee/RPR_Default.cs | 8 +++----
BasicRotations/Melee/SAM_Default.cs | 8 +++----
BasicRotations/Melee/VPR_Default.cs | 4 ++--
BasicRotations/Ranged/BRD_Default.cs | 21 +++++++++++++++++++
BasicRotations/Ranged/DNC_Default.cs | 22 ++++++++++++++++++++
BasicRotations/Ranged/MCH_Default.cs | 8 +++++++
BasicRotations/Ranged/zMCH_Beta.cs | 12 +++++++++++
BasicRotations/Ranged/zMCH_Beta_2.cs | 8 +++++++
BasicRotations/RebornRotations.csproj | 2 +-
BasicRotations/Tank/PLD_Default.cs | 17 +++++++++++++++
11 files changed, 128 insertions(+), 12 deletions(-)
diff --git a/BasicRotations/Melee/MNK_Default.cs b/BasicRotations/Melee/MNK_Default.cs
index 163eee0..6e0ef63 100644
--- a/BasicRotations/Melee/MNK_Default.cs
+++ b/BasicRotations/Melee/MNK_Default.cs
@@ -61,6 +61,34 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
return base.EmergencyAbility(nextGCD, out act);
}
+ [RotationDesc(ActionID.ThunderclapPvE)]
+ protected override bool MoveForwardAbility(IAction nextGCD, out IAction? act)
+ {
+ if (ThunderclapPvE.CanUse(out act)) return true;
+ return base.MoveForwardAbility(nextGCD, out act);
+ }
+
+ [RotationDesc(ActionID.FeintPvE)]
+ protected override bool DefenseAreaAbility(IAction nextGCD, out IAction? act)
+ {
+ if (FeintPvE.CanUse(out act)) return true;
+ return base.DefenseAreaAbility(nextGCD, out act);
+ }
+
+ [RotationDesc(ActionID.MantraPvE)]
+ protected override bool HealAreaAbility(IAction nextGCD, out IAction? act)
+ {
+ if (MantraPvE.CanUse(out act)) return true;
+ return base.HealAreaAbility(nextGCD, out act);
+ }
+
+ [RotationDesc(ActionID.RiddleOfEarthPvE)]
+ protected override bool DefenseSingleAbility(IAction nextGCD, out IAction? act)
+ {
+ if (RiddleOfEarthPvE.CanUse(out act, usedUp: true)) return true;
+ return base.DefenseSingleAbility(nextGCD, out act);
+ }
+
protected override bool AttackAbility(IAction nextGCD, out IAction? act)
{
act = null;
@@ -68,7 +96,7 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act)
{
return false;
}
-
+
// you need to position yourself in the centre of the mobs if they are large, that range is only 3 yarms
if (AutoPB_AOE && NumberOfHostilesInRange >= 2)
{
diff --git a/BasicRotations/Melee/RPR_Default.cs b/BasicRotations/Melee/RPR_Default.cs
index 4205fe2..783cbff 100644
--- a/BasicRotations/Melee/RPR_Default.cs
+++ b/BasicRotations/Melee/RPR_Default.cs
@@ -148,8 +148,8 @@ protected override bool GeneralGCD(out IAction? act)
}
// Try using Gallows/Gibbet that player is in position for when without Enchanced status
- if (GallowsPvE.CanUse(out act, skipComboCheck: true) && CanHitPositional(EnemyPositional.Rear, GallowsPvE.Target.Target)) return true;
- if (GibbetPvE.CanUse(out act, skipComboCheck: true) && CanHitPositional(EnemyPositional.Flank, GibbetPvE.Target.Target)) return true;
+ if (GallowsPvE.CanUse(out act, skipComboCheck: true) && GallowsPvE.Target.Target != null && CanHitPositional(EnemyPositional.Rear, GallowsPvE.Target.Target)) return true;
+ if (GibbetPvE.CanUse(out act, skipComboCheck: true) && GibbetPvE.Target.Target != null && CanHitPositional(EnemyPositional.Flank, GibbetPvE.Target.Target)) return true;
if (GallowsPvE.CanUse(out act, skipComboCheck: true)) return true;
if (GibbetPvE.CanUse(out act, skipComboCheck: true)) return true;
@@ -205,8 +205,8 @@ private bool ItsGluttonyTime(out IAction? act)
}
// Try using Executioners Gallows/Gibbet that player is in position for when without Enchanced status
- if (ExecutionersGallowsPvE.CanUse(out act, skipComboCheck: true) && CanHitPositional(EnemyPositional.Rear, ExecutionersGallowsPvE.Target.Target)) return true;
- if (ExecutionersGibbetPvE.CanUse(out act, skipComboCheck: true) && CanHitPositional(EnemyPositional.Flank, ExecutionersGibbetPvE.Target.Target)) return true;
+ if (ExecutionersGallowsPvE.CanUse(out act, skipComboCheck: true) && ExecutionersGallowsPvE.Target.Target != null && CanHitPositional(EnemyPositional.Rear, ExecutionersGallowsPvE.Target.Target)) return true;
+ if (ExecutionersGibbetPvE.CanUse(out act, skipComboCheck: true) && ExecutionersGibbetPvE.Target.Target != null && CanHitPositional(EnemyPositional.Flank, ExecutionersGibbetPvE.Target.Target)) return true;
if (ExecutionersGallowsPvE.CanUse(out act, skipComboCheck: true)) return true;
if (ExecutionersGibbetPvE.CanUse(out act, skipComboCheck: true)) return true;
diff --git a/BasicRotations/Melee/SAM_Default.cs b/BasicRotations/Melee/SAM_Default.cs
index 8f7c331..8e50394 100644
--- a/BasicRotations/Melee/SAM_Default.cs
+++ b/BasicRotations/Melee/SAM_Default.cs
@@ -164,15 +164,15 @@ protected override bool GeneralGCD(out IAction? act)
YukikazePvE.CanUse(out act, skipComboCheck: HaveMeikyoShisui && HasGetsu && HasKa)) return true;
// single target 123 combo's 3 or used 3 directly during burst when MeikyoShisui is active, while also trying to start with the one that player is in position for extra DMG
- if (GekkoPvE.CanUse(out act, skipComboCheck: HaveMeikyoShisui && !HasGetsu) && CanHitPositional(EnemyPositional.Rear, GekkoPvE.Target.Target)) return true;
- if (KashaPvE.CanUse(out act, skipComboCheck: HaveMeikyoShisui && !HasKa) && CanHitPositional(EnemyPositional.Flank, KashaPvE.Target.Target)) return true;
+ if (GekkoPvE.CanUse(out act, skipComboCheck: HaveMeikyoShisui && !HasGetsu) && GekkoPvE.Target.Target != null && CanHitPositional(EnemyPositional.Rear, GekkoPvE.Target.Target)) return true;
+ if (KashaPvE.CanUse(out act, skipComboCheck: HaveMeikyoShisui && !HasKa) && KashaPvE.Target.Target != null && CanHitPositional(EnemyPositional.Flank, KashaPvE.Target.Target)) return true;
if (GekkoPvE.CanUse(out act, skipComboCheck: HaveMeikyoShisui && !HasGetsu)) return true;
if (KashaPvE.CanUse(out act, skipComboCheck: HaveMeikyoShisui && !HasKa)) return true;
// single target 123 combo's 2, while also trying to start with the one that player is in position for extra DMG
- if (!HasGetsu && JinpuPvE.CanUse(out act) && (CanHitPositional(EnemyPositional.Rear, JinpuPvE.Target.Target) || (!HasMoon && HasFlower))) return true;
- if (!HasKa && ShifuPvE.CanUse(out act) && (CanHitPositional(EnemyPositional.Flank, ShifuPvE.Target.Target) || (!HasFlower && HasMoon))) return true;
+ if (!HasGetsu && JinpuPvE.CanUse(out act) && JinpuPvE.Target.Target != null && (CanHitPositional(EnemyPositional.Rear, JinpuPvE.Target.Target) || (!HasMoon && HasFlower))) return true;
+ if (!HasKa && ShifuPvE.CanUse(out act) && ShifuPvE.Target.Target != null && (CanHitPositional(EnemyPositional.Flank, ShifuPvE.Target.Target) || (!HasFlower && HasMoon))) return true;
if ((!HasMoon || IsMoonTimeLessThanFlower || !ShifuPvE.EnoughLevel) && JinpuPvE.CanUse(out act)) return true;
if ((!HasFlower || !IsMoonTimeLessThanFlower) && ShifuPvE.CanUse(out act)) return true;
diff --git a/BasicRotations/Melee/VPR_Default.cs b/BasicRotations/Melee/VPR_Default.cs
index f10889c..dcb0687 100644
--- a/BasicRotations/Melee/VPR_Default.cs
+++ b/BasicRotations/Melee/VPR_Default.cs
@@ -167,8 +167,8 @@ protected override bool GeneralGCD(out IAction? act)
////Single Target Dread Combo
// Try using Coil that player is in position for extra damage first
- if (HuntersCoilPvE.CanUse(out act, skipComboCheck: true) && CanHitPositional(EnemyPositional.Flank, HuntersCoilPvE.Target.Target)) return true;
- if (SwiftskinsCoilPvE.CanUse(out act, skipComboCheck: true) && CanHitPositional(EnemyPositional.Rear, SwiftskinsCoilPvE.Target.Target)) return true;
+ if (HuntersCoilPvE.CanUse(out act, skipComboCheck: true) && HuntersCoilPvE.Target.Target != null && CanHitPositional(EnemyPositional.Flank, HuntersCoilPvE.Target.Target)) return true;
+ if (SwiftskinsCoilPvE.CanUse(out act, skipComboCheck: true) && SwiftskinsCoilPvE.Target.Target != null && CanHitPositional(EnemyPositional.Rear, SwiftskinsCoilPvE.Target.Target)) return true;
if (HuntersCoilPvE.CanUse(out act, skipComboCheck: true)) return true;
if (SwiftskinsCoilPvE.CanUse(out act, skipComboCheck: true)) return true;
diff --git a/BasicRotations/Ranged/BRD_Default.cs b/BasicRotations/Ranged/BRD_Default.cs
index a6f9c3b..a48b67c 100644
--- a/BasicRotations/Ranged/BRD_Default.cs
+++ b/BasicRotations/Ranged/BRD_Default.cs
@@ -68,6 +68,27 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
return base.EmergencyAbility(nextGCD, out act);
}
+ [RotationDesc(ActionID.TheWardensPaeanPvE)]
+ protected override bool DispelGCD(out IAction? act)
+ {
+ if (TheWardensPaeanPvE.CanUse(out act)) return true;
+ return base.DispelGCD(out act);
+ }
+
+ [RotationDesc(ActionID.NaturesMinnePvE)]
+ protected override bool HealSingleAbility(IAction nextGCD, out IAction? act)
+ {
+ if (NaturesMinnePvE.CanUse(out act)) return true;
+ return base.HealSingleAbility(nextGCD, out act);
+ }
+
+ [RotationDesc(ActionID.TroubadourPvE)]
+ protected override bool DefenseAreaAbility(IAction nextGCD, out IAction act)
+ {
+ if (TroubadourPvE.CanUse(out act)) return true;
+ return false;
+ }
+
protected override bool AttackAbility(IAction nextGCD, out IAction? act)
{
act = null;
diff --git a/BasicRotations/Ranged/DNC_Default.cs b/BasicRotations/Ranged/DNC_Default.cs
index 7291adb..90bd9b1 100644
--- a/BasicRotations/Ranged/DNC_Default.cs
+++ b/BasicRotations/Ranged/DNC_Default.cs
@@ -67,6 +67,28 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
return false;
}
+ [RotationDesc(ActionID.CuringWaltzPvE, ActionID.ImprovisationPvE)]
+ protected override bool HealAreaAbility(IAction nextGCD, out IAction act)
+ {
+ if (CuringWaltzPvE.CanUse(out act, usedUp: true)) return true;
+ if (ImprovisationPvE.CanUse(out act, usedUp: true)) return true;
+ return false;
+ }
+
+ [RotationDesc(ActionID.ShieldSambaPvE)]
+ protected override bool DefenseAreaAbility(IAction nextGCD, out IAction act)
+ {
+ if (ShieldSambaPvE.CanUse(out act, usedUp: true)) return true;
+ return false;
+ }
+
+ [RotationDesc(ActionID.EnAvantPvE)]
+ protected override bool MoveForwardAbility(IAction nextGCD, out IAction act)
+ {
+ if (EnAvantPvE.CanUse(out act, usedUp: true)) return true;
+ return false;
+ }
+
// Override the method for handling attack abilities
protected override bool AttackAbility(IAction nextGCD, out IAction? act)
{
diff --git a/BasicRotations/Ranged/MCH_Default.cs b/BasicRotations/Ranged/MCH_Default.cs
index 4f30a7a..0989b6e 100644
--- a/BasicRotations/Ranged/MCH_Default.cs
+++ b/BasicRotations/Ranged/MCH_Default.cs
@@ -65,6 +65,14 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
return base.EmergencyAbility(nextGCD, out act);
}
+ [RotationDesc(ActionID.TacticianPvE, ActionID.DismantlePvE)]
+ protected override bool DefenseAreaAbility(IAction nextGCD, out IAction act)
+ {
+ if (TacticianPvE.CanUse(out act, skipAoeCheck: true)) return true;
+ if (DismantlePvE.CanUse(out act, skipAoeCheck: true)) return true;
+ return false;
+ }
+
// Logic for using attack abilities outside of GCD, focusing on burst windows and cooldown management.
protected override bool AttackAbility(IAction nextGCD, out IAction? act)
{
diff --git a/BasicRotations/Ranged/zMCH_Beta.cs b/BasicRotations/Ranged/zMCH_Beta.cs
index 0264f7f..0cf6d9a 100644
--- a/BasicRotations/Ranged/zMCH_Beta.cs
+++ b/BasicRotations/Ranged/zMCH_Beta.cs
@@ -20,6 +20,9 @@ public sealed class zMCH_Beta : MachinistRotation
[RotationConfig(CombatType.PvE, Name = "Use burst medicine when available for midfight burst phase (requires auto burst option on)")]
private bool MidfightBurstMeds { get; set; } = false;
+
+ [RotationConfig(CombatType.PvE, Name = "Prevent the use of defense abilties during hypercharge burst")]
+ private bool BurstDefense { get; set; } = false;
#endregion
#region Countdown logic
@@ -58,6 +61,15 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
return base.EmergencyAbility(nextGCD, out act);
}
+ [RotationDesc(ActionID.TacticianPvE, ActionID.DismantlePvE)]
+ protected override bool DefenseAreaAbility(IAction nextGCD, out IAction? act)
+ {
+ if ((!BurstDefense || (BurstDefense && !IsOverheated)) && TacticianPvE.CanUse(out act, skipAoeCheck: true)) return true;
+ if ((!BurstDefense || (BurstDefense && !IsOverheated)) && DismantlePvE.CanUse(out act, skipAoeCheck: true)) return true;
+
+ return base.DefenseAreaAbility(nextGCD, out 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)
{
diff --git a/BasicRotations/Ranged/zMCH_Beta_2.cs b/BasicRotations/Ranged/zMCH_Beta_2.cs
index 9976270..c36fde7 100644
--- a/BasicRotations/Ranged/zMCH_Beta_2.cs
+++ b/BasicRotations/Ranged/zMCH_Beta_2.cs
@@ -71,6 +71,14 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
return base.EmergencyAbility(nextGCD, out act);
}
+ [RotationDesc(ActionID.TacticianPvE, ActionID.DismantlePvE)]
+ protected override bool DefenseAreaAbility(IAction nextGCD, out IAction act)
+ {
+ if (TacticianPvE.CanUse(out act, skipAoeCheck: true)) return true;
+ if (DismantlePvE.CanUse(out act, skipAoeCheck: true)) return true;
+ return false;
+ }
+
// Logic for using attack abilities outside of GCD, focusing on burst windows and cooldown management.
protected override bool AttackAbility(IAction nextGCD, out IAction? act)
{
diff --git a/BasicRotations/RebornRotations.csproj b/BasicRotations/RebornRotations.csproj
index fa8c621..b9f5cf8 100644
--- a/BasicRotations/RebornRotations.csproj
+++ b/BasicRotations/RebornRotations.csproj
@@ -16,7 +16,7 @@
-
+
diff --git a/BasicRotations/Tank/PLD_Default.cs b/BasicRotations/Tank/PLD_Default.cs
index 8757d10..7bc4830 100644
--- a/BasicRotations/Tank/PLD_Default.cs
+++ b/BasicRotations/Tank/PLD_Default.cs
@@ -83,6 +83,9 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
{
if (Player.HasStatus(true, StatusID.Cover) && HallowedWithCover && HallowedGroundPvE.CanUse(out act)) return true;
+ if (HallowedGroundPvE.CanUse(out act)
+ && Player.GetHealthRatio() <= HealthForDyingTanks) return true;
+
if ((Player.HasStatus(true, StatusID.Rampart) || Player.HasStatus(true, StatusID.Sentinel)) &&
InterventionPvE.CanUse(out act) &&
InterventionPvE.Target.Target?.GetHealthRatio() < 0.6) return true;
@@ -93,6 +96,13 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
return base.EmergencyAbility(nextGCD, out act);
}
+ [RotationDesc(ActionID.IntervenePvE)]
+ protected override bool MoveForwardAbility(IAction nextGCD, out IAction? act)
+ {
+ if (IntervenePvE.CanUse(out act)) return true;
+ return base.MoveForwardAbility(nextGCD, out act);
+ }
+
[RotationDesc(ActionID.SentinelPvE, ActionID.RampartPvE, ActionID.BulwarkPvE, ActionID.SheltronPvE, ActionID.ReprisalPvE)]
protected override bool DefenseSingleAbility(IAction nextGCD, out IAction? act)
{
@@ -218,6 +228,13 @@ protected override bool GeneralGCD(out IAction? act)
return base.GeneralGCD(out act);
}
+
+ [RotationDesc(ActionID.ClemencyPvE)]
+ protected override bool HealSingleGCD(out IAction? act)
+ {
+ if (ClemencyPvE.CanUse(out act)) return true;
+ return base.HealSingleGCD(out act);
+ }
#endregion
#region Extra Methods