From 847fd6e6c97ad5b47775896d7f6005e878f76bbd Mon Sep 17 00:00:00 2001 From: LTS-FFXIV <127939494+LTS-FFXIV@users.noreply.github.com> Date: Sun, 17 Nov 2024 19:47:05 -0600 Subject: [PATCH] Update PvP classes and upgrade RotationSolverReborn Updated various PvP classes to remove outdated checks and actions, and added new abilities and checks. Key changes include: - `AST_DefaultPVP`: Removed `TheBolePvP`, `TheArrowPvP`, `TheBalancePvP`; added `MoveForwardAbility`, `OraclePvP`, `LordOfCrownsPvP`, `MinorArcanaPvP`, `LadyOfCrownsPvE`. - `SCH_DefaultPVP`: Removed `MummificationPvP`. - `BLM_DefaultPVP`: Removed `NightWingPvP`, `SuperflarePvP`. - `RDM_DefaultPvP`: Removed `MagickBarrierPvP`, `FrazzlePvP`, `WhiteShift`, `BlackShift`; added `FortePvP`, `PrefulgencePvP`, `EmboldenPvP`, `JoltIiiPvP`, `GrandImpactPvP`, `ScorchPvP`. - `SMN_DefaultPvP`: Removed `FesterPvP`, `EnkindleBahamutPvP`, `EnkindlePhoenixPvP`. - `MNK_DefaultPvP`: Moved `GeneralGCD` to `AttackAbility`; added `EarthsReplyPvP`, `WindsReplyPvP`, `FiresReplyPvP`, `FlintsReplyPvP`, `PouncingCoeurlPvP`, `RisingRaptorPvP`, `LeapingOpoPvP`. - `RPR_DefaultPvP`: Removed `SoulSlicePvP`. - `VPR_DefaultPvP`: Removed `HuntersSnapPvP`, `SwiftskinsCoilPvP`; added `UncoiledTwinbloodPvP`, `BacklashPvP_39187`, `DeathRattlePvP`, `SanguineFeastPvP`, `BloodcoilPvP`. - `BRD_DefaultPvP`: Replaced `EmpyrealArrowPvP` with `HarmonicArrowPvP_41964`. - `DRK_DefaultPvP`: Removed `QuietusPvP`. - `PLD_DefaultPvP`: Removed `ShieldBashPvP`. Upgraded `RotationSolverReborn.Basic` package from version `7.0.5.153` to `7.1.0.3` in `RebornRotations.csproj`. --- .../PVPRotations/Healer/AST_Default.PVP.cs | 22 +++++++-- .../PVPRotations/Healer/SCH_Default.PVP.cs | 1 - .../PVPRotations/Magical/BLM_Default.PVP.cs | 4 -- .../PVPRotations/Magical/RDM_Default.PvP.cs | 46 +++++-------------- .../PVPRotations/Magical/SMN_Default.PVP.cs | 6 --- .../PVPRotations/Melee/MNK_Default.PVP.cs | 35 +++++++------- .../PVPRotations/Melee/RPR_Default.PVP.cs | 1 - .../PVPRotations/Melee/VPR_Default.PVP.cs | 16 +++---- .../PVPRotations/Ranged/BRD_Default.PVP.cs | 2 +- .../PVPRotations/Tank/DRK_Default.PVP.cs | 1 - .../PVPRotations/Tank/PLD_Default.PVP.cs | 1 - BasicRotations/Ranged/BRD_Default.cs | 2 +- BasicRotations/RebornRotations.csproj | 2 +- 13 files changed, 60 insertions(+), 79 deletions(-) diff --git a/BasicRotations/PVPRotations/Healer/AST_Default.PVP.cs b/BasicRotations/PVPRotations/Healer/AST_Default.PVP.cs index 29d9afb..1c6ac7b 100644 --- a/BasicRotations/PVPRotations/Healer/AST_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Healer/AST_Default.PVP.cs @@ -76,29 +76,43 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act) if (TryPurify(out act)) return true; if (UseRecuperatePvP && Player.CurrentHp / Player.MaxHp * 100 < RCValue && RecuperatePvP.CanUse(out act)) return true; - if (TheBolePvP.CanUse(out act, skipAoeCheck: true) && Player.HasStatus(true, StatusID.BoleDrawn_3403)) return true; - if (TheArrowPvP.CanUse(out act, skipAoeCheck: true) && Player.HasStatus(true, StatusID.ArrowDrawn_3404)) return true; - if (TheBalancePvP.CanUse(out act, skipAoeCheck: true) && Player.HasStatus(true, StatusID.BalanceDrawn_3101)) return true; return base.EmergencyAbility(nextGCD, out act); } + protected override bool MoveForwardAbility(IAction nextGCD, out IAction? act) + { + act = null; + + if (EpicyclePvP.CanUse(out act)) return true; + + return base.MoveForwardAbility(nextGCD, out act); + + } + protected override bool AttackAbility(IAction nextGCD, out IAction? act) { act = null; if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false; + if (OraclePvP.CanUse(out act, skipAoeCheck: true)) return true; + + if (LordOfCrownsPvP.CanUse(out act, skipAoeCheck: true)) return true; + if (GravityIiPvP_29248.CanUse(out act, skipAoeCheck: true)) return true; return base.AttackAbility(nextGCD, out act); } + protected override bool GeneralAbility(IAction nextGCD, out IAction? act) { act = null; if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false; - if (DrawPvP.CanUse(out act)) return true; + if (MinorArcanaPvP.CanUse(out act)) return true; + + if (LadyOfCrownsPvE.CanUse(out act, skipAoeCheck: true)) return true; if (AspectedBeneficPvP_29247.CanUse(out act)) return true; diff --git a/BasicRotations/PVPRotations/Healer/SCH_Default.PVP.cs b/BasicRotations/PVPRotations/Healer/SCH_Default.PVP.cs index b8f7afa..29d8db9 100644 --- a/BasicRotations/PVPRotations/Healer/SCH_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Healer/SCH_Default.PVP.cs @@ -87,7 +87,6 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) // Early exits for Guard status or Sprint usage if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false; - if (MummificationPvP.CanUse(out act, skipAoeCheck: true)) return true; return base.AttackAbility(nextGCD, out act); } diff --git a/BasicRotations/PVPRotations/Magical/BLM_Default.PVP.cs b/BasicRotations/PVPRotations/Magical/BLM_Default.PVP.cs index 3a9a92c..3443060 100644 --- a/BasicRotations/PVPRotations/Magical/BLM_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Magical/BLM_Default.PVP.cs @@ -84,10 +84,6 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) act = null; if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false; - if (NightWingPvP.CanUse(out act)) return true; - - if (SuperflarePvP.CanUse(out act)) return true; - return base.AttackAbility(nextGCD, out act); } diff --git a/BasicRotations/PVPRotations/Magical/RDM_Default.PvP.cs b/BasicRotations/PVPRotations/Magical/RDM_Default.PvP.cs index 5ce95d5..494dfe3 100644 --- a/BasicRotations/PVPRotations/Magical/RDM_Default.PvP.cs +++ b/BasicRotations/PVPRotations/Magical/RDM_Default.PvP.cs @@ -85,8 +85,8 @@ protected bool DefenseAreaAbility(out IAction? act) // Early exits for Guard status or Sprint usage if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false; - if (MagickBarrierPvP.CanUse(out act, skipAoeCheck: true)) return true; - if (FrazzlePvP.CanUse(out act, skipAoeCheck: true)) return true; + if (FortePvP.CanUse(out act)) return true; + return base.DefenseAreaGCD(out act); } @@ -97,21 +97,14 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) // Early exits for Guard status or Sprint usage if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false; - if (Player.HasStatus(true, StatusID.BlackShift)) - { - if (ResolutionPvP_29696.CanUse(out act)) return true; - } - - if (Player.HasStatus(true, StatusID.WhiteShift)) - { - if (ResolutionPvP.CanUse(out act)) return true; - } + if (ResolutionPvP.CanUse(out act)) return true; if (DisplacementPvP.CanUse(out act, skipAoeCheck: true)) return true; if (CorpsacorpsPvP.CanUse(out act, skipAoeCheck: true)) return true; - //if (BlackShiftPvP.CanUse(out act)) return true; - //if (WhiteShiftPvP.CanUse(out act)) return true; + if (PrefulgencePvP.CanUse(out act)) return true; + if (EmboldenPvP.CanUse(out act)) return true; + return base.AttackAbility(nextGCD, out act); } @@ -124,27 +117,12 @@ 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; - //Handling status from White Shift - if (Player.HasStatus(true, StatusID.WhiteShift)) - { - if (VerstonePvP.CanUse(out act, skipComboCheck: true)) return true; - if (VeraeroIiiPvP.CanUse(out act)) return true; - if (EnchantedRipostePvP.CanUse(out act)) return true; - if (EnchantedZwerchhauPvP.CanUse(out act)) return true; - if (EnchantedRedoublementPvP.CanUse(out act)) return true; - if (VerholyPvP.CanUse(out act, skipAoeCheck: true)) return true; - } - - //Handling status from BlackShift - if (Player.HasStatus(true, StatusID.BlackShift)) - { - if (VerfirePvP.CanUse(out act, skipComboCheck: true)) return true; - if (VerthunderIiiPvP.CanUse(out act)) return true; - if (EnchantedRipostePvP_29692.CanUse(out act)) return true; - if (EnchantedZwerchhauPvP_29693.CanUse(out act)) return true; - if (EnchantedRedoublementPvP_29694.CanUse(out act)) return true; - if (VerflarePvP.CanUse(out act, skipAoeCheck: true)) return true; - } + if (JoltIiiPvP.CanUse(out act)) return true; + if (GrandImpactPvP.CanUse(out act)) return true; + if (EnchantedRipostePvP.CanUse(out act)) return true; + if (EnchantedZwerchhauPvP.CanUse(out act)) return true; + if (EnchantedRedoublementPvP.CanUse(out act)) return true; + if (ScorchPvP.CanUse(out act)) return true; return base.GeneralGCD(out act); } diff --git a/BasicRotations/PVPRotations/Magical/SMN_Default.PVP.cs b/BasicRotations/PVPRotations/Magical/SMN_Default.PVP.cs index 608f88c..47fb8d1 100644 --- a/BasicRotations/PVPRotations/Magical/SMN_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Magical/SMN_Default.PVP.cs @@ -86,14 +86,8 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) act = null; if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false; - if (FesterPvP.CanUse(out act)) return true; - if (MountainBusterPvP.CanUse(out act)) return true; - if (EnkindleBahamutPvP.CanUse(out act)) return true; - - if (EnkindlePhoenixPvP.CanUse(out act)) return true; - return base.AttackAbility(nextGCD, out act); } protected override bool GeneralAbility(IAction nextGCD, out IAction? act) diff --git a/BasicRotations/PVPRotations/Melee/MNK_Default.PVP.cs b/BasicRotations/PVPRotations/Melee/MNK_Default.PVP.cs index 6325f19..f9b9aa2 100644 --- a/BasicRotations/PVPRotations/Melee/MNK_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Melee/MNK_Default.PVP.cs @@ -79,19 +79,9 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act) return base.EmergencyAbility(nextGCD, out act); } - protected override bool GeneralGCD(out IAction? act) + protected override bool AttackAbility(IAction nextGCD, out IAction? act) { act = null; - // Early exits for Guard status or Sprint usage - 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 (RisingPhoenixPvP.CanUse(out act)) return true; - if (EnlightenmentPvP.CanUse(out act)) return true; - if (RisingPhoenixPvP.CanUse(out act)) return true; - if (PhantomRushPvP.CanUse(out act)) return true; - if (SixsidedStarPvP.CanUse(out act)) return true; - if (EnlightenmentPvP.CanUse(out act, usedUp: true)) return true; if (InCombat) { @@ -105,20 +95,33 @@ protected override bool GeneralGCD(out IAction? act) { if (RiddleOfEarthPvP.CanUse(out act)) return true; } + if (EarthsReplyPvP.CanUse(out act)) return true; + if (WindsReplyPvP.CanUse(out act)) return true; + if (FiresReplyPvP.CanUse(out act)) return true; + + return base.AttackAbility(nextGCD, out act); + } + + protected override bool GeneralGCD(out IAction? act) + { + act = null; + // Early exits for Guard status or Sprint usage + 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 (FlintsReplyPvP.CanUse(out act)) return true; if (Player.HasStatus(true, StatusID.EarthResonance)) { if (EarthsReplyPvP.CanUse(out act)) return true; } - if (PhantomRushPvP.CanUse(out act)) return true; + if (PouncingCoeurlPvP.CanUse(out act)) return true; + if (RisingRaptorPvP.CanUse(out act)) return true; + if (LeapingOpoPvP.CanUse(out act)) return true; if (DemolishPvP.CanUse(out act)) return true; if (TwinSnakesPvP.CanUse(out act)) return true; if (DragonKickPvP.CanUse(out act)) return true; - if (SnapPunchPvP.CanUse(out act)) return true; - if (TrueStrikePvP.CanUse(out act)) return true; - if (BootshinePvP.CanUse(out act)) return true; - return false; } diff --git a/BasicRotations/PVPRotations/Melee/RPR_Default.PVP.cs b/BasicRotations/PVPRotations/Melee/RPR_Default.PVP.cs index ba2674f..c5db980 100644 --- a/BasicRotations/PVPRotations/Melee/RPR_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Melee/RPR_Default.PVP.cs @@ -112,7 +112,6 @@ protected override bool GeneralGCD(out IAction? act) //if (CrossReapingPvP.CanUse(out act, usedUp: true)) return true; //if (CommunioPvP.CanUse(out act, usedUp: true)) return true; - if (SoulSlicePvP.CanUse(out act, usedUp: true)) return true; if (PlentifulHarvestPvP.CanUse(out act)) return true; diff --git a/BasicRotations/PVPRotations/Melee/VPR_Default.PVP.cs b/BasicRotations/PVPRotations/Melee/VPR_Default.PVP.cs index c60aacf..ac9b749 100644 --- a/BasicRotations/PVPRotations/Melee/VPR_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Melee/VPR_Default.PVP.cs @@ -89,9 +89,11 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) if (ShouldCancelGuard()) return false; if (IsLastGCD((ActionID)UncoiledFuryPvP.ID) && UncoiledTwinfangPvP.CanUse(out act, skipAoeCheck: true)) return true; - if (IsLastGCD((ActionID)HuntersSnapPvP.ID) && TwinfangBitePvP.CanUse(out act)) return true; - if (IsLastGCD((ActionID)SwiftskinsCoilPvP.ID) && TwinbloodBitePvP.CanUse(out act)) return true; - if (IsLastGCD((ActionID)BarbarousBitePvP.ID, (ActionID)RavenousBitePvP.ID) && DeathRattlePvP.CanUse(out act)) return true; + if (IsLastGCD((ActionID)UncoiledFuryPvP.ID) && UncoiledTwinbloodPvP.CanUse(out act, skipAoeCheck: true)) return true; + + if (BacklashPvP_39187.CanUse(out act, skipAoeCheck: true)) return true; + + if (DeathRattlePvP.CanUse(out act, skipAoeCheck: true)) return true; return base.AttackAbility(nextGCD, out act); } @@ -113,14 +115,12 @@ protected override bool GeneralGCD(out IAction? act) if (Player.HasStatus(true, StatusID.HardenedScales)) return false; - if (!Player.HasStatus(true, StatusID.Reawakened_4094)) - { - if (SwiftskinsCoilPvP.CanUse(out act, usedUp: true)) return true; - if (HuntersSnapPvP.CanUse(out act, usedUp: true)) return true; - } if (UncoiledFuryPvP.CanUse(out act, skipAoeCheck: true)) return true; + if (SanguineFeastPvP.CanUse(out act)) return true; + if (BloodcoilPvP.CanUse(out act)) return true; + if (RavenousBitePvP.CanUse(out act)) return true; if (SwiftskinsStingPvP.CanUse(out act)) return true; if (PiercingFangsPvP.CanUse(out act)) return true; diff --git a/BasicRotations/PVPRotations/Ranged/BRD_Default.PVP.cs b/BasicRotations/PVPRotations/Ranged/BRD_Default.PVP.cs index f269e21..c6d50ad 100644 --- a/BasicRotations/PVPRotations/Ranged/BRD_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Ranged/BRD_Default.PVP.cs @@ -95,7 +95,7 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) if (SilentNocturnePvP.CanUse(out act)) return true; - if (EmpyrealArrowPvP.CanUse(out act)) return true; + if (HarmonicArrowPvP_41964.CanUse(out act)) return true; if (RepellingShotPvP.CanUse(out act)) return true; diff --git a/BasicRotations/PVPRotations/Tank/DRK_Default.PVP.cs b/BasicRotations/PVPRotations/Tank/DRK_Default.PVP.cs index 8df6f99..3302624 100644 --- a/BasicRotations/PVPRotations/Tank/DRK_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Tank/DRK_Default.PVP.cs @@ -104,7 +104,6 @@ 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 (QuietusPvP.CanUse(out act)) return true; if (SouleaterPvP.CanUse(out act)) return true; if (SyphonStrikePvP.CanUse(out act)) return true; diff --git a/BasicRotations/PVPRotations/Tank/PLD_Default.PVP.cs b/BasicRotations/PVPRotations/Tank/PLD_Default.PVP.cs index bf2beb8..a58be19 100644 --- a/BasicRotations/PVPRotations/Tank/PLD_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Tank/PLD_Default.PVP.cs @@ -86,7 +86,6 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) act = null; if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false; - if (ShieldBashPvP.CanUse(out act)) return true; if (IntervenePvP.CanUse(out act)) return true; return base.AttackAbility(nextGCD, out act); diff --git a/BasicRotations/Ranged/BRD_Default.cs b/BasicRotations/Ranged/BRD_Default.cs index a48b67c..c6059bf 100644 --- a/BasicRotations/Ranged/BRD_Default.cs +++ b/BasicRotations/Ranged/BRD_Default.cs @@ -1,6 +1,6 @@ namespace DefaultRotations.Ranged; -[Rotation("Default", CombatType.PvE, GameVersion = "7.05", +[Rotation("Default", CombatType.PvE, GameVersion = "7.10", Description = "Please make sure that the three song times add up to 120 seconds, Wanderers default first song for now.")] [SourceCode(Path = "main/BasicRotations/Ranged/BRD_Default.cs")] [Api(4)] diff --git a/BasicRotations/RebornRotations.csproj b/BasicRotations/RebornRotations.csproj index 886689b..aacb062 100644 --- a/BasicRotations/RebornRotations.csproj +++ b/BasicRotations/RebornRotations.csproj @@ -16,7 +16,7 @@ - +