diff --git a/BasicRotations/PVPRotations/Tank/GNB_Default.PVP.cs b/BasicRotations/PVPRotations/Tank/GNB_Default.PVP.cs
index e088d344e..1a7d52cc6 100644
--- a/BasicRotations/PVPRotations/Tank/GNB_Default.PVP.cs
+++ b/BasicRotations/PVPRotations/Tank/GNB_Default.PVP.cs
@@ -1,6 +1,6 @@
namespace DefaultRotations.Tank;
-[Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")]
+[Rotation("Default PVP", CombatType.PvP, GameVersion = "7.15", Description = "Beta Rotation")]
[SourceCode(Path = "main/BasicRotations/PVPRotations/Tank/GNB_Default.PvP.cs")]
[Api(4)]
public sealed class GNB_DefaultPvP : GunbreakerRotation
@@ -79,13 +79,32 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
return base.EmergencyAbility(nextGCD, out act);
}
+ protected override bool DefenseSingleAbility(IAction nextGCD, out IAction? act)
+ {
+ act = null;
+ if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false;
+
+ if (HeartOfCorundumPvP.CanUse(out act)) return true;
+
+ return base.DefenseSingleAbility(nextGCD, out act);
+ }
+
protected override bool AttackAbility(IAction nextGCD, out IAction? act)
{
act = null;
if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false;
+ if (JugularRipPvP.CanUse(out act)) return true;
+ if (AbdomenTearPvE.CanUse(out act, usedUp: true)) return true;
+ if (EyeGougePvP.CanUse(out act)) return true;
+ if (FatedBrandPvP.CanUse(out act, usedUp: true)) return true;
+
+ if (BlastingZonePvP.CanUse(out act)) return true;
+ if (RoughDividePvP.CanUse(out act, usedUp: true)) return true;
+
return base.AttackAbility(nextGCD, out act);
}
+
protected override bool GeneralAbility(IAction nextGCD, out IAction? act)
{
act = null;
@@ -93,6 +112,7 @@ protected override bool GeneralAbility(IAction nextGCD, out IAction? act)
return base.GeneralAbility(nextGCD, out act);
}
+
protected override bool GeneralGCD(out IAction? act)
{
act = null;
@@ -100,10 +120,20 @@ protected override bool GeneralGCD(out IAction? act)
if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false;
if (!Player.HasStatus(true, StatusID.Guard) && UseSprintPvP && !Player.HasStatus(true, StatusID.Sprint) && !InCombat && SprintPvP.CanUse(out act)) return true;
- if (SolidBarrelPvP.CanUse(out act)) return true;
- if (BrutalShellPvP.CanUse(out act)) return true;
- if (KeenEdgePvP.CanUse(out act)) return true;
+ if (!JugularRipPvPReady && !AbdomenTearPvPReady && !EyeGougePvPReady && !FatedBrandPvPReady
+ && FatedCirclePvP.CanUse(out act)) return true;
+ if (WickedTalonPvE.CanUse(out act, usedUp: true)) return true;
+ if (SavageClawPvP.CanUse(out act, usedUp: true)) return true;
+ if (GnashingFangPvP.CanUse(out act, usedUp: true)) return true;
+
+ if (!SavageClawPvPReady && !WickedTalonPvPReady)
+ {
+ if (BurstStrikePvP.CanUse(out act)) return true;
+ if (SolidBarrelPvP.CanUse(out act)) return true;
+ if (BrutalShellPvP.CanUse(out act)) return true;
+ if (KeenEdgePvP.CanUse(out act)) return true;
+ }
return base.GeneralGCD(out act);
}
diff --git a/BasicRotations/Tank/PLD_Default.cs b/BasicRotations/Tank/PLD_Default.cs
index 3fb5f8a23..fc4df56ee 100644
--- a/BasicRotations/Tank/PLD_Default.cs
+++ b/BasicRotations/Tank/PLD_Default.cs
@@ -50,7 +50,6 @@ public class PLD_Default : PaladinRotation
[RotationConfig(CombatType.PvE, Name = "Health threshold for Cover (Set to 0 to disable)")]
private float CoverRatio { get; set; } = 0.3f;
- private bool HasAtonementReady => Player.HasStatus(true, StatusID.AtonementReady);
private bool HasSupplicationReady => Player.HasStatus(true, StatusID.SupplicationReady);
private bool HasSepulchreReady => Player.HasStatus(true, StatusID.SepulchreReady);
private bool HasHonorReady => Player.HasStatus(true, StatusID.BladeOfHonorReady);
diff --git a/RotationSolver.Basic/Rotations/Basic/GunbreakerRotation.cs b/RotationSolver.Basic/Rotations/Basic/GunbreakerRotation.cs
index 9840e2b4b..5e4dbefad 100644
--- a/RotationSolver.Basic/Rotations/Basic/GunbreakerRotation.cs
+++ b/RotationSolver.Basic/Rotations/Basic/GunbreakerRotation.cs
@@ -1,3 +1,5 @@
+using Dalamud.Interface.Colors;
+
namespace RotationSolver.Basic.Rotations.Basic;
partial class GunbreakerRotation
@@ -36,6 +38,9 @@ partial class GunbreakerRotation
/// Gets the max combo time of the Gnashing Fang combo.
///
public static short MaxTimerDuration => JobGauge.MaxTimerDuration;
+ #endregion
+
+ #region Debug Status
///
public override void DisplayStatus()
@@ -44,10 +49,20 @@ public override void DisplayStatus()
ImGui.Text("AmmoComboStep: " + AmmoComboStep.ToString());
ImGui.Text("MaxAmmo: " + MaxAmmo.ToString());
ImGui.Text("MaxTimerDuration: " + MaxTimerDuration.ToString());
+ ImGui.TextColored(ImGuiColors.DalamudYellow, "PvP Actions");
+ ImGui.Text("SavageClawPvPReady: " + SavageClawPvPReady.ToString());
+ ImGui.Text("WickedTalonPvPReady: " + WickedTalonPvPReady.ToString());
+ ImGui.Spacing();
+ ImGui.Text("HypervelocityPvPReady: " + HypervelocityPvPReady.ToString());
+ ImGui.Text("FatedBrandPvPReady: " + FatedBrandPvPReady.ToString());
+ ImGui.Text("JugularRipPvPReady: " + JugularRipPvPReady.ToString());
+ ImGui.Text("AbdomenTearPvPReady: " + AbdomenTearPvPReady.ToString());
+ ImGui.Text("EyeGougePvPReady: " + EyeGougePvPReady.ToString());
+ ImGui.Spacing();
+ ImGui.Text("HasTerminalTrigger: " + HasTerminalTrigger.ToString());
}
#endregion
-
#region PvE Actions
static partial void ModifyKeenEdgePvE(ref ActionSetting setting)
@@ -71,7 +86,7 @@ static partial void ModifyBrutalShellPvE(ref ActionSetting setting)
static partial void ModifyCamouflagePvE(ref ActionSetting setting)
{
- setting.ActionCheck = () => Player.IsTargetOnSelf();
+ setting.TargetType = TargetType.Self;
}
static partial void ModifyDemonSlicePvE(ref ActionSetting setting)
@@ -298,13 +313,126 @@ static partial void ModifyLionHeartPvE(ref ActionSetting setting)
#endregion
+ #region PvP Actions Unassignable
+
+ ///
+ /// Gnashing Fang 2
+ ///
+ public static bool SavageClawPvPReady => Service.GetAdjustedActionId(ActionID.GnashingFangPvP) == ActionID.SavageClawPvP;
+
+ ///
+ /// Gnashing Fang 3
+ ///
+ public static bool WickedTalonPvPReady => Service.GetAdjustedActionId(ActionID.GnashingFangPvP) == ActionID.WickedTalonPvP;
+
+ ///
+ ///
+ ///
+ public static bool HypervelocityPvPReady => Service.GetAdjustedActionId(ActionID.ContinuationPvP) == ActionID.HypervelocityPvP;
+
+ ///
+ ///
+ ///
+ public static bool FatedBrandPvPReady => Service.GetAdjustedActionId(ActionID.ContinuationPvP) == ActionID.FatedBrandPvP;
+
+ ///
+ ///
+ ///
+ public static bool JugularRipPvPReady => Service.GetAdjustedActionId(ActionID.ContinuationPvP) == ActionID.JugularRipPvP;
+
+ ///
+ ///
+ ///
+ public static bool AbdomenTearPvPReady => Service.GetAdjustedActionId(ActionID.ContinuationPvP) == ActionID.AbdomenTearPvP;
+
+ ///
+ ///
+ ///
+ public static bool EyeGougePvPReady => Service.GetAdjustedActionId(ActionID.ContinuationPvP) == ActionID.EyeGougePvP;
+ #endregion
+
+ ///
+ ///
+ ///
+ public static bool HasTerminalTrigger => !Player.WillStatusEndGCD(0, 0, true, StatusID.RelentlessRush);
+
#region PvP Actions
+ static partial void ModifyGnashingFangPvP(ref ActionSetting setting)
+ {
+
+ }
+
+ static partial void ModifyFatedCirclePvP(ref ActionSetting setting)
+ {
+ setting.CreateConfig = () => new ActionConfig()
+ {
+ AoeCount = 1,
+ };
+ }
+
+ static partial void ModifyContinuationPvP(ref ActionSetting setting)
+ {
+ setting.CreateConfig = () => new ActionConfig()
+ {
+ AoeCount = 1,
+ };
+ }
+
static partial void ModifyRoughDividePvP(ref ActionSetting setting)
{
setting.SpecialType = SpecialActionType.MovingForward;
}
+ static partial void ModifyBlastingZonePvP(ref ActionSetting setting)
+ {
+
+ }
+
+ static partial void ModifyHeartOfCorundumPvP(ref ActionSetting setting)
+ {
+
+ }
+
+ static partial void ModifySavageClawPvP(ref ActionSetting setting)
+ {
+ setting.ActionCheck = () => SavageClawPvPReady;
+ }
+
+ static partial void ModifyWickedTalonPvP(ref ActionSetting setting)
+ {
+ setting.ActionCheck = () => WickedTalonPvPReady;
+ }
+
+ static partial void ModifyHypervelocityPvP(ref ActionSetting setting)
+ {
+ setting.ActionCheck = () => HypervelocityPvPReady;
+ }
+
+ static partial void ModifyFatedBrandPvP(ref ActionSetting setting)
+ {
+ setting.ActionCheck = () => FatedBrandPvPReady;
+ setting.CreateConfig = () => new ActionConfig()
+ {
+ AoeCount = 1,
+ };
+ }
+
+ static partial void ModifyJugularRipPvP(ref ActionSetting setting)
+ {
+ setting.ActionCheck = () => JugularRipPvPReady;
+ }
+
+ static partial void ModifyAbdomenTearPvP(ref ActionSetting setting)
+ {
+ setting.ActionCheck = () => AbdomenTearPvPReady;
+ }
+
+ static partial void ModifyEyeGougePvP(ref ActionSetting setting)
+ {
+ setting.ActionCheck = () => EyeGougePvPReady;
+ }
+
///
protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
{