diff --git a/XIVSlothCombo/Combos/CustomComboPreset.cs b/XIVSlothCombo/Combos/CustomComboPreset.cs index 5f727fc49..d28292416 100644 --- a/XIVSlothCombo/Combos/CustomComboPreset.cs +++ b/XIVSlothCombo/Combos/CustomComboPreset.cs @@ -621,11 +621,7 @@ public enum CustomComboPreset [ParentCombo(BRD_ST_AdvMode)] [CustomComboInfo("Bard Songs Option", "This option adds the Bard's Songs to the Advanced Bard Feature.", BRD.JobID)] - BRD_Adv_Song = 3011, - - [ParentCombo(BRD_AoE_oGCD)] - [CustomComboInfo("Songs Option", "Adds Songs onto AoE oGCD Feature.", BRD.JobID)] - BRD_oGCDSongs = 3012, + BRD_Adv_Song = 3011, [ReplaceSkill(BRD.Barrage)] [CustomComboInfo("Bard Buffs Feature", "Adds Raging Strikes and Battle Voice onto Barrage.", BRD.JobID)] @@ -651,10 +647,18 @@ public enum CustomComboPreset [CustomComboInfo("Buffs Option", "Adds buffs onto the Advanced Bard feature.", BRD.JobID)] BRD_Adv_Buffs = 3017, - [ParentCombo(BRD_Adv_Buffs)] - [CustomComboInfo("Buffs - Radiant Option", "Adds Radiant Finale to theBuffs feature.", BRD.JobID)] + [ParentCombo(BRD_ST_AdvMode)] + [CustomComboInfo("Resonant Option", "Adds Resonant Arrow to the Rotation after Barrage.", BRD.JobID)] + BRD_Adv_BuffsResonant = 3041, + + [ParentCombo(BRD_ST_AdvMode)] + [CustomComboInfo("Buffs - Radiant Option", "Adds Radiant Finale to the Advanced Bard feature.", BRD.JobID)] BRD_Adv_BuffsRadiant = 3018, + [ParentCombo(BRD_ST_AdvMode)] + [CustomComboInfo("Encore Option", "Adds Radiant Encore to the Rotation after Finale.", BRD.JobID)] + BRD_Adv_BuffsEncore = 3042, + [ParentCombo(BRD_ST_AdvMode)] [CustomComboInfo("No Waste Option", "Adds enemy health checking on mobs for buffs, DoTs and Songs.\nThey will not be reapplied if less than specified.", BRD.JobID)] BRD_Adv_NoWaste = 3019, @@ -677,9 +681,13 @@ public enum CustomComboPreset //BardSimpleOpener = 3022, [ParentCombo(BRD_ST_AdvMode)] - [CustomComboInfo("Pooling Option", "Pools Bloodletter charges to allow for optimum burst phases, will also keep sidewinder in the buff window during wanderers.", BRD.JobID)] + [CustomComboInfo("Pooling Option", "84+ Pools Bloodletter charges to allow for optimum burst phases.", BRD.JobID)] BRD_Adv_Pooling = 3023, + [ParentCombo(BRD_AoE_AdvMode)] + [CustomComboInfo("Pooling Option", "84+ Pools Rain of death charges to allow for optimum burst phases.", BRD.JobID)] + BRD_AoE_Pooling = 3040, + [ParentCombo(BRD_IronJaws)] [CustomComboInfo("Iron Jaws Apex Option", "Adds Apex and Blast Arrow to Iron Jaws when available.", BRD.JobID)] BRD_IronJawsApex = 3024, @@ -717,7 +725,7 @@ public enum CustomComboPreset [ParentCombo(BRD_AoE_AdvMode)] [CustomComboInfo("AoE No Waste Option", "Adds enemy health checking on targetted mob for songs.\nThey will not be reapplied if less than specified.", BRD.JobID)] BRD_AoE_Adv_NoWaste = 3033, - // Last value = 3038 + // Last value = 3042 #endregion diff --git a/XIVSlothCombo/Combos/PvE/BRD.cs b/XIVSlothCombo/Combos/PvE/BRD.cs index fa762902d..dcde8ae08 100644 --- a/XIVSlothCombo/Combos/PvE/BRD.cs +++ b/XIVSlothCombo/Combos/PvE/BRD.cs @@ -84,7 +84,11 @@ public const string BRD_AoESecondWindThreshold = "BRD_AoESecondWindThreshold", BRD_VariantCure = "BRD_VariantCure"; } - + internal static class Traits + { + internal const ushort + EnhancedBloodletter = 445; + } #region Song status internal static bool SongIsNotNone(Song value) => value != Song.NONE; internal static bool SongIsNone(Song value) => value == Song.NONE; @@ -429,7 +433,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim return EmpyrealArrow; if (LevelChecked(PitchPerfect) && songWanderer && - (gauge.Repertoire == 3 || (gauge.Repertoire == 2 && empyrealCD < 2))) + (gauge.Repertoire == 3 || (LevelChecked(EmpyrealArrow) && gauge.Repertoire == 2 && empyrealCD < 2))) return OriginalHook(PitchPerfect); if (ActionReady(Sidewinder)) @@ -451,7 +455,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim { uint rainOfDeathCharges = LevelChecked(RainOfDeath) ? GetRemainingCharges(RainOfDeath) : 0; - if (LevelChecked(WanderersMinuet)) + if (IsEnabled(CustomComboPreset.BRD_AoE_Pooling) && LevelChecked(WanderersMinuet) && TraitLevelChecked(Traits.EnhancedBloodletter)) { if (songWanderer) { @@ -486,7 +490,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim } } - bool wideVolleyReady = LevelChecked(WideVolley) && HasEffect(Buffs.HawksEye); + bool wideVolleyReady = LevelChecked(WideVolley) && (HasEffect(Buffs.HawksEye) || HasEffect(Buffs.Barrage)); bool blastArrowReady = LevelChecked(BlastArrow) && HasEffect(Buffs.BlastArrowReady); bool resonantArrowReady = LevelChecked(ResonantArrow) && HasEffect(Buffs.ResonantArrowReady); @@ -730,7 +734,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim return EmpyrealArrow; if (LevelChecked(PitchPerfect) && songWanderer && - (gauge.Repertoire == 3 || (gauge.Repertoire == 2 && empyrealCD < 2))) + (gauge.Repertoire == 3 || (LevelChecked(EmpyrealArrow) && gauge.Repertoire == 2 && empyrealCD < 2))) return OriginalHook(PitchPerfect); if (ActionReady(Sidewinder)) @@ -755,7 +759,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim { uint bloodletterCharges = GetRemainingCharges(Bloodletter); - if (IsEnabled(CustomComboPreset.BRD_Adv_Pooling) && LevelChecked(WanderersMinuet)) + if (IsEnabled(CustomComboPreset.BRD_Adv_Pooling) && LevelChecked(WanderersMinuet) && TraitLevelChecked(Traits.EnhancedBloodletter)) { if (songWanderer) { @@ -787,7 +791,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim } } //Moved below weaves bc roobert says it is blocking his weaves from happening - if (HasEffect(Buffs.RadiantEncoreReady) && !JustUsed(RadiantFinale) && GetCooldownElapsed(BattleVoice) >= 4.2f && IsEnabled(CustomComboPreset.BRD_Adv_BuffsRadiant)) + if (HasEffect(Buffs.RadiantEncoreReady) && !JustUsed(RadiantFinale) && GetCooldownElapsed(RadiantFinale) >= 4.2f && IsEnabled(CustomComboPreset.BRD_Adv_BuffsEncore)) return OriginalHook(RadiantEncore); if (isEnemyHealthHigh) @@ -817,7 +821,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim if (IsEnabled(CustomComboPreset.BRD_Adv_DoT)) { if (ActionReady(IronJaws) && IsEnabled(CustomComboPreset.BRD_Adv_RagingJaws) && HasEffect(Buffs.RagingStrikes) && - !WasLastAction(IronJaws) && ragingStrikesDuration < ragingJawsRenewTime && poisonRecast(40) && windRecast(40)) + !WasLastAction(IronJaws) && ragingStrikesDuration < ragingJawsRenewTime && poisonRecast(35) && windRecast(35)) { openerFinished = true; return IronJaws; @@ -877,7 +881,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim if (HasEffect(Buffs.HawksEye) || HasEffect(Buffs.Barrage)) return OriginalHook(StraightShot); - if (HasEffect(Buffs.ResonantArrowReady) && IsEnabled(CustomComboPreset.BRD_Adv_Buffs)) + if (HasEffect(Buffs.ResonantArrowReady) && IsEnabled(CustomComboPreset.BRD_Adv_BuffsResonant)) return ResonantArrow; } @@ -1055,7 +1059,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim return EmpyrealArrow; if (LevelChecked(PitchPerfect) && songWanderer && - (gauge.Repertoire == 3 || (gauge.Repertoire == 2 && empyrealCD < 2))) + (gauge.Repertoire == 3 || (LevelChecked(EmpyrealArrow) && gauge.Repertoire == 2 && empyrealCD < 2))) return OriginalHook(PitchPerfect); if (ActionReady(Sidewinder)) @@ -1076,7 +1080,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim { uint rainOfDeathCharges = LevelChecked(RainOfDeath) ? GetRemainingCharges(RainOfDeath) : 0; - if (LevelChecked(WanderersMinuet)) + if (LevelChecked(WanderersMinuet) && TraitLevelChecked(Traits.EnhancedBloodletter)) { if (songWanderer) { @@ -1110,7 +1114,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim } - bool wideVolleyReady = LevelChecked(WideVolley) && HasEffect(Buffs.HawksEye); + bool wideVolleyReady = LevelChecked(WideVolley) && (HasEffect(Buffs.HawksEye) || HasEffect(Buffs.Barrage)); bool blastArrowReady = LevelChecked(BlastArrow) && HasEffect(Buffs.BlastArrowReady); bool resonantArrowReady = LevelChecked(ResonantArrow) && HasEffect(Buffs.ResonantArrowReady); @@ -1284,7 +1288,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim return EmpyrealArrow; if (LevelChecked(PitchPerfect) && songWanderer && - (gauge.Repertoire == 3 || (gauge.Repertoire == 2 && empyrealCD < 2))) + (gauge.Repertoire == 3 || (LevelChecked(EmpyrealArrow) && gauge.Repertoire == 2 && empyrealCD < 2))) return OriginalHook(PitchPerfect); if (ActionReady(Sidewinder)) @@ -1305,7 +1309,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim { uint bloodletterCharges = GetRemainingCharges(Bloodletter); - if (LevelChecked(WanderersMinuet)) + if (LevelChecked(WanderersMinuet) && TraitLevelChecked(Traits.EnhancedBloodletter)) { if (songWanderer) { @@ -1365,7 +1369,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim }; if (ActionReady(IronJaws) && HasEffect(Buffs.RagingStrikes) && - !WasLastAction(IronJaws) && ragingStrikesDuration < ragingJawsRenewTime && poisonRecast(40) && windRecast(40)) + !WasLastAction(IronJaws) && ragingStrikesDuration < ragingJawsRenewTime && poisonRecast(35) && windRecast(35)) { openerFinished = true; return IronJaws; diff --git a/XIVSlothCombo/Window/Functions/UserConfig.cs b/XIVSlothCombo/Window/Functions/UserConfig.cs index a336163ca..1d64d8ece 100644 --- a/XIVSlothCombo/Window/Functions/UserConfig.cs +++ b/XIVSlothCombo/Window/Functions/UserConfig.cs @@ -1347,7 +1347,7 @@ internal static void Draw(CustomComboPreset preset, bool enabled) #region BARD if (preset == CustomComboPreset.BRD_Adv_RagingJaws) - UserConfig.DrawSliderInt(3, 5, BRD.Config.BRD_RagingJawsRenewTime, "Remaining time (In seconds)"); + UserConfig.DrawSliderInt(3, 10, BRD.Config.BRD_RagingJawsRenewTime, "Remaining time (In seconds). Recommended 5, increase little by little if refresh is outside of radiant window"); if (preset == CustomComboPreset.BRD_Adv_NoWaste) UserConfig.DrawSliderInt(1, 10, BRD.Config.BRD_NoWasteHPPercentage, "Remaining target HP percentage");