From 149e6314004235de5f071e462afc418e9c7c603c Mon Sep 17 00:00:00 2001 From: LTS-FFXIV <127939494+LTS-FFXIV@users.noreply.github.com> Date: Sun, 28 Jul 2024 22:23:15 -0500 Subject: [PATCH] API 3 Bump and VPR update, lower level compatibility --- BasicRotations/Healer/AST_Default.cs | 2 +- BasicRotations/Healer/SCH_Default.cs | 2 +- BasicRotations/Healer/SGE_Default.cs | 2 +- BasicRotations/Healer/WHM_Default.cs | 2 +- BasicRotations/Magical/BLM_Default.cs | 2 +- BasicRotations/Magical/PCT_Default.cs | 2 +- BasicRotations/Magical/RDM_Default.cs | 2 +- BasicRotations/Magical/SMN_Archive | 2 +- BasicRotations/Magical/SMN_Default.cs | 2 +- BasicRotations/Melee/DRG_Default.cs | 2 +- BasicRotations/Melee/MNK_Default.cs | 2 +- BasicRotations/Melee/NIN_Default.cs | 2 +- BasicRotations/Melee/SAM_Default.cs | 2 +- BasicRotations/Melee/VPR_Default.cs | 294 +++++------------- .../PVPRotations/Healer/AST_Default.PVP.cs | 2 +- .../PVPRotations/Healer/SCH_Default.PVP.cs | 2 +- .../PVPRotations/Healer/SGE_Default.PVP.cs | 2 +- .../PVPRotations/Healer/WHM_Default.PVP.cs | 2 +- .../PVPRotations/Magical/BLM_Default.PVP.cs | 2 +- .../PVPRotations/Magical/RDM_Default.PvP.cs | 2 +- .../PVPRotations/Magical/SMN_Default.PVP.cs | 2 +- .../PVPRotations/Melee/DRG_Default.PVP.cs | 2 +- .../PVPRotations/Melee/MNK_Default.PVP.cs | 2 +- .../PVPRotations/Melee/NIN_Default.PVP.cs | 2 +- .../PVPRotations/Melee/RPR_Default.PVP.cs | 2 +- .../PVPRotations/Melee/SAM_Default.PVP.cs | 2 +- .../PVPRotations/Ranged/BRD_Default.PVP.cs | 2 +- .../PVPRotations/Ranged/DNC_Default.PVP.cs | 2 +- .../PVPRotations/Ranged/MCH_Default.PvP.cs | 2 +- .../PVPRotations/Tank/DRK_Default.PVP.cs | 2 +- .../PVPRotations/Tank/GNB_Default.PVP.cs | 2 +- .../PVPRotations/Tank/PLD_Default.PVP.cs | 2 +- .../PVPRotations/Tank/WAR_Default.PVP.cs | 2 +- BasicRotations/Ranged/BRD_Default.cs | 2 +- BasicRotations/Ranged/DNC_Default.cs | 2 +- BasicRotations/Ranged/MCH_Default.cs | 2 +- BasicRotations/RebornRotations.csproj | 2 +- BasicRotations/Tank/DRK_Default.cs | 2 +- BasicRotations/Tank/GNB_Default.cs | 2 +- BasicRotations/Tank/PLD_Default.cs | 2 +- BasicRotations/Tank/WAR_Default.cs | 2 +- 41 files changed, 117 insertions(+), 257 deletions(-) diff --git a/BasicRotations/Healer/AST_Default.cs b/BasicRotations/Healer/AST_Default.cs index 5474f58..d7355f3 100644 --- a/BasicRotations/Healer/AST_Default.cs +++ b/BasicRotations/Healer/AST_Default.cs @@ -2,7 +2,7 @@ namespace DefaultRotations.Healer; [Rotation("Default", CombatType.PvE, GameVersion = "7.0")] [SourceCode(Path = "main/DefaultRotations/Healer/AST_Default.cs")] -[Api(2)] +[Api(3)] public sealed class AST_Default : AstrologianRotation { #region Config Options diff --git a/BasicRotations/Healer/SCH_Default.cs b/BasicRotations/Healer/SCH_Default.cs index d6b3443..4a58541 100644 --- a/BasicRotations/Healer/SCH_Default.cs +++ b/BasicRotations/Healer/SCH_Default.cs @@ -2,7 +2,7 @@ namespace DefaultRotations.Healer; [Rotation("Default", CombatType.PvE, GameVersion = "7.00")] [SourceCode(Path = "main/DefaultRotations/Healer/SCH_Default.cs")] -[Api(2)] +[Api(3)] public sealed class SCH_Default : ScholarRotation { #region Config Options diff --git a/BasicRotations/Healer/SGE_Default.cs b/BasicRotations/Healer/SGE_Default.cs index 259db36..9968884 100644 --- a/BasicRotations/Healer/SGE_Default.cs +++ b/BasicRotations/Healer/SGE_Default.cs @@ -2,7 +2,7 @@ namespace DefaultRotations.Healer; [Rotation("Default", CombatType.PvE, GameVersion = "7.01")] [SourceCode(Path = "main/DefaultRotations/Healer/SGE_Default.cs")] -[Api(2)] +[Api(3)] public sealed class SGE_Default : SageRotation { #region Config Options diff --git a/BasicRotations/Healer/WHM_Default.cs b/BasicRotations/Healer/WHM_Default.cs index 8095930..bd9ef8c 100644 --- a/BasicRotations/Healer/WHM_Default.cs +++ b/BasicRotations/Healer/WHM_Default.cs @@ -2,7 +2,7 @@ namespace DefaultRotations.Healer; [Rotation("Default", CombatType.PvE, GameVersion = "7.00")] [SourceCode(Path = "main/DefaultRotations/Healer/WHM_Default.cs")] -[Api(2)] +[Api(3)] public sealed class WHM_Default :WhiteMageRotation { #region Config Options diff --git a/BasicRotations/Magical/BLM_Default.cs b/BasicRotations/Magical/BLM_Default.cs index 934f783..f756c81 100644 --- a/BasicRotations/Magical/BLM_Default.cs +++ b/BasicRotations/Magical/BLM_Default.cs @@ -2,7 +2,7 @@ [Rotation("Default", CombatType.PvE, GameVersion = "7.01")] [SourceCode(Path = "main/DefaultRotations/Magical/BLM_Default.cs")] -[Api(2)] +[Api(3)] public class BLM_Default : BlackMageRotation { #region Config Options diff --git a/BasicRotations/Magical/PCT_Default.cs b/BasicRotations/Magical/PCT_Default.cs index 0869296..2e32425 100644 --- a/BasicRotations/Magical/PCT_Default.cs +++ b/BasicRotations/Magical/PCT_Default.cs @@ -4,7 +4,7 @@ namespace DefaultRotations.Magical; [Rotation("Default", CombatType.PvE, GameVersion = "7.0", Description = "Kindly created and donated by Rabbs")] [SourceCode(Path = "main/DefaultRotations/Magical/PCT_Default.cs")] -[Api(2)] +[Api(3)] public sealed class PCT_Default : PictomancerRotation { public override MedicineType MedicineType => MedicineType.Intelligence; diff --git a/BasicRotations/Magical/RDM_Default.cs b/BasicRotations/Magical/RDM_Default.cs index 41d2b94..9862f46 100644 --- a/BasicRotations/Magical/RDM_Default.cs +++ b/BasicRotations/Magical/RDM_Default.cs @@ -4,7 +4,7 @@ namespace DefaultRotations.Magical; [Rotation("Default", CombatType.PvE, GameVersion = "7.00")] [SourceCode(Path = "main/DefaultRotations/Magical/RDM_Default.cs")] -[Api(2)] +[Api(3)] public sealed class RDM_Default : RedMageRotation { #region Config Options diff --git a/BasicRotations/Magical/SMN_Archive b/BasicRotations/Magical/SMN_Archive index fbf8066..cfacf17 100644 --- a/BasicRotations/Magical/SMN_Archive +++ b/BasicRotations/Magical/SMN_Archive @@ -4,7 +4,7 @@ namespace DefaultRotations.Magical; [Rotation("Default", CombatType.PvE, GameVersion = "7.00")] [SourceCode(Path = "main/DefaultRotations/Magical/SMN_Default.cs")] -[Api(2)] +[Api(3)] public sealed class SMN_Default : SummonerRotation { #region Config Options diff --git a/BasicRotations/Magical/SMN_Default.cs b/BasicRotations/Magical/SMN_Default.cs index 7f0849b..466c1bc 100644 --- a/BasicRotations/Magical/SMN_Default.cs +++ b/BasicRotations/Magical/SMN_Default.cs @@ -4,7 +4,7 @@ namespace DefaultRotations.Magical; [Rotation("Default", CombatType.PvE, GameVersion = "7.00")] [SourceCode(Path = "main/DefaultRotations/Magical/SMN_Default.cs")] -[Api(2)] +[Api(3)] public sealed class SMN_Default : SummonerRotation { diff --git a/BasicRotations/Melee/DRG_Default.cs b/BasicRotations/Melee/DRG_Default.cs index 72da0b9..a60bbe5 100644 --- a/BasicRotations/Melee/DRG_Default.cs +++ b/BasicRotations/Melee/DRG_Default.cs @@ -4,7 +4,7 @@ namespace DefaultRotations.Melee; [Rotation("Default", CombatType.PvE, GameVersion = "7.01")] [SourceCode(Path = "main/DefaultRotations/Melee/DRG_Default.cs")] -[Api(2)] +[Api(3)] public sealed class DRG_Default : DragoonRotation { diff --git a/BasicRotations/Melee/MNK_Default.cs b/BasicRotations/Melee/MNK_Default.cs index a172f2a..d5823d7 100644 --- a/BasicRotations/Melee/MNK_Default.cs +++ b/BasicRotations/Melee/MNK_Default.cs @@ -2,7 +2,7 @@ namespace DefaultRotations.Melee; [Rotation("Default", CombatType.PvE, GameVersion = "7.00", Description = "Uses Lunar Solar Opener from The Balance")] [SourceCode(Path = "main/DefaultRotations/Melee/MNK_Default.cs")] -[Api(2)] +[Api(3)] public sealed class MNK_Default : MonkRotation { diff --git a/BasicRotations/Melee/NIN_Default.cs b/BasicRotations/Melee/NIN_Default.cs index 9d47349..65b0d53 100644 --- a/BasicRotations/Melee/NIN_Default.cs +++ b/BasicRotations/Melee/NIN_Default.cs @@ -2,7 +2,7 @@ namespace DefaultRotations.Melee; [Rotation("Default", CombatType.PvE, GameVersion = "7.01")] [SourceCode(Path = "main/DefaultRotations/Melee/NIN_Default.cs")] -[Api(2)] +[Api(3)] public sealed class NIN_Default : NinjaRotation { #region Config Options diff --git a/BasicRotations/Melee/SAM_Default.cs b/BasicRotations/Melee/SAM_Default.cs index 137fd0a..913d080 100644 --- a/BasicRotations/Melee/SAM_Default.cs +++ b/BasicRotations/Melee/SAM_Default.cs @@ -2,7 +2,7 @@ [Rotation("Default", CombatType.PvE, GameVersion = "7.00")] [SourceCode(Path = "main/DefaultRotations/Melee/SAM_Default.cs")] -[Api(2)] +[Api(3)] public sealed class SAM_Default : SamuraiRotation { #region Config Options diff --git a/BasicRotations/Melee/VPR_Default.cs b/BasicRotations/Melee/VPR_Default.cs index 6d603c8..c8351ed 100644 --- a/BasicRotations/Melee/VPR_Default.cs +++ b/BasicRotations/Melee/VPR_Default.cs @@ -1,270 +1,130 @@ namespace DefaultRotations.Melee; -[Rotation("Default", CombatType.PvE, GameVersion = "7.0", -Description = "Kindly created and donated by Rabbs")] +[Rotation("Default", CombatType.PvE, GameVersion = "7.01")] [SourceCode(Path = "main/DefaultRotations/Melee/VPR_Default.cs")] -[Api(2)] +[Api(3)] public sealed class VPR_Default : ViperRotation { - private static bool HaveReawakend => Player.HasStatus(true, StatusID.Reawakened, StatusID.Reawakened_4094); - private static bool HaveSwiftScaled => Player.HasStatus(true, StatusID.Swiftscaled, StatusID.Swiftscaled_4121); - private static float? SwiftScaledTime => Player.StatusTime(true, StatusID.Swiftscaled); - private static float? HuntersTime => Player.StatusTime(true, StatusID.HuntersInstinct); - private static bool HaveHuntersInstinct => Player.HasStatus(true, StatusID.HuntersInstinct, StatusID.HuntersInstinct_4120); - private static bool HaveHuntersVenom => Player.HasStatus(true, StatusID.HuntersVenom); - private static bool HaveSwiftVenom => Player.HasStatus(true, StatusID.SwiftskinsVenom); - private static bool HaveFellHuntersVenom => Player.HasStatus(true, StatusID.FellhuntersVenom); - private static bool HaveFellskintVenom => Player.HasStatus(true, StatusID.FellskinsVenom); - private static bool HavePoisedFang => Player.HasStatus(true, StatusID.PoisedForTwinfang); - private static bool HavePoisedBlood => Player.HasStatus(true, StatusID.PoisedForTwinblood); - private static bool HaveFlankingVenom => Player.HasStatus(true, StatusID.FlankstungVenom, StatusID.FlanksbaneVenom); - private static bool HaveHindVenom => Player.HasStatus(true, StatusID.HindsbaneVenom, StatusID.HindstungVenom); - private static bool HaveBaneVenom => Player.HasStatus(true, StatusID.HindsbaneVenom, StatusID.FlanksbaneVenom); - private static bool HaveGrimHuntersVenom => Player.HasStatus(true, StatusID.GrimhuntersVenom); - private static bool HaveGrimSkinVenom => Player.HasStatus(true, StatusID.GrimskinsVenom); - private static float? BloodTime => HostileTarget?.StatusTime(true, StatusID.NoxiousGnash); - private static bool BloodTimeAoe => AllHostileTargets.Any(p => p.StatusTime(true, StatusID.NoxiousGnash) < 20 && p.DistanceToPlayer() <= 5); - public static bool IsHuntersTimeLessThanSwiftscaled => CustomRotation.Player.StatusTime(true, StatusID.HuntersInstinct) < CustomRotation.Player.StatusTime(true, StatusID.Swiftscaled); - public static bool IsHindstongueTimeLessThanHindsbane => CustomRotation.Player.StatusTime(true, StatusID.HindstungVenom) < CustomRotation.Player.StatusTime(true, StatusID.HindsbaneVenom); - private static int MyGeneration => EnhancedSerpentsLineageTrait.EnoughLevel ? 6-AnguineTribute:5-AnguineTribute; - public static IBaseAction ThisCoil { get; } = new BaseAction((ActionID)34645); - public static IBaseAction UnCoilCoil { get; } = new BaseAction((ActionID)34633); - #region Countdown logic - // Defines logic for actions to take during the countdown before combat starts. - protected override IAction? CountDownAction(float remainTime) - { + #region Additional oGCD Logic - return base.CountDownAction(remainTime); - } - #endregion - - #region Emergency Logic - // Determines emergency actions to take based on the next planned GCD action. + [RotationDesc] protected override bool EmergencyAbility(IAction nextGCD, out IAction? act) { - uint SerpentsTailId = AdjustId(SerpentsTailPvE.ID); - act = null; - if (FirstLegacyPvE.CanUse(out act, skipComboCheck: true, skipCastingCheck: true, skipAoeCheck: true, skipStatusProvideCheck: true) && SerpentsTailId == FirstLegacyPvE.ID) return true; - if (SecondLegacyPvE.CanUse(out act, skipComboCheck: true, skipCastingCheck: true, skipAoeCheck: true, skipStatusProvideCheck: true) && SerpentsTailId == SecondLegacyPvE.ID) return true; - if (ThirdLegacyPvE.CanUse(out act, skipComboCheck: true, skipCastingCheck: true, skipAoeCheck: true, skipStatusProvideCheck: true) && SerpentsTailId == ThirdLegacyPvE.ID) return true; - if (FourthLegacyPvE.CanUse(out act, skipComboCheck: true, skipCastingCheck: true, skipAoeCheck: true, skipStatusProvideCheck: true) && SerpentsTailId == FourthLegacyPvE.ID) return true; - if (TwinfangBitePvE.CanUse(out act) && HaveHuntersVenom) return true; - if (TwinbloodBitePvE.CanUse(out act) && HaveSwiftVenom) return true; - if (UncoiledTwinfangPvE.CanUse(out act, skipComboCheck: true, skipCastingCheck: true, skipAoeCheck: true, skipStatusProvideCheck: true) && HavePoisedFang) return true; - if (ThisCoil.CanUse(out act, skipComboCheck: true, skipCastingCheck: true, skipAoeCheck: true, skipStatusProvideCheck: true) && HavePoisedBlood) return true; + // Uncoiled Fury Combo + if (UncoiledTwinfangPvE.CanUse(out act)) return true; + if (UncoiledTwinbloodPvE.CanUse(out act)) return true; + + //AOE Dread Combo + if (TwinfangThreshPvE.CanUse(out act)) return true; + if (TwinbloodThreshPvE.CanUse(out act)) return true; + //Single Target Dread Combo + if (TwinfangBitePvE.CanUse(out act)) return true; + if (TwinbloodBitePvE.CanUse(out act)) return true; return base.EmergencyAbility(nextGCD, out act); } - #endregion - #region oGCD Logic - protected override bool AttackAbility(IAction nextGCD, out IAction? act) + [RotationDesc] + protected override bool MoveForwardAbility(IAction nextGCD, out IAction? act) { - uint SerpentsTailId = AdjustId(SerpentsTailPvE.ID); - uint ComboMark = AdjustId(SteelFangsPvE.ID); - int ComboMark2 = ComboMark == SteelFangsPvE.ID ? 1 : ComboMark == HuntersStingPvE.ID ? 2 : 3; - act = null; - if (SerpentsIrePvE.CanUse(out act) && InCombat && RattlingCoilStacks <= 2 && !HaveReawakend) return true; - if (TwinfangThreshPvE.CanUse(out act, skipComboCheck: true, skipCastingCheck: true, skipAoeCheck: true, skipStatusProvideCheck: true) && HaveFellHuntersVenom) return true; - if (TwinbloodThreshPvE.CanUse(out act, skipComboCheck: true, skipCastingCheck: true, skipAoeCheck: true, skipStatusProvideCheck: true) && HaveFellskintVenom) return true; - - - - - if (LastLashPvE.CanUse(out act, skipComboCheck: true, skipCastingCheck: true, skipAoeCheck: true, skipStatusProvideCheck: true) && SerpentsTailId == LastLashPvE.ID) return true; - if (DeathRattlePvE.CanUse(out act, skipComboCheck: true, skipCastingCheck: true, skipAoeCheck: true, skipStatusProvideCheck: true) && SerpentsTailId == DeathRattlePvE.ID) return true; - - if (MergedStatus.HasFlag(AutoStatus.MoveForward) && MoveForwardAbility(nextGCD, out act)) return true; + if (SlitherPvE.CanUse(out act)) return true; return base.AttackAbility(nextGCD, out act); } - protected override bool MoveForwardAbility(IAction nextGCD, out IAction? act) + [RotationDesc] + protected sealed override bool DefenseAreaAbility(IAction nextGCD, out IAction? act) { - act = null; - if (!IsMoving && SlitherPvE.Target.Target.DistanceToPlayer() > 5) - { - if (SlitherPvE.CanUse(out act)) return true; - } - - return base.MoveForwardAbility(nextGCD, out act); + if (FeintPvE.CanUse(out act)) return true; + return base.DefenseAreaAbility(nextGCD, out act); } #endregion - #region GCD Logic - protected override bool MoveForwardGCD(out IAction? act) + #region oGCD Logic + protected override bool AttackAbility(IAction nextGCD, out IAction? act) { - act = null; + //Reawaken Combo + if (FirstLegacyPvE.CanUse(out act)) return true; + if (SecondLegacyPvE.CanUse(out act)) return true; + if (ThirdLegacyPvE.CanUse(out act)) return true; + if (FourthLegacyPvE.CanUse(out act)) return true; + if (SerpentsIrePvE.CanUse(out act)) return true; + + //Serpent Combo oGCDs + if (LastLashPvE.CanUse(out act)) return true; + if (DeathRattlePvE.CanUse(out act)) return true; - return base.MoveForwardGCD(out act); + return base.AttackAbility(nextGCD, out act); } + #endregion + #region GCD Logic protected override bool GeneralGCD(out IAction? act) { - uint ComboMark = AdjustId(SteelFangsPvE.ID); - int ComboMark2 = ComboMark == SteelFangsPvE.ID ? 1 : ComboMark == HuntersStingPvE.ID ? 2 : 3; - uint ComboMark3 = AdjustId(SteelMawPvE.ID); - int ComboMark4 = ComboMark3== SteelMawPvE.ID ? 1 : ComboMark3 == HuntersBitePvE.ID ? 2 : 3; - act = null; - - if (MyGeneration is 1) - { - if (SteelFangsPvE.CanUse(out act)) return true; - } - if (MyGeneration is 2) - { - if (DreadFangsPvE.CanUse(out act)) return true; - } - if (MyGeneration is 3) - { - if (HuntersCoilPvE.CanUse(out act, skipComboCheck:true) && DreadCombo is (DreadCombo)9) return true; - } - if (MyGeneration is 4) - { - if (SwiftskinsCoilPvE.CanUse(out act, skipComboCheck: true) && DreadCombo is (DreadCombo)10) return true; - } - if (MyGeneration is 5) - { - if (OuroborosPvE.CanUse(out act, skipComboCheck:true, skipCastingCheck:true, skipAoeCheck:true, skipStatusProvideCheck:true)) return true; - } - - //Overcap protection - if ((DreadwinderPvE.Cooldown.CurrentCharges > 0 || !SerpentsIrePvE.Cooldown.IsCoolingDown) && - ((RattlingCoilStacks is 3 && EnhancedVipersRattleTrait.EnoughLevel) || - (RattlingCoilStacks is 2 && !EnhancedVipersRattleTrait.EnoughLevel))) + if (DreadwinderPvE.Cooldown.CurrentCharges > 0 || !SerpentsIrePvE.Cooldown.IsCoolingDown) { - if (UnCoilCoil.CanUse(out act, skipComboCheck: true, skipCastingCheck: true, skipAoeCheck: true, skipStatusProvideCheck: true)) return true; + if (UncoiledFuryPvE.CanUse(out act)) return true; } - - - - - - if (HuntersDenPvE.CanUse(out act, skipComboCheck: true, skipCastingCheck: true, skipAoeCheck: true, skipStatusProvideCheck: true) && DreadCombo == DreadCombo.PitOfDread) return true; - if (SwiftskinsDenPvE.CanUse(out act, skipComboCheck: true, skipCastingCheck: true, skipAoeCheck: true, skipStatusProvideCheck: true) && DreadCombo == DreadCombo.HuntersDen) return true; - if (HuntersCoilPvE.CanUse(out act, skipComboCheck: true) && DreadCombo == DreadCombo.Dreadwinder) return true; - if (SwiftskinsCoilPvE.CanUse(out act, skipComboCheck: true) && DreadCombo == DreadCombo.HuntersCoil) return true; - - - - - //Reawakend Usage - if ((SerpentOffering >= 50|| Player.HasStatus(true, StatusID.ReadyToReawaken)) && SerpentsIrePvE.Cooldown.RecastTimeRemainOneCharge > (100-SerpentOffering) && (DreadwinderPvE.Cooldown.CurrentCharges == 0 || (DreadwinderPvE.Cooldown.CurrentCharges == 1 && DreadwinderPvE.Cooldown.RecastTimeRemainOneCharge > 10)) && - SwiftScaledTime > 10 && - HuntersTime > 10 && - BloodTime > 10 && - !HaveHuntersVenom && !HaveSwiftVenom && - !HavePoisedBlood && !HavePoisedFang) - + //Reawaken Combo + if (OuroborosPvE.CanUse(out act)) return true; + if (FourthGenerationPvE.CanUse(out act)) return true; + if (ThirdGenerationPvE.CanUse(out act)) return true; + if (SecondGenerationPvE.CanUse(out act)) return true; + if (FirstGenerationPvE.CanUse(out act)) return true; + if (DreadwinderPvE.Cooldown.CurrentCharges == 0 || (DreadwinderPvE.Cooldown.CurrentCharges == 1 && DreadwinderPvE.Cooldown.RecastTimeRemainOneCharge > 10)) { - if (ReawakenPvE.CanUse(out act, skipComboCheck: true, skipCastingCheck: true, skipAoeCheck: true, skipStatusProvideCheck: true)) return true; + if (ReawakenPvE.CanUse(out act)) return true; } - - - if (BloodTime <= 20 && BloodTime > 0 && HaveSwiftScaled) + if (HostileTarget?.StatusTime(true, StatusID.NoxiousGnash) <= 20 && HostileTarget?.StatusTime(true, StatusID.NoxiousGnash) > 0 && Player.HasStatus(true, StatusID.Swiftscaled, StatusID.Swiftscaled_4121)) { //Dreadwinder Usage if (PitOfDreadPvE.CanUse(out act, usedUp: true) && DreadCombo is 0) return true; if (DreadwinderPvE.CanUse(out act, usedUp: true) && DreadCombo is 0) return true; + } + //AOE Dread Combo + if (HuntersDenPvE.CanUse(out act, skipComboCheck: true)) return true; + if (SwiftskinsDenPvE.CanUse(out act, skipComboCheck: true)) return true; - } + if (PitOfDreadPvE.CanUse(out act, usedUp: true)) return true; + //Single Target Dread Combo + if (HuntersCoilPvE.CanUse(out act, skipComboCheck: true)) return true; + if (SwiftskinsCoilPvE.CanUse(out act, skipComboCheck: true)) return true; - if (ComboMark4 == 3) - { - if (HaveGrimSkinVenom) - { - if (DreadMawPvE.CanUse(out act)) return true; - } - - if (SteelMawPvE.CanUse(out act)) return true; - - } - if (ComboMark4 == 2) - { - if (IsHuntersTimeLessThanSwiftscaled) - { - if (SteelMawPvE.CanUse(out act)) return true; - } - - if (DreadMawPvE.CanUse(out act)) return true; - - } - if (ComboMark4 == 1) - { - if (BloodTimeAoe) - { - if (DreadMawPvE.CanUse(out act)) return true; - - } - if (SteelMawPvE.CanUse(out act)) return true; - - } + if (DreadwinderPvE.CanUse(out act, usedUp: true)) return true; - if (ComboMark2 == 3) - { - - if (HaveBaneVenom) - { - if (DreadFangsPvE.CanUse(out act)) return true; - } - - if (SteelFangsPvE.CanUse(out act)) return true; - } - if (ComboMark2 == 2) - { - - if (HaveFlankingVenom) - { - if (SteelFangsPvE.CanUse(out act)) return true; - } - - if (DreadFangsPvE.CanUse(out act)) return true; - } - if (ComboMark2 == 1) - { - if (BloodTime < 20) - { + //AOE Serpent Combo + if (JaggedMawPvE.CanUse(out act, skipStatusProvideCheck: true) && !Player.HasStatus(true, StatusID.GrimhuntersVenom) && !Player.HasStatus(true, StatusID.GrimskinsVenom)) return true; + if (JaggedMawPvE.CanUse(out act)) return true; + if (BloodiedMawPvE.CanUse(out act)) return true; - if (DreadFangsPvE.CanUse(out act)) return true; - } + if (HuntersBitePvE.CanUse(out act)) return true; + if (SwiftskinsBitePvE.CanUse(out act)) return true; - if (SteelFangsPvE.CanUse(out act)) return true; - } + if (DreadMawPvE.CanUse(out act)) return true; + if (SteelMawPvE.CanUse(out act)) return true; + //Single Target Serpent Combo + if (FlankstingStrikePvE.CanUse(out act)) return true; + if (FlanksbaneFangPvE.CanUse(out act)) return true; + if (HindstingStrikePvE.CanUse(out act)) return true; + if (HindsbaneFangPvE.CanUse(out act)) return true; + if (HuntersStingPvE.CanUse(out act)) return true; + if (SwiftskinsStingPvE.CanUse(out act)) return true; - - - if (RattlingCoilStacks > 0 && DreadCombo is (DreadCombo)0 && !Player.HasStatus(true, StatusID.ReadyToReawaken) && - !HaveSwiftVenom && !HaveHuntersVenom && - HaveSwiftScaled && HaveHuntersInstinct) - { - if (UnCoilCoil.CanUse(out act, skipComboCheck: true, skipCastingCheck: true, skipAoeCheck: true, skipStatusProvideCheck: true)) return true; - } + if (DreadFangsPvE.CanUse(out act)) return true; + if (SteelFangsPvE.CanUse(out act)) return true; + // Uncoiled Fury Combo + if (UncoiledFuryPvE.CanUse(out act)) return true; + + //Ranged if (WrithingSnapPvE.CanUse(out act)) return true; return base.GeneralGCD(out act); } - - private bool AttackGCD(out IAction? act, bool burst) - { - act = null; - - return false; - } - #endregion - - #region Extra Methods #endregion - public override void DisplayStatus() - { - //motif - ImGui.Text("debug " + DreadCombo.ToString()); - - base.DisplayStatus(); - } } diff --git a/BasicRotations/PVPRotations/Healer/AST_Default.PVP.cs b/BasicRotations/PVPRotations/Healer/AST_Default.PVP.cs index c9718c1..c4dccca 100644 --- a/BasicRotations/PVPRotations/Healer/AST_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Healer/AST_Default.PVP.cs @@ -2,7 +2,7 @@ [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Healer/AST_Default.PVP.cs")] -[Api(2)] +[Api(3)] public class AST_DefaultPVP : AstrologianRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/PVPRotations/Healer/SCH_Default.PVP.cs b/BasicRotations/PVPRotations/Healer/SCH_Default.PVP.cs index 5d6835e..72474de 100644 --- a/BasicRotations/PVPRotations/Healer/SCH_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Healer/SCH_Default.PVP.cs @@ -2,7 +2,7 @@ [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Healer/SCH_Default.PVP.cs")] -[Api(2)] +[Api(3)] public class SCH_DefaultPVP : ScholarRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/PVPRotations/Healer/SGE_Default.PVP.cs b/BasicRotations/PVPRotations/Healer/SGE_Default.PVP.cs index 771fd9c..a14afc7 100644 --- a/BasicRotations/PVPRotations/Healer/SGE_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Healer/SGE_Default.PVP.cs @@ -2,7 +2,7 @@ [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Healer/SGE_Default.PVP.cs")] -[Api(2)] +[Api(3)] public class SGE_DefaultPVP : SageRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/PVPRotations/Healer/WHM_Default.PVP.cs b/BasicRotations/PVPRotations/Healer/WHM_Default.PVP.cs index c5fee5b..33b4ac1 100644 --- a/BasicRotations/PVPRotations/Healer/WHM_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Healer/WHM_Default.PVP.cs @@ -2,7 +2,7 @@ namespace DefaultRotations.Healer; [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Healer/WHM_Default.PVP.cs")] -[Api(2)] +[Api(3)] public class WHM_DefaultPVP : WhiteMageRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/PVPRotations/Magical/BLM_Default.PVP.cs b/BasicRotations/PVPRotations/Magical/BLM_Default.PVP.cs index d90e81e..96c9db3 100644 --- a/BasicRotations/PVPRotations/Magical/BLM_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Magical/BLM_Default.PVP.cs @@ -2,7 +2,7 @@ [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Magical/BLM_Default.PVP.cs")] -[Api(2)] +[Api(3)] public class BLM_DefaultPVP : BlackMageRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/PVPRotations/Magical/RDM_Default.PvP.cs b/BasicRotations/PVPRotations/Magical/RDM_Default.PvP.cs index b49d799..341caf5 100644 --- a/BasicRotations/PVPRotations/Magical/RDM_Default.PvP.cs +++ b/BasicRotations/PVPRotations/Magical/RDM_Default.PvP.cs @@ -2,7 +2,7 @@ [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Magical/RDM_Default.PVP.cs")] -[Api(2)] +[Api(3)] public class RDM_DefaultPvP : RedMageRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/PVPRotations/Magical/SMN_Default.PVP.cs b/BasicRotations/PVPRotations/Magical/SMN_Default.PVP.cs index b6719fc..ad03565 100644 --- a/BasicRotations/PVPRotations/Magical/SMN_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Magical/SMN_Default.PVP.cs @@ -2,7 +2,7 @@ [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Magical/SMN_Default.PVP.cs")] -[Api(2)] +[Api(3)] public class SMN_DefaultPvP : SummonerRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/PVPRotations/Melee/DRG_Default.PVP.cs b/BasicRotations/PVPRotations/Melee/DRG_Default.PVP.cs index 7bc7bb7..335ecd9 100644 --- a/BasicRotations/PVPRotations/Melee/DRG_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Melee/DRG_Default.PVP.cs @@ -2,7 +2,7 @@ [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Tank/DRG_Default.PvP.cs")] -[Api(2)] +[Api(3)] public sealed class DRG_DefaultPvP : DragoonRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/PVPRotations/Melee/MNK_Default.PVP.cs b/BasicRotations/PVPRotations/Melee/MNK_Default.PVP.cs index 78cb31f..972299d 100644 --- a/BasicRotations/PVPRotations/Melee/MNK_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Melee/MNK_Default.PVP.cs @@ -2,7 +2,7 @@ [Rotation("Default", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Melee/MNK_Default.PVP.cs")] -[Api(2)] +[Api(3)] public sealed class MNK_DefaultPvP : MonkRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/PVPRotations/Melee/NIN_Default.PVP.cs b/BasicRotations/PVPRotations/Melee/NIN_Default.PVP.cs index c47f6d9..2ebf43b 100644 --- a/BasicRotations/PVPRotations/Melee/NIN_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Melee/NIN_Default.PVP.cs @@ -2,7 +2,7 @@ [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Tank/NIN_Default.PvP.cs")] -[Api(2)] +[Api(3)] public sealed class NIN_DefaultPvP : NinjaRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/PVPRotations/Melee/RPR_Default.PVP.cs b/BasicRotations/PVPRotations/Melee/RPR_Default.PVP.cs index 193fda7..7a0118b 100644 --- a/BasicRotations/PVPRotations/Melee/RPR_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Melee/RPR_Default.PVP.cs @@ -2,7 +2,7 @@ [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Tank/RPR_Default.PvP.cs")] -[Api(2)] +[Api(3)] public sealed class RPR_DefaultPvP : ReaperRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/PVPRotations/Melee/SAM_Default.PVP.cs b/BasicRotations/PVPRotations/Melee/SAM_Default.PVP.cs index 24991be..4624e0d 100644 --- a/BasicRotations/PVPRotations/Melee/SAM_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Melee/SAM_Default.PVP.cs @@ -2,7 +2,7 @@ [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Tank/SAM_Default.PvP.cs")] -[Api(2)] +[Api(3)] public sealed class SAM_DefaultPvP : SamuraiRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/PVPRotations/Ranged/BRD_Default.PVP.cs b/BasicRotations/PVPRotations/Ranged/BRD_Default.PVP.cs index 65204de..58dc2a5 100644 --- a/BasicRotations/PVPRotations/Ranged/BRD_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Ranged/BRD_Default.PVP.cs @@ -2,7 +2,7 @@ [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Ranged/BRD_Default.PvP.cs")] -[Api(2)] +[Api(3)] public sealed class BRD_DefaultPvP : BardRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/PVPRotations/Ranged/DNC_Default.PVP.cs b/BasicRotations/PVPRotations/Ranged/DNC_Default.PVP.cs index 9485e6e..dde8458 100644 --- a/BasicRotations/PVPRotations/Ranged/DNC_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Ranged/DNC_Default.PVP.cs @@ -2,7 +2,7 @@ [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Ranged/DNC_Default.PvP.cs")] -[Api(2)] +[Api(3)] public sealed class DNC_DefaultPvP : DancerRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/PVPRotations/Ranged/MCH_Default.PvP.cs b/BasicRotations/PVPRotations/Ranged/MCH_Default.PvP.cs index 01db33e..4872bb6 100644 --- a/BasicRotations/PVPRotations/Ranged/MCH_Default.PvP.cs +++ b/BasicRotations/PVPRotations/Ranged/MCH_Default.PvP.cs @@ -2,7 +2,7 @@ namespace DefaultRotations.Ranged; [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Ranged/MCH_Default.PvP.cs")] -[Api(2)] +[Api(3)] public sealed class MCH_DefaultPvP : MachinistRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/PVPRotations/Tank/DRK_Default.PVP.cs b/BasicRotations/PVPRotations/Tank/DRK_Default.PVP.cs index 61b30dc..8c15017 100644 --- a/BasicRotations/PVPRotations/Tank/DRK_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Tank/DRK_Default.PVP.cs @@ -2,7 +2,7 @@ namespace DefaultRotations.Tank; [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Tank/DRK_Default.PvP.cs")] -[Api(2)] +[Api(3)] public sealed class DRK_DefaultPvP : DarkKnightRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/PVPRotations/Tank/GNB_Default.PVP.cs b/BasicRotations/PVPRotations/Tank/GNB_Default.PVP.cs index 23db81a..e4c003b 100644 --- a/BasicRotations/PVPRotations/Tank/GNB_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Tank/GNB_Default.PVP.cs @@ -2,7 +2,7 @@ [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Tank/GNB_Default.PvP.cs")] -[Api(2)] +[Api(3)] public sealed class GNB_DefaultPvP : GunbreakerRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/PVPRotations/Tank/PLD_Default.PVP.cs b/BasicRotations/PVPRotations/Tank/PLD_Default.PVP.cs index 8c7cb70..08ae5d5 100644 --- a/BasicRotations/PVPRotations/Tank/PLD_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Tank/PLD_Default.PVP.cs @@ -2,7 +2,7 @@ [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Tank/PLD_Default.PvP.cs")] -[Api(2)] +[Api(3)] public sealed class PLD_DefaultPvP : PaladinRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/PVPRotations/Tank/WAR_Default.PVP.cs b/BasicRotations/PVPRotations/Tank/WAR_Default.PVP.cs index 66eceaa..b9a76f6 100644 --- a/BasicRotations/PVPRotations/Tank/WAR_Default.PVP.cs +++ b/BasicRotations/PVPRotations/Tank/WAR_Default.PVP.cs @@ -2,7 +2,7 @@ [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Tank/WAR_Default.PvP.cs")] -[Api(2)] +[Api(3)] public sealed class WAR_DefaultPvP : WarriorRotation { [RotationConfig(CombatType.PvP, Name = "Sprint")] diff --git a/BasicRotations/Ranged/BRD_Default.cs b/BasicRotations/Ranged/BRD_Default.cs index 49da5ef..94b1b3a 100644 --- a/BasicRotations/Ranged/BRD_Default.cs +++ b/BasicRotations/Ranged/BRD_Default.cs @@ -3,7 +3,7 @@ namespace DefaultRotations.Ranged; [Rotation("Default", CombatType.PvE, GameVersion = "7.01", Description = "Please make sure that the three song times add up to 120 seconds, Wanderers default first song for now.")] [SourceCode(Path = "main/DefaultRotations/Ranged/BRD_Default.cs")] -[Api(2)] +[Api(3)] public sealed class BRD_Default : BardRotation { #region Config Options diff --git a/BasicRotations/Ranged/DNC_Default.cs b/BasicRotations/Ranged/DNC_Default.cs index c6c1a9d..d8fb530 100644 --- a/BasicRotations/Ranged/DNC_Default.cs +++ b/BasicRotations/Ranged/DNC_Default.cs @@ -2,7 +2,7 @@ namespace DefaultRotations.Ranged; [Rotation("Default", CombatType.PvE, GameVersion = "7.00", Description = "")] [SourceCode(Path = "main/DefaultRotations/Ranged/DNC_Default.cs")] -[Api(2)] +[Api(3)] public sealed class DNC_Default : DancerRotation { #region Config Options diff --git a/BasicRotations/Ranged/MCH_Default.cs b/BasicRotations/Ranged/MCH_Default.cs index cbcdfcd..00b419f 100644 --- a/BasicRotations/Ranged/MCH_Default.cs +++ b/BasicRotations/Ranged/MCH_Default.cs @@ -4,7 +4,7 @@ namespace DefaultRotations.Ranged; [Rotation("Default", CombatType.PvE, GameVersion = "7.00", Description = "")] [SourceCode(Path = "main/DefaultRotations/Ranged/MCH_Default.cs")] -[Api(2)] +[Api(3)] public sealed class MCH_Default : MachinistRotation { #region Config Options diff --git a/BasicRotations/RebornRotations.csproj b/BasicRotations/RebornRotations.csproj index 21b2317..23433d5 100644 --- a/BasicRotations/RebornRotations.csproj +++ b/BasicRotations/RebornRotations.csproj @@ -9,7 +9,7 @@ - + diff --git a/BasicRotations/Tank/DRK_Default.cs b/BasicRotations/Tank/DRK_Default.cs index a919d1a..760b146 100644 --- a/BasicRotations/Tank/DRK_Default.cs +++ b/BasicRotations/Tank/DRK_Default.cs @@ -2,7 +2,7 @@ namespace DefaultRotations.Tank; [Rotation("Default", CombatType.PvE, GameVersion = "7.00")] [SourceCode(Path = "main/DefaultRotations/Tank/DRK_Balance.cs")] -[Api(2)] +[Api(3)] public sealed class DRK_Default : DarkKnightRotation { #region Config Options diff --git a/BasicRotations/Tank/GNB_Default.cs b/BasicRotations/Tank/GNB_Default.cs index f7d1597..1b7b4a9 100644 --- a/BasicRotations/Tank/GNB_Default.cs +++ b/BasicRotations/Tank/GNB_Default.cs @@ -2,7 +2,7 @@ namespace DefaultRotations.Tank; [Rotation("Default", CombatType.PvE, GameVersion = "7.00")] [SourceCode(Path = "main/DefaultRotations/Tank/GNB_Default.cs")] -[Api(2)] +[Api(3)] public sealed class GNB_Default : GunbreakerRotation { #region Countdown Logic diff --git a/BasicRotations/Tank/PLD_Default.cs b/BasicRotations/Tank/PLD_Default.cs index 5f10a25..0783106 100644 --- a/BasicRotations/Tank/PLD_Default.cs +++ b/BasicRotations/Tank/PLD_Default.cs @@ -2,7 +2,7 @@ [Rotation("Default", CombatType.PvE, GameVersion = "7.00")] [SourceCode(Path = "main/DefaultRotations/Tank/PLD_Default.cs")] -[Api(2)] +[Api(3)] public class PLD_Default : PaladinRotation { #region Config Options diff --git a/BasicRotations/Tank/WAR_Default.cs b/BasicRotations/Tank/WAR_Default.cs index 0699e39..efede2d 100644 --- a/BasicRotations/Tank/WAR_Default.cs +++ b/BasicRotations/Tank/WAR_Default.cs @@ -4,7 +4,7 @@ namespace DefaultRotations.Tank; [Rotation("Default", CombatType.PvE, GameVersion = "7.00", Description = "Additional Contributions from Sascha")] [SourceCode(Path = "main/DefaultRotations/Tank/WAR_Default.cs")] -[Api(2)] +[Api(3)] public sealed class WAR_Default : WarriorRotation { #region Config Options