Skip to content

Commit

Permalink
Merge pull request #538 from FFXIV-CombatReborn/PLDNINSGE
Browse files Browse the repository at this point in the history
PLD and NIN ability modifications, SGE dot fix
  • Loading branch information
LTS-FFXIV authored Jan 7, 2025
2 parents c8a6823 + 1f33b16 commit 134fb02
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 35 deletions.
7 changes: 6 additions & 1 deletion BasicRotations/Melee/NIN_Default.cs
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,11 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
// If Ninjutsu is available or not in combat, defers to the base class's emergency ability logic.
if (!NoNinjutsu || !InCombat) return base.EmergencyAbility(nextGCD, out act);

if (NoNinjutsu)
{
if (!CombatElapsedLess(10) && FleetingRaijuPvE.CanUse(out act)) return true;
}

// First priority is given to Kassatsu if it's available, allowing for an immediate powerful Ninjutsu.
if (NoNinjutsu && KassatsuPvE.CanUse(out act)) return true;

Expand All @@ -331,7 +336,7 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
if (!KunaisBanePvE.EnoughLevel && TrickAttackPvE.CanUse(out act, skipStatusProvideCheck: IsShadowWalking)) return true;

// If Trick Attack is on cooldown but will not be ready soon, considers using Meisui to recover Ninki.
if (TrickAttackPvE.Cooldown.IsCoolingDown && !TrickAttackPvE.Cooldown.WillHaveOneCharge(19) && MeisuiPvE.CanUse(out act)) return true;
if (TrickAttackPvE.Cooldown.IsCoolingDown && !TrickAttackPvE.Cooldown.WillHaveOneCharge(19) && TenChiJinPvE.Cooldown.IsCoolingDown && MeisuiPvE.CanUse(out act)) return true;
}

// If none of the specific conditions are met, falls back to the base class's emergency ability logic.
Expand Down
14 changes: 3 additions & 11 deletions BasicRotations/Tank/PLD_Beta.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,6 @@ public sealed class PLD_Beta : PaladinRotation
public float ClemencyNoRequi { get; set; } = 0.4f;
#endregion

private const ActionID ConfiteorPvEActionId = (ActionID)16459;
private new readonly IBaseAction ConfiteorPvE = new BaseAction(ConfiteorPvEActionId);

private const ActionID ImperatorPvEActionId = (ActionID)36921;
private new readonly IBaseAction ImperatorPvE = new BaseAction(ImperatorPvEActionId);

#region Countdown Logic
protected override IAction? CountDownAction(float remainTime)
{
Expand Down Expand Up @@ -173,7 +167,7 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act)
// if requiscat is not able to proc confiteor, use it as AOE tool if able, otherwise as Single Target
if (!RequiescatMasteryTrait.EnoughLevel)
{
if (HolyCirclePvE.EnoughLevel && NumberOfHostilesInRange > 1 && RequiescatPvE.CanUse(out act, skipAoeCheck: true, usedUp: true)) return true;
if (HolyCirclePvE.EnoughLevel && NumberOfHostilesInRange >= 1 && IsLastAbility(true, FightOrFlightPvE) && RequiescatPvE.CanUse(out act, skipAoeCheck: true, usedUp: true)) return true;
if (!HolyCirclePvE.EnoughLevel && (NumberOfHostilesInRange == 1 || (RequiescatPvE.Target.Target?.IsBossFromIcon() ?? false)) && RequiescatPvE.CanUse(out act, skipAoeCheck: true, usedUp: true)) return true;
}

Expand Down Expand Up @@ -213,13 +207,11 @@ protected override bool GeneralGCD(out IAction? act)
if (PassageProtec && Player.HasStatus(true, StatusID.PassageOfArms)) return false;

// Confiteor Combo
if (BladeOfValorPvE.EnoughLevel && BladeOfValorPvE.CanUse(out act)) return true;
if (BladeOfTruthPvE.EnoughLevel && BladeOfTruthPvE.CanUse(out act)) return true;
if (BladeOfFaithPvE.EnoughLevel && BladeOfFaithPvE.CanUse(out act)) return true;
if (Player.HasStatus(true, StatusID.ConfiteorReady) && ConfiteorPvE.CanUse(out act, usedUp: true, skipAoeCheck: true)) return true;
if (ConfiteorPvE.CanUse(out act, usedUp: true, skipAoeCheck: true)) return true;

if (GoringBladePvE.CanUse(out act)) return true;

// Atonement Combo
if (SepulchrePvE.CanUse(out act)) return true;
if (SupplicationPvE.CanUse(out act)) return true;
if (AtonementPvE.CanUse(out act)) return true;
Expand Down
58 changes: 36 additions & 22 deletions RotationSolver.Basic/Rotations/Basic/PaladinRotation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,6 @@ partial class PaladinRotation
/// </summary>
public override bool CanHealAreaAbility => false;

/// <summary>
///
/// </summary>
public static bool HasDivineMight => !Player.WillStatusEndGCD(0, 0, true, StatusID.DivineMight);

/// <summary>
///
/// </summary>
public static bool HasFightOrFlight => !Player.WillStatusEndGCD(0, 0, true, StatusID.FightOrFlight);

/// <summary>
/// Holds the remaining amount of Requiescat stacks
/// </summary>
Expand All @@ -44,6 +34,30 @@ public static byte RequiescatStacks
public static byte OathGauge => JobGauge.OathGauge;
#endregion


#region Status Tracking

/// <summary>
///
/// </summary>
public static bool HasDivineMight => !Player.WillStatusEndGCD(0, 0, true, StatusID.DivineMight);

/// <summary>
///
/// </summary>
public static bool HasFightOrFlight => !Player.WillStatusEndGCD(0, 0, true, StatusID.FightOrFlight);

/// <summary>
///
/// </summary>
public static bool HasConfiteorReady => !Player.WillStatusEndGCD(0, 0, true, StatusID.ConfiteorReady);

/// <summary>
///
/// </summary>
public static bool HasAtonementReady => !Player.WillStatusEndGCD(0, 0, true, StatusID.AtonementReady);
#endregion

#region Actions Unassignable

/// <summary>
Expand All @@ -54,7 +68,7 @@ public static byte RequiescatStacks
/// <summary>
///
/// </summary>
public static bool SepulchreReady => Service.GetAdjustedActionId(ActionID.SupplicationPvE) == ActionID.SepulchrePvE;
public static bool SepulchreReady => Service.GetAdjustedActionId(ActionID.AtonementPvE) == ActionID.SepulchrePvE;

/// <summary>
///
Expand All @@ -64,12 +78,12 @@ public static byte RequiescatStacks
/// <summary>
///
/// </summary>
public static bool BladeOfTruthReady => Service.GetAdjustedActionId(ActionID.BladeOfFaithPvE) == ActionID.BladeOfTruthPvE;
public static bool BladeOfTruthReady => Service.GetAdjustedActionId(ActionID.ConfiteorPvE) == ActionID.BladeOfTruthPvE;

/// <summary>
///
/// </summary>
public static bool BladeOfValorReady => Service.GetAdjustedActionId(ActionID.BladeOfTruthPvE) == ActionID.BladeOfValorPvE;
public static bool BladeOfValorReady => Service.GetAdjustedActionId(ActionID.ConfiteorPvE) == ActionID.BladeOfValorPvE;

/// <summary>
///
Expand All @@ -86,12 +100,16 @@ public override void DisplayStatus()
ImGui.Text("HasDivineMight: " + HasDivineMight.ToString());
ImGui.Text("HasFightOrFlight: " + HasFightOrFlight.ToString());
ImGui.Text("CanHealAreaAbility: " + CanHealAreaAbility.ToString());
ImGui.Text("SupplicationReady: " + SupplicationReady.ToString());
ImGui.Text("SepulchreReady: " + SepulchreReady.ToString());
ImGui.Spacing();
ImGui.Text("HasConfiteorReady: " + HasConfiteorReady.ToString());
ImGui.Text("BladeOfFaithReady: " + BladeOfFaithReady.ToString());
ImGui.Text("BladeOfTruthReady: " + BladeOfTruthReady.ToString());
ImGui.Text("BladeOfValorReady: " + BladeOfValorReady.ToString());
ImGui.Text("BladeOfHonorReady: " + BladeOfHonorReady.ToString());
ImGui.Spacing();
ImGui.Text("HasAtonementReady: " + HasAtonementReady.ToString());
ImGui.Text("SupplicationReady: " + SupplicationReady.ToString());
ImGui.Text("SepulchreReady: " + SepulchreReady.ToString());
}

#endregion
Expand Down Expand Up @@ -282,18 +300,18 @@ static partial void ModifyIntervenePvE(ref ActionSetting setting)

static partial void ModifyAtonementPvE(ref ActionSetting setting)
{
setting.StatusNeed = [StatusID.AtonementReady];
setting.ActionCheck = () => HasAtonementReady;
setting.StatusProvide = [StatusID.SupplicationReady];
}

static partial void ModifySepulchrePvE(ref ActionSetting setting)
{
setting.StatusNeed = [StatusID.SepulchreReady];
setting.ActionCheck = () => SepulchreReady;
}

static partial void ModifyConfiteorPvE(ref ActionSetting setting)
{
setting.StatusNeed = [StatusID.ConfiteorReady];
setting.ActionCheck = () => HasConfiteorReady || BladeOfFaithReady || BladeOfTruthReady || BladeOfValorReady || IsLastAction(ActionID.ImperatorPvE) || (IsLastAction(ActionID.RequiescatPvE) && RequiescatMasteryTrait.EnoughLevel);
setting.CreateConfig = () => new ActionConfig()
{
AoeCount = 1,
Expand All @@ -319,7 +337,6 @@ static partial void ModifyExpiacionPvE(ref ActionSetting setting)
static partial void ModifyBladeOfFaithPvE(ref ActionSetting setting)
{
setting.ActionCheck = () => BladeOfFaithReady;
setting.ComboIds = [ActionID.ConfiteorPvE];
setting.CreateConfig = () => new ActionConfig()
{
AoeCount = 1,
Expand All @@ -329,7 +346,6 @@ static partial void ModifyBladeOfFaithPvE(ref ActionSetting setting)
static partial void ModifyBladeOfTruthPvE(ref ActionSetting setting)
{
setting.ActionCheck = () => BladeOfTruthReady;
setting.ComboIds = [ActionID.BladeOfFaithPvE];
setting.CreateConfig = () => new ActionConfig()
{
AoeCount = 1,
Expand All @@ -339,7 +355,6 @@ static partial void ModifyBladeOfTruthPvE(ref ActionSetting setting)
static partial void ModifyBladeOfValorPvE(ref ActionSetting setting)
{
setting.ActionCheck = () => BladeOfValorReady;
setting.ComboIds = [ActionID.BladeOfTruthPvE];
setting.CreateConfig = () => new ActionConfig()
{
AoeCount = 1,
Expand Down Expand Up @@ -374,7 +389,6 @@ static partial void ModifyBladeOfHonorPvE(ref ActionSetting setting)
static partial void ModifySupplicationPvE(ref ActionSetting setting)
{
setting.ActionCheck = () => SupplicationReady;
setting.StatusNeed = [StatusID.SupplicationReady];
setting.StatusProvide = [StatusID.SepulchreReady];
}

Expand Down
8 changes: 7 additions & 1 deletion RotationSolver.Basic/Rotations/Basic/SageRotation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,13 @@ static partial void ModifyDyskrasiaIiPvE(ref ActionSetting setting)

static partial void ModifyEukrasianDyskrasiaPvE(ref ActionSetting setting)
{
setting.TargetStatusProvide = [StatusID.EukrasianDyskrasia];
setting.TargetStatusProvide =
[
StatusID.EukrasianDosis,
StatusID.EukrasianDosisIi,
StatusID.EukrasianDosisIii,
StatusID.EukrasianDyskrasia
];
setting.CreateConfig = () => new ActionConfig()
{
AoeCount = 3,
Expand Down

0 comments on commit 134fb02

Please sign in to comment.