From 8f5895d53e70949060b2f880f46d5d6d2ad5cf03 Mon Sep 17 00:00:00 2001 From: ace Date: Thu, 11 Jul 2024 18:14:16 -0700 Subject: [PATCH] GNB various fixes/adjustments, removed PLD shit lesson learned: dont merge 2 jobs into a branch focused on 1 -_- --- XIVSlothCombo/Combos/CustomComboPreset.cs | 28 ++- XIVSlothCombo/Combos/PvE/GNB.cs | 188 +++++++++++-------- XIVSlothCombo/Combos/PvP/GNBPVP.cs | 2 +- XIVSlothCombo/Window/Functions/UserConfig.cs | 6 - 4 files changed, 129 insertions(+), 95 deletions(-) diff --git a/XIVSlothCombo/Combos/CustomComboPreset.cs b/XIVSlothCombo/Combos/CustomComboPreset.cs index b7a70d65a..676269c0a 100644 --- a/XIVSlothCombo/Combos/CustomComboPreset.cs +++ b/XIVSlothCombo/Combos/CustomComboPreset.cs @@ -1,6 +1,7 @@ using XIVSlothCombo.Attributes; using XIVSlothCombo.Combos.PvE; using XIVSlothCombo.Combos.PvP; +using static XIVSlothCombo.Combos.PvE.GNB; namespace XIVSlothCombo.Combos { @@ -1375,12 +1376,9 @@ public enum CustomComboPreset #region GUNBREAKER - [CustomComboInfo("Skill Speed Support Feature", "Allows for features to support various skill speed rotations.", GNB.JobID, 0)] - GNB_ST_SkSSupport = 7000, - #region ST [ReplaceSkill(GNB.KeenEdge)] - [CustomComboInfo("Advanced Gunbreaker Feature", "Replace Keen Edge with its combo chain and uses Burst Strike to prevent ammo overcap.", GNB.JobID)] + [CustomComboInfo("Advanced Gunbreaker Feature", "Replace Keen Edge with its combo chain and uses Burst Strike to prevent ammo overcap. ***DOES NOT WORK WELL WITH 2.46-2.49***", GNB.JobID)] GNB_ST_MainCombo = 7001, #region Reign Combo @@ -1510,6 +1508,24 @@ public enum CustomComboPreset GNB_BS_DoubleDown = 7403, #endregion + #region Fated Circle + [ReplaceSkill(GNB.FatedCircle)] + [CustomComboInfo("Fated Circle Features", "Collection of Fated Circle related features.", GNB.JobID)] + GNB_FC = 7600, + + [ParentCombo(GNB_FC)] + [CustomComboInfo("Fated Circle Continuation Feature", "Adds Continuation on Fated Circle.", GNB.JobID)] + GNB_FC_Continuation = 7601, + + [ParentCombo(GNB_FC)] + [CustomComboInfo("Fated Circle to Bloodfest Feature", "Replace Fated Circle with Bloodfest if you have no powder gauge.", GNB.JobID)] + GNB_FC_Bloodfest = 7602, + + [ParentCombo(GNB_FC)] + [CustomComboInfo("Double Down on Fated Circle Feature", "Adds Double Down to Fated Circle when under No Mercy and ammo is above 2.", GNB.JobID)] + GNB_FC_DoubleDown = 7603, + #endregion + #region No Mercy [ConflictingCombos(GNB_ST_NoMercy, GNB_AoE_NoMercy)] [ReplaceSkill(GNB.NoMercy)] @@ -1526,7 +1542,7 @@ public enum CustomComboPreset #endregion [CustomComboInfo("Aurora Protection Feature", "Locks out Aurora if Aurora's effect is on the target.", GNB.JobID, 0, "", "")] - GNB_AuroraProtection = 7600, + GNB_AuroraProtection = 7700, [Variant] [VariantParent(GNB_ST_MainCombo, GNB_AoE_MainCombo)] @@ -1543,7 +1559,7 @@ public enum CustomComboPreset [CustomComboInfo("Ultimatum Option", "Use Variant Ultimatum on cooldown.", GNB.JobID)] GNB_Variant_Ultimatum = 7035, - // Last value = 7600 + // Last value = 7700 #endregion diff --git a/XIVSlothCombo/Combos/PvE/GNB.cs b/XIVSlothCombo/Combos/PvE/GNB.cs index 05719d555..a2d77a625 100644 --- a/XIVSlothCombo/Combos/PvE/GNB.cs +++ b/XIVSlothCombo/Combos/PvE/GNB.cs @@ -1,5 +1,6 @@ using Dalamud.Game.ClientState.JobGauge.Types; using Dalamud.Game.ClientState.Statuses; +using FFXIVClientStructs.FFXIV.Client.UI; using XIVSlothCombo.Combos.PvE.Content; using XIVSlothCombo.Core; using XIVSlothCombo.CustomComboNS; @@ -67,7 +68,6 @@ public const ushort public static class Config { public const string - GNB_SkS = "GNB_SkS", GNB_VariantCure = "GNB_VariantCure"; } @@ -81,9 +81,6 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim { var gauge = GetJobGauge(); var quarterWeave = GetCooldownRemainingTime(actionID) < 1 && GetCooldownRemainingTime(actionID) > 0.6; - int SkSChoice = PluginConfiguration.GetCustomIntValue(Config.GNB_SkS); - bool slowSkS = SkSChoice is 2 && IsEnabled(CustomComboPreset.GNB_ST_SkSSupport); - bool regularSkS = SkSChoice is 0 or 1 || IsNotEnabled(CustomComboPreset.GNB_ST_SkSSupport); if (IsEnabled(CustomComboPreset.GNB_Variant_Cure) && IsEnabled(Variant.VariantCure) && PlayerHealthPercentageHp() <= GetOptionValue(Config.GNB_VariantCure)) return Variant.VariantCure; @@ -95,18 +92,10 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim { if (LevelChecked(BurstStrike)) { - if (regularSkS && quarterWeave) - { - if ((gauge.Ammo is 1 && CombatEngageDuration().TotalSeconds < 30 && IsOffCooldown(Bloodfest)) || //Opener Conditions - (CombatEngageDuration().Minutes == 2 && GetCooldownRemainingTime(DoubleDown) < 4) || //2 min delay - (CombatEngageDuration().Minutes != 2 && gauge.Ammo == MaxCartridges(level) && GetCooldownRemainingTime(GnashingFang) < 2)) //Regular NMGF - return NoMercy; - } - - if (slowSkS && CanWeave(actionID)) + if (CanWeave(actionID)) { if ((CombatEngageDuration().TotalSeconds < 30 && lastComboMove is BrutalShell) || - gauge.Ammo == MaxCartridges(level) || + gauge.Ammo >= 2 && IsOffCooldown(NoMercy) || (CombatEngageDuration().Minutes % 2 == 1 && gauge.Ammo is 2 && WasLastWeaponskill(BurstStrike))) return NoMercy; } @@ -132,7 +121,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim { if (IsEnabled(CustomComboPreset.GNB_ST_Bloodfest) && ActionReady(Bloodfest) && gauge.Ammo is 0 && HasEffect(Buffs.NoMercy)) { - if ((regularSkS && IsOnCooldown(GnashingFang)) || (slowSkS && IsOnCooldown(NoMercy))) + if (IsOnCooldown(NoMercy)) return Bloodfest; } @@ -145,7 +134,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim return OriginalHook(DangerZone); //Stops DZ Drift - if (HasEffect(Buffs.NoMercy) && ((IsOnCooldown(SonicBreak) && slowSkS) || (IsOnCooldown(DoubleDown) && regularSkS))) + if (HasEffect(Buffs.NoMercy)) return OriginalHook(DangerZone); } @@ -158,20 +147,17 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim if (HasEffect(Buffs.NoMercy)) { //Post DD - if ((regularSkS && IsOnCooldown(DoubleDown)) || (slowSkS && IsOnCooldown(SonicBreak))) - { - if (IsEnabled(CustomComboPreset.GNB_ST_BowShock) && ActionReady(BowShock)) - return BowShock; - if (IsEnabled(CustomComboPreset.GNB_ST_BlastingZone) && ActionReady(DangerZone)) - return OriginalHook(DangerZone); - } + if (IsEnabled(CustomComboPreset.GNB_ST_BowShock) && ActionReady(BowShock) && LevelChecked(BowShock)) + return BowShock; + if (IsEnabled(CustomComboPreset.GNB_ST_BlastingZone) && ActionReady(DangerZone)) + return OriginalHook(DangerZone); //Pre DD - if (IsOnCooldown(SonicBreak) && !LevelChecked(DoubleDown)) + if (!LevelChecked(DoubleDown)) { if (IsEnabled(CustomComboPreset.GNB_ST_BlastingZone) && ActionReady(DangerZone)) return OriginalHook(DangerZone); - if (IsEnabled(CustomComboPreset.GNB_ST_BowShock) && ActionReady(BowShock)) + if (IsEnabled(CustomComboPreset.GNB_ST_BowShock) && ActionReady(BowShock) && LevelChecked(BowShock)) return BowShock; } } @@ -185,7 +171,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim //Reign combo if (IsEnabled(CustomComboPreset.GNB_ST_Reign) && (LevelChecked(ReignOfBeasts) && (HasEffect(Buffs.NoMercy)))) { - if (HasEffect(Buffs.ReadyToReign) && GetCooldownRemainingTime(Bloodfest) > 90) + if (HasEffect(Buffs.ReadyToReign) && GetBuffRemainingTime(Buffs.ReadyToReign) <= 30) { if (WasLastWeaponskill(WickedTalon) || (WasLastAbility(EyeGouge))) return OriginalHook(ReignOfBeasts); @@ -198,35 +184,59 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim } //Sonic Break - if (regularSkS && IsEnabled(CustomComboPreset.GNB_ST_SonicBreak) && HasEffect(Buffs.ReadyToBreak) && (GetCooldownRemainingTime(NoMercy) <= 42) && !HasEffect(Buffs.ReadyToBlast) && IsOnCooldown(DoubleDown)) - return SonicBreak; - if (slowSkS && IsEnabled(CustomComboPreset.GNB_ST_SonicBreak) && HasEffect(Buffs.ReadyToBreak) && !HasEffect(Buffs.ReadyToBlast) && (GetCooldownRemainingTime(NoMercy) <= 42.5)) - return SonicBreak; + if (HasEffect(Buffs.NoMercy) && HasEffect(Buffs.ReadyToBreak)) + { + // 2min + if (IsEnabled(CustomComboPreset.GNB_ST_SonicBreak) && + !HasEffect(Buffs.ReadyToBlast) && gauge.Ammo == 2 && (GetBuffRemainingTime(Buffs.NoMercy) > 17.5) && + WasLastWeaponskill(BurstStrike) && GetCooldownRemainingTime(Bloodfest) < 30 || IsOffCooldown(Bloodfest)) + return SonicBreak; + // 1min 3 carts + else if (IsEnabled(CustomComboPreset.GNB_ST_SonicBreak) && + GetCooldownRemainingTime(Bloodfest) > 30 && gauge.Ammo == 3 && + (GetCooldownRemainingTime(NoMercy) > 57.5)) + return SonicBreak; + // 1min 2 carts + else if (IsEnabled(CustomComboPreset.GNB_ST_SonicBreak) && + GetCooldownRemainingTime(Bloodfest) > 30 && gauge.Ammo == 0 && + !HasEffect(Buffs.ReadyToRip) && (GetBuffRemainingTime(Buffs.NoMercy) < 12.5) && + WasLastWeaponskill(GnashingFang) || WasLastAbility(SavageClaw)) + return SonicBreak; + } // 60s window features if ((GetCooldownRemainingTime(NoMercy) > 57 || HasEffect(Buffs.NoMercy)) && IsEnabled(CustomComboPreset.GNB_ST_MainCombo_CooldownsGroup)) { - if (LevelChecked(DoubleDown) && GetCooldownRemainingTime(GnashingFang) > 8) + if (LevelChecked(DoubleDown)) { - if (regularSkS) + // 2min NM + if (WasLastWeaponskill(SonicBreak) && gauge.Ammo == 2 && GetCooldownRemainingTime(Bloodfest) < 10 || IsOffCooldown(Bloodfest)) { - if (IsEnabled(CustomComboPreset.GNB_ST_DoubleDown) && IsOffCooldown(DoubleDown) && gauge.Ammo >= 2 && !HasEffect(Buffs.ReadyToRip) && gauge.AmmoComboStep >= 1) + if (IsEnabled(CustomComboPreset.GNB_ST_DoubleDown) && gauge.Ammo == 2) return DoubleDown; } - if (slowSkS) + // 1min NM 3 carts + else if (WasLastWeaponskill(SonicBreak) && gauge.Ammo == 3) { - if (IsEnabled(CustomComboPreset.GNB_ST_DoubleDown) && IsOffCooldown(DoubleDown) && gauge.Ammo >= 2 && IsOnCooldown(SonicBreak)) + if (IsEnabled(CustomComboPreset.GNB_ST_DoubleDown) && !HasEffect(Buffs.ReadyToBreak) && gauge.Ammo == 3) + return DoubleDown; + } + + // 1min NM 2 carts + else if (WasLastWeaponskill(SolidBarrel) && gauge.Ammo == 3 && (GetBuffRemainingTime(Buffs.NoMercy) < 17)) + { + if (IsEnabled(CustomComboPreset.GNB_ST_DoubleDown) && HasEffect(Buffs.ReadyToBreak) && gauge.Ammo == 3) return DoubleDown; } } if (!LevelChecked(DoubleDown)) { - if (IsEnabled(CustomComboPreset.GNB_ST_SonicBreak) && ActionReady(SonicBreak) && (GetCooldownRemainingTime(NoMercy) <= 42) && !HasEffect(Buffs.ReadyToRip) && IsOnCooldown(GnashingFang)) + if (IsEnabled(CustomComboPreset.GNB_ST_SonicBreak) && HasEffect(Buffs.ReadyToBreak) && (GetBuffRemainingTime(Buffs.NoMercy) <= GetCooldown(SonicBreak).CooldownTotal) && !HasEffect(Buffs.ReadyToRip) && IsOnCooldown(GnashingFang)) return SonicBreak; //sub level 54 functionality - if (IsEnabled(CustomComboPreset.GNB_ST_BlastingZone) && ActionReady(DangerZone) && !LevelChecked(SonicBreak)) + if (IsEnabled(CustomComboPreset.GNB_ST_BlastingZone) && ActionReady(DangerZone) && !LevelChecked(SonicBreak) && HasEffect(Buffs.NoMercy) || GetCooldownRemainingTime(NoMercy) < 30) return OriginalHook(DangerZone); } } @@ -235,27 +245,37 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim if (IsEnabled(CustomComboPreset.GNB_ST_Gnashing) && LevelChecked(GnashingFang)) { bool activeNoMercy = GetCooldownRemainingTime(NoMercy) > 50 || HasEffect(Buffs.NoMercy); - if (IsEnabled(CustomComboPreset.GNB_ST_GnashingFang_Starter) && GetCooldownRemainingTime(GnashingFang) <= GetCooldownRemainingTime(KeenEdge) + 0.25 && gauge.AmmoComboStep == 0 && - ((gauge.Ammo == MaxCartridges(level) && activeNoMercy && ((CombatEngageDuration().Minutes != 2 && regularSkS) || slowSkS)) || //Regular 60 second GF/NM timing - (gauge.Ammo == MaxCartridges(level) && activeNoMercy && CombatEngageDuration().Minutes == 2 && GetCooldownRemainingTime(DoubleDown) <= 1 && regularSkS) || //2 min delay for regular SkS + if (IsEnabled(CustomComboPreset.GNB_ST_GnashingFang_Starter) && GetCooldownRemainingTime(GnashingFang) <= GetCooldownRemainingTime(KeenEdge) + 0.25 && !HasEffect(Buffs.ReadyToBlast) && gauge.AmmoComboStep == 0 && + ((gauge.Ammo == MaxCartridges(level) && activeNoMercy && WasLastWeaponskill(DoubleDown)) || //Regular 60 second GF/NM timing (gauge.Ammo == 1 && HasEffect(Buffs.NoMercy) && GetCooldownRemainingTime(DoubleDown) > 50) || //NMDDGF windows/Scuffed windows (gauge.Ammo > 0 && GetCooldownRemainingTime(NoMercy) > 17 && GetCooldownRemainingTime(NoMercy) < 35) || //Regular 30 second window (gauge.Ammo == 1 && GetCooldownRemainingTime(NoMercy) > 50 && ((IsOffCooldown(Bloodfest) && LevelChecked(Bloodfest)) || !LevelChecked(Bloodfest))))) //Opener Conditions return GnashingFang; if (gauge.AmmoComboStep is 1 or 2) return OriginalHook(GnashingFang); + + if (WasLastWeaponskill(BurstStrike) && (LevelChecked(Hypervelocity) && HasEffect(Buffs.ReadyToBlast) && GetCooldownRemainingTime(GnashingFang) < 2.5)) + return Hypervelocity; } if (IsEnabled(CustomComboPreset.GNB_ST_BurstStrike) && IsEnabled(CustomComboPreset.GNB_ST_MainCombo_CooldownsGroup)) { if (HasEffect(Buffs.NoMercy) && gauge.AmmoComboStep == 0 && LevelChecked(BurstStrike)) { - if (LevelChecked(Hypervelocity) && HasEffect(Buffs.ReadyToBlast)) - return Hypervelocity; - if (gauge.Ammo != 0 && GetCooldownRemainingTime(GnashingFang) > 4) + // 2min 2-cart loop starter + if (GetCooldownRemainingTime(NoMercy) < 2.5 && gauge.Ammo == 3 && (GetCooldownRemainingTime(Bloodfest) < 30 || IsOffCooldown(Bloodfest))) return BurstStrike; } + if (gauge.AmmoComboStep == 0 && LevelChecked(BurstStrike)) + { + if (GetCooldownRemainingTime(NoMercy) < 2.5 && gauge.Ammo == 3 && (GetCooldownRemainingTime(Bloodfest) < 30 || IsOffCooldown(Bloodfest))) + return BurstStrike; + if (LevelChecked(Hypervelocity) && HasEffect(Buffs.ReadyToBlast) && (HasEffect(Buffs.NoMercy))) + return Hypervelocity; + + } + //final check if Burst Strike is used right before No Mercy ends if (LevelChecked(Hypervelocity) && HasEffect(Buffs.ReadyToBlast)) return Hypervelocity; @@ -292,18 +312,15 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim if (actionID == GnashingFang) { var gauge = GetJobGauge(); - int SkSChoice = PluginConfiguration.GetCustomIntValue(Config.GNB_SkS); - bool slowSkS = SkSChoice is 2 && IsEnabled(CustomComboPreset.GNB_ST_SkSSupport); - bool regularSkS = SkSChoice is 0 or 1 || IsNotEnabled(CustomComboPreset.GNB_ST_SkSSupport); - if (IsOffCooldown(NoMercy) && CanDelayedWeave(SolidBarrel) && IsOffCooldown(GnashingFang) && IsEnabled(CustomComboPreset.GNB_GF_NoMercy)) + if (IsOffCooldown(NoMercy) && IsOffCooldown(GnashingFang) && IsEnabled(CustomComboPreset.GNB_GF_NoMercy)) return NoMercy; if (CanWeave(actionID)) { if (IsEnabled(CustomComboPreset.GNB_GF_Cooldowns)) { - if (ActionReady(Bloodfest) && gauge.Ammo is 0 && HasEffect(Buffs.NoMercy) && ((regularSkS && IsOnCooldown(GnashingFang)) || (slowSkS && IsOnCooldown(NoMercy)))) + if (ActionReady(Bloodfest) && gauge.Ammo is 0 && HasEffect(Buffs.NoMercy) && IsOnCooldown(NoMercy)) return Bloodfest; if (ActionReady(DangerZone)) @@ -314,7 +331,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim return OriginalHook(DangerZone); //Stops DZ Drift - if (HasEffect(Buffs.NoMercy) && ((IsOnCooldown(SonicBreak) && slowSkS) || (IsOnCooldown(DoubleDown) && regularSkS))) + if (HasEffect(Buffs.NoMercy)) return OriginalHook(DangerZone); } @@ -326,18 +343,15 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim if (HasEffect(Buffs.NoMercy)) { //Post DD - if ((regularSkS && IsOnCooldown(DoubleDown)) || (slowSkS && IsOnCooldown(SonicBreak))) - { - if (ActionReady(DangerZone)) - return OriginalHook(DangerZone); - if (ActionReady(BowShock)) - return BowShock; - } + if (ActionReady(DangerZone)) + return OriginalHook(DangerZone); + if (ActionReady(BowShock) && LevelChecked(BowShock)) + return BowShock; //Pre DD - if (IsOnCooldown(SonicBreak) && !LevelChecked(DoubleDown)) + if (!LevelChecked(DoubleDown)) { - if (ActionReady(BowShock)) + if (ActionReady(BowShock) && LevelChecked(BowShock)) return BowShock; if (ActionReady(DangerZone)) return OriginalHook(DangerZone); @@ -354,27 +368,15 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim { if (LevelChecked(DoubleDown) && GetCooldownRemainingTime(GnashingFang) > 20) { - if (regularSkS) - { - if (IsEnabled(CustomComboPreset.GNB_ST_DoubleDown) && IsOffCooldown(DoubleDown) && gauge.Ammo >= 2 && !HasEffect(Buffs.ReadyToRip) && gauge.AmmoComboStep >= 1) - return DoubleDown; - if (IsEnabled(CustomComboPreset.GNB_ST_SonicBreak) && IsOffCooldown(SonicBreak) && HasEffect(Buffs.ReadyToBreak) && IsOnCooldown(DoubleDown)) - return SonicBreak; - - } - - if (slowSkS) - { - if (IsEnabled(CustomComboPreset.GNB_ST_SonicBreak) && IsOffCooldown(SonicBreak) && HasEffect(Buffs.ReadyToBreak) && !HasEffect(Buffs.ReadyToRip) && gauge.AmmoComboStep >= 1) - return SonicBreak; - if (IsEnabled(CustomComboPreset.GNB_ST_DoubleDown) && IsOffCooldown(DoubleDown) && gauge.Ammo >= 2 && IsOnCooldown(SonicBreak)) - return DoubleDown; - } + if (IsEnabled(CustomComboPreset.GNB_ST_SonicBreak) && HasEffect(Buffs.ReadyToBreak) && !HasEffect(Buffs.ReadyToRip) && gauge.AmmoComboStep >= 1) + return SonicBreak; + if (IsEnabled(CustomComboPreset.GNB_ST_DoubleDown) && IsOffCooldown(DoubleDown) && gauge.Ammo >= 2) + return DoubleDown; } if (!LevelChecked(DoubleDown) && IsEnabled(CustomComboPreset.GNB_GF_Cooldowns)) { - if (IsEnabled(CustomComboPreset.GNB_ST_SonicBreak) && ActionReady(SonicBreak) && (GetCooldownRemainingTime(NoMercy) <= 42) && !HasEffect(Buffs.ReadyToRip) && IsOnCooldown(GnashingFang)) + if (IsEnabled(CustomComboPreset.GNB_ST_SonicBreak) && ActionReady(SonicBreak) && (GetBuffRemainingTime(Buffs.NoMercy) <= GetCooldown(SonicBreak).CooldownTotal) && !HasEffect(Buffs.ReadyToRip) && IsOnCooldown(GnashingFang)) return SonicBreak; //sub level 54 functionality if (IsEnabled(CustomComboPreset.GNB_ST_BlastingZone) && ActionReady(DangerZone) && !LevelChecked(SonicBreak)) @@ -457,19 +459,19 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim if (IsEnabled(CustomComboPreset.GNB_AoE_NoMercy) && ActionReady(NoMercy)) return NoMercy; - if (IsEnabled(CustomComboPreset.GNB_AoE_BowShock) && ActionReady(BowShock)) + if (IsEnabled(CustomComboPreset.GNB_AoE_BowShock) && ActionReady(BowShock) && LevelChecked(BowShock) && HasEffect(Buffs.NoMercy)) return BowShock; if (IsEnabled(CustomComboPreset.GNB_AOE_DangerZone) && ActionReady(DangerZone)) return OriginalHook(DangerZone); - if (IsEnabled(CustomComboPreset.GNB_AoE_Bloodfest) && gauge.Ammo == 0 && ActionReady(Bloodfest)) + if (IsEnabled(CustomComboPreset.GNB_AoE_Bloodfest) && gauge.Ammo == 0 && ActionReady(Bloodfest) && LevelChecked(Bloodfest) && HasEffect(Buffs.NoMercy)) return Bloodfest; - if (LevelChecked(FatedBrand) && HasEffect(Buffs.ReadyToRaze) && WasLastWeaponskill(FatedCircle)) + if (LevelChecked(FatedBrand) && HasEffect(Buffs.ReadyToRaze) && WasLastWeaponskill(FatedCircle) && LevelChecked(FatedBrand)) return FatedBrand; } - if (IsEnabled(CustomComboPreset.GNB_AOE_SonicBreak) && ActionReady(SonicBreak) && (GetCooldownRemainingTime(NoMercy) < 43)) + if (IsEnabled(CustomComboPreset.GNB_AOE_SonicBreak) && HasEffect(Buffs.ReadyToBreak) && !HasEffect(Buffs.ReadyToRaze) && (GetBuffRemainingTime(Buffs.NoMercy) <= GetCooldown(SonicBreak).CooldownTotal)) return SonicBreak; - if (IsEnabled(CustomComboPreset.GNB_AoE_DoubleDown) && gauge.Ammo >= 2 && ActionReady(DoubleDown)) + if (IsEnabled(CustomComboPreset.GNB_AoE_DoubleDown) && gauge.Ammo >= 2 && ActionReady(DoubleDown) && HasEffect(Buffs.NoMercy)) return DoubleDown; if (IsEnabled(CustomComboPreset.GNB_AoE_Bloodfest) && gauge.Ammo != 0 && GetCooldownRemainingTime(Bloodfest) < 6 && LevelChecked(FatedCircle)) return FatedCircle; @@ -487,6 +489,28 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim } } + internal class GNB_FC : CustomCombo + { + protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.GNB_FC; + + protected override uint Invoke(uint actionID, uint lastComboMove, float comboTime, byte level) + { + if (actionID is FatedCircle) + { + var gauge = GetJobGauge(); + + if (IsEnabled(CustomComboPreset.GNB_FC_Continuation) && HasEffect(Buffs.ReadyToRaze) && LevelChecked(FatedBrand) && CanWeave(actionID)) + return FatedBrand; + if (IsEnabled(CustomComboPreset.GNB_FC_Bloodfest) && gauge.Ammo is 0 && LevelChecked(Bloodfest) && !HasEffect(Buffs.ReadyToRaze)) + return Bloodfest; + if (IsEnabled(CustomComboPreset.GNB_FC_DoubleDown) && GetCooldownRemainingTime(DoubleDown) < 2 && gauge.Ammo >= 2 && LevelChecked(DoubleDown)) + return DoubleDown; + } + + return actionID; + } + } + internal class GNB_NoMercy_Cooldowns : CustomCombo { protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.GNB_NoMercy_Cooldowns; @@ -498,11 +522,11 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim var gauge = GetJobGauge().Ammo; if (IsOnCooldown(NoMercy) && InCombat()) { - if (IsEnabled(CustomComboPreset.GNB_NoMercy_Cooldowns_DD) && GetCooldownRemainingTime(NoMercy) < 60 && IsOffCooldown(DoubleDown) && gauge >= 2 && LevelChecked(DoubleDown)) + if (IsEnabled(CustomComboPreset.GNB_NoMercy_Cooldowns_DD) && IsOffCooldown(DoubleDown) && gauge >= 2 && LevelChecked(DoubleDown)) return DoubleDown; if (IsEnabled(CustomComboPreset.GNB_NoMercy_Cooldowns_SonicBreakBowShock)) { - if (IsOffCooldown(SonicBreak)) + if (HasEffect(Buffs.ReadyToBreak)) return SonicBreak; if (IsOffCooldown(BowShock)) return BowShock; diff --git a/XIVSlothCombo/Combos/PvP/GNBPVP.cs b/XIVSlothCombo/Combos/PvP/GNBPVP.cs index ace82c7e9..9ca26538d 100644 --- a/XIVSlothCombo/Combos/PvP/GNBPVP.cs +++ b/XIVSlothCombo/Combos/PvP/GNBPVP.cs @@ -72,7 +72,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim } if (IsOffCooldown(DoubleDown) && - GetRemainingCharges(RoughDivide) >= 1) + GetRemainingCharges(RoughDivide) == 2) return RoughDivide; // Gnashing Fang diff --git a/XIVSlothCombo/Window/Functions/UserConfig.cs b/XIVSlothCombo/Window/Functions/UserConfig.cs index 0b5b4aa41..5d5ee3441 100644 --- a/XIVSlothCombo/Window/Functions/UserConfig.cs +++ b/XIVSlothCombo/Window/Functions/UserConfig.cs @@ -1578,12 +1578,6 @@ internal static void Draw(CustomComboPreset preset, bool enabled) // ==================================================================================== #region GUNBREAKER - if (preset == CustomComboPreset.GNB_ST_SkSSupport && enabled) - { - UserConfig.DrawHorizontalRadioButton(GNB.Config.GNB_SkS, "< 2.45", "Options are friendly for skill speeds of 2.45 and lower.", 1); - UserConfig.DrawHorizontalRadioButton(GNB.Config.GNB_SkS, "2.5", "Options are friendly for 2.5 skill speed.", 2); - } - if (preset == CustomComboPreset.GNB_Variant_Cure) UserConfig.DrawSliderInt(1, 100, GNB.Config.GNB_VariantCure, "HP% to be at or under", 200);