diff --git a/XIVSlothCombo/Combos/CustomComboPreset.cs b/XIVSlothCombo/Combos/CustomComboPreset.cs index 8e348996f..5ddf97e5b 100644 --- a/XIVSlothCombo/Combos/CustomComboPreset.cs +++ b/XIVSlothCombo/Combos/CustomComboPreset.cs @@ -175,20 +175,15 @@ public enum CustomComboPreset #region ASTROLOGIAN - #region DPS - [ReplaceSkill(AST.Malefic, AST.Malefic2, AST.Malefic3, AST.Malefic4, AST.FallMalefic, AST.Combust, AST.Combust2, AST.Combust3, AST.Gravity, AST.Gravity2)] - [CustomComboInfo("DPS Feature", "Replaces Malefic or Combust with options below", AST.JobID)] + #region ST DPS + [ReplaceSkill(AST.Malefic, AST.Malefic2, AST.Malefic3, AST.Malefic4, AST.FallMalefic, AST.Combust, AST.Combust2, AST.Combust3)] + [CustomComboInfo("ST DPS Feature", "Replaces Malefic or Combust with options below", AST.JobID)] AST_ST_DPS = 1004, [ParentCombo(AST_ST_DPS)] [CustomComboInfo("Combust Uptime Option", "Adds Combust to the DPS feature if it's not present on current target, or is about to expire.", AST.JobID)] AST_ST_DPS_CombustUptime = 1018, - - [ReplaceSkill(AST.Gravity, AST.Gravity2)] - [ParentCombo(AST_ST_DPS)] - [CustomComboInfo("AoE DPS Option", "Every option below (Lucid/AutoDraws/etc) will also be added to Gravity", AST.JobID, 1, "", "")] - AST_AoE_DPS = 1013, - + [ParentCombo(AST_ST_DPS)] [CustomComboInfo("Lightspeed Weave Option", "Adds Lightspeed", AST.JobID, 2, "", "")] AST_DPS_LightSpeed = 1020, @@ -206,7 +201,7 @@ public enum CustomComboPreset AST_DPS_AutoDraw = 1011, [ParentCombo(AST_ST_DPS)] - [CustomComboInfo("Card Play Weave Option", "Weaves your Balance or Arrow card (best used with Quick Target Cards)", AST.JobID, 6)] + [CustomComboInfo("Card Play Weave Option", "Weaves your Balance or Spear card (best used with Quick Target Cards)", AST.JobID, 6)] AST_DPS_AutoPlay = 1037, [ParentCombo(AST_ST_DPS)] @@ -216,6 +211,46 @@ public enum CustomComboPreset [ParentCombo(AST_ST_DPS)] [CustomComboInfo("Oracle Option", "Adds Oracle after Divination", AST.JobID)] AST_DPS_Oracle = 1015, + + [ParentCombo(AST_ST_DPS)] + [CustomComboInfo("Opener Option lvl 100", "Use the Balance opener. Have a deck of cards pulled and umbral draw off cooldown. It WILL use a lightspeed charge", AST.JobID, 11, "", "")] + AST_ST_DPS_Opener = 1040, + + #endregion + + #region AOE DPS + [ReplaceSkill(AST.Gravity, AST.Gravity2)] + [CustomComboInfo("AOE DPS Feature", "Replaces Gravity with options below", AST.JobID)] + AST_AOE_DPS = 1041, + + [ParentCombo(AST_AOE_DPS)] + [CustomComboInfo("Lightspeed Weave Option", "Adds Lightspeed", AST.JobID, 2, "", "")] + AST_AOE_LightSpeed = 1048, + + [ParentCombo(AST_AOE_DPS)] + [CustomComboInfo("Lucid Dreaming Weave Option", "Adds Lucid Dreaming when MP drops below slider value", AST.JobID, 3, "", "")] + AST_AOE_Lucid = 1042, + + [ParentCombo(AST_AOE_DPS)] + [CustomComboInfo("Divination Weave Option", "Adds Divination", AST.JobID, 4, "", "")] + AST_AOE_Divination = 1043, + + [ParentCombo(AST_AOE_DPS)] + [CustomComboInfo("Card Draw Weave Option", "Draws your cards", AST.JobID, 5, "", "")] + AST_AOE_AutoDraw = 1044, + + [ParentCombo(AST_AOE_DPS)] + [CustomComboInfo("Card Play Weave Option", "Weaves your Balance or Spear card (best used with Quick Target Cards)", AST.JobID, 6)] + AST_AOE_AutoPlay = 1045, + + [ParentCombo(AST_AOE_DPS)] + [CustomComboInfo("Lord of Crowns Weave Option", "Adds Lord Of Crowns", AST.JobID, 10, "", "")] + AST_AOE_LazyLord = 1046, + + [ParentCombo(AST_AOE_DPS)] + [CustomComboInfo("Oracle Option", "Adds Oracle after Divination", AST.JobID)] + AST_AOE_Oracle = 1047, + #endregion #region Healing @@ -244,13 +279,21 @@ public enum CustomComboPreset AST_ST_SimpleHeals_Exaltation = 1028, [ParentCombo(AST_ST_SimpleHeals)] - [CustomComboInfo("The Spire Option", "Adds The Spire when the card has been drawn", AST.JobID)] + [CustomComboInfo("The Spire Option", "Adds The Spire (Shield) when the card has been drawn", AST.JobID)] AST_ST_SimpleHeals_Spire = 1030, [ParentCombo(AST_ST_SimpleHeals)] - [CustomComboInfo("The Ewer Option", "Adds The Ewer when the card has been drawn", AST.JobID)] + [CustomComboInfo("The Ewer Option", "Adds The Ewer (Heal over time) when the card has been drawn", AST.JobID)] AST_ST_SimpleHeals_Ewer = 1032, + [ParentCombo(AST_ST_SimpleHeals)] + [CustomComboInfo("The Arrow Option", "Adds The Arrow (increased healing) when the card has been drawn", AST.JobID)] + AST_ST_SimpleHeals_Arrow = 1049, + + [ParentCombo(AST_ST_SimpleHeals)] + [CustomComboInfo("The Bole Option", "Adds The Bole (Reduced Damage) when the card has been drawn", AST.JobID)] + AST_ST_SimpleHeals_Bole = 1050, + [ReplaceSkill(AST.AspectedHelios)] [CustomComboInfo("Simple Heals (AoE)", "Replaces Aspected Helios with a one button healing replacement.", AST.JobID, 3, "", "")] AST_AoE_SimpleHeals_AspectedHelios = 1010, @@ -280,7 +323,7 @@ public enum CustomComboPreset AST_Raise_Alternative = 1003, [Variant] - [VariantParent(AST_ST_DPS_CombustUptime, AST_AoE_DPS)] + [VariantParent(AST_ST_DPS_CombustUptime)] [CustomComboInfo("Spirit Dart Option", "Use Variant Spirit Dart whenever the debuff is not present or less than 3s.", AST.JobID)] AST_Variant_SpiritDart = 1035, @@ -300,7 +343,7 @@ public enum CustomComboPreset AST_Cards_QuickTargetCards_TargetExtra = 1031, #endregion - // Last value = 1039 + // Last value = 1050 #endregion @@ -3096,9 +3139,9 @@ The three digets after RDM.JobID can be used to reorder items in the list [CustomComboInfo("Rhizomata Feature", "Replaces Addersgall skills with Rhizomata when empty.", SGE.JobID, 600, "", "")] SGE_Rhizo = 14037, - [ReplaceSkill(SGE.Druochole)] - [CustomComboInfo("Druochole to Taurochole Feature", "Upgrades Druochole to Taurochole when Taurochole is available.", SGE.JobID, 700, "", "")] - SGE_DruoTauro = 14038, + [ReplaceSkill(SGE.Taurochole)] + [CustomComboInfo("Taurochole to Druochole Feature", "Turns Taurochole to Druochole when Taurochole is on cooldown.", SGE.JobID, 700, "", "")] + SGE_TauroDruo = 14038, [ReplaceSkill(SGE.Pneuma)] [CustomComboInfo("Zoe Pneuma Feature", "Places Zoe on top of Pneuma when both actions are on cooldown.", SGE.JobID, 701, "", "")] //Temporary to keep the order diff --git a/XIVSlothCombo/Combos/PvE/AST.cs b/XIVSlothCombo/Combos/PvE/AST.cs index cb6d69508..dedd0994c 100644 --- a/XIVSlothCombo/Combos/PvE/AST.cs +++ b/XIVSlothCombo/Combos/PvE/AST.cs @@ -135,27 +135,39 @@ public static UserInt AST_EssentialDignity = new("ASTCustomEssentialDignity", 50), AST_Spire = new("AST_Spire", 80), AST_Ewer = new("AST_Ewer", 80), + AST_Arrow = new("AST_Arrow", 80), + AST_Bole = new("AST_Bole", 80), AST_ST_SimpleHeals_Esuna = new("AST_ST_SimpleHeals_Esuna", 100), AST_DPS_AltMode = new("AST_DPS_AltMode"), AST_DPS_DivinationOption = new("AST_DPS_DivinationOption"), + AST_AOE_DivinationOption = new("AST_AOE_DivinationOption"), AST_DPS_LightSpeedOption = new("AST_DPS_LightSpeedOption"), + AST_AOE_LightSpeedOption = new("AST_AOE_LightSpeedOption"), AST_DPS_CombustOption = new("AST_DPS_CombustOption"), AST_QuickTarget_Override = new("AST_QuickTarget_Override"), - AST_ST_DPS_Play_SpeedSetting = new("AST_ST_DPS_Play_SpeedSetting"); + AST_ST_DPS_Play_SpeedSetting = new("AST_ST_DPS_Play_SpeedSetting"); public static UserBool AST_QuickTarget_SkipDamageDown = new("AST_QuickTarget_SkipDamageDown"), AST_QuickTarget_SkipRezWeakness = new("AST_QuickTarget_SkipRezWeakness"), AST_ST_SimpleHeals_Adv = new("AST_ST_SimpleHeals_Adv"), AST_ST_SimpleHeals_UIMouseOver = new("AST_ST_SimpleHeals_UIMouseOver"), + AST_ST_SimpleHeals_WeaveDignity = new("AST_ST_SimpleHeals_WeaveDignity"), + AST_ST_SimpleHeals_WeaveIntersection = new("AST_ST_SimpleHeals_WeaveIntersection"), + AST_ST_SimpleHeals_WeaveEwer = new("AST_ST_SimpleHeals_WeaveEwer"), + AST_ST_SimpleHeals_WeaveSpire = new("AST_ST_SimpleHeals_WeaveSpire"), + AST_ST_SimpleHeals_WeaveArrow = new("AST_ST_SimpleHeals_WeaveArrow"), + AST_ST_SimpleHeals_WeaveBole = new("AST_ST_SimpleHeals_WeaveBole"), + AST_ST_SimpleHeals_WeaveExalt = new("AST_ST_SimpleHeals_WeaveExalt"), AST_AoE_SimpleHeals_WeaveLady = new("AST_AoE_SimpleHeals_WeaveLady"), AST_AoE_SimpleHeals_Opposition = new("AST_AoE_SimpleHeals_Opposition"), AST_AoE_SimpleHeals_Horoscope = new("AST_AoE_SimpleHeals_Horoscope"), AST_ST_DPS_OverwriteCards = new("AST_ST_DPS_OverwriteCards"), + AST_AOE_DPS_OverwriteCards = new("AST_AOE_DPS_OverwriteCards"), AST_ST_DPS_CombustUptime_Adv = new("AST_ST_DPS_CombustUptime_Adv"); public static UserFloat AST_ST_DPS_CombustUptime_Threshold = new("AST_ST_DPS_CombustUptime_Threshold"); } - + internal class AST_Benefic : CustomCombo { @@ -176,6 +188,8 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim internal class AST_ST_DPS : CustomCombo { protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.AST_ST_DPS; + internal static int MaleficCount => ActionWatching.CombatActions.Count(x => x == OriginalHook(Malefic)); + internal static int CombustCount => ActionWatching.CombatActions.Count(x => x == OriginalHook(Combust)); protected override uint Invoke(uint actionID, uint lastComboMove, float comboTime, byte level) { @@ -187,14 +201,25 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim { spellsSinceDraw = 1; } - + bool AlternateMode = GetIntOptionAsBool(Config.AST_DPS_AltMode); //(0 or 1 radio values) + bool inOpener = IsEnabled(CustomComboPreset.AST_ST_DPS_Opener) && MaleficCount < 6; + + // Out of combat Card Draw if (((!AlternateMode && MaleficList.Contains(actionID)) || - (AlternateMode && CombustList.ContainsKey(actionID)) || - (IsEnabled(CustomComboPreset.AST_AoE_DPS) && GravityList.Contains(actionID))) && - InCombat()) - { + (AlternateMode && CombustList.ContainsKey(actionID)) && + !InCombat())) + + if (IsEnabled(CustomComboPreset.AST_DPS_AutoDraw) && + ActionReady(OriginalHook(AstralDraw)) && (Gauge.DrawnCards.All(x => x is CardType.NONE) || (DrawnCard == CardType.NONE && Config.AST_ST_DPS_OverwriteCards))) + return OriginalHook(AstralDraw); + //In combat + if (((!AlternateMode && MaleficList.Contains(actionID)) || + (AlternateMode && CombustList.ContainsKey(actionID))) && + InCombat()) + { + //Variant stuff if (IsEnabled(CustomComboPreset.AST_Variant_Rampart) && IsEnabled(Variant.VariantRampart) && IsOffCooldown(Variant.VariantRampart) && @@ -205,10 +230,65 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim if (IsEnabled(CustomComboPreset.AST_Variant_SpiritDart) && IsEnabled(Variant.VariantSpiritDart) && (sustainedDamage is null || sustainedDamage?.RemainingTime <= 3) && - CanSpellWeave(actionID) && - IsEnabled(CustomComboPreset.AST_AoE_DPS) && GravityList.Contains(actionID)) + CanSpellWeave(actionID)) return Variant.VariantSpiritDart; + //Opener + if (inOpener) + { + if (MaleficCount == 0) + return OriginalHook(Malefic); + + if (MaleficCount == 1 && CombustCount == 0) + return OriginalHook(Combust); + + if (MaleficCount == 1 && (CombustCount == 1) && ActionReady(Lightspeed) && CanDelayedWeave(actionID)) + return OriginalHook(Lightspeed); + + if (MaleficCount == 3 && CanWeave(actionID)) + { + if (IsEnabled(CustomComboPreset.AST_DPS_Divination) && + ActionReady(Divination) && + !HasEffectAny(Buffs.Divination) && //Overwrite protection + GetTargetHPPercent() > Config.AST_DPS_DivinationOption && + CanWeave(actionID)) + return Divination; + + if (IsEnabled(CustomComboPreset.AST_DPS_AutoPlay) && + ActionReady(Play1) && + Gauge.DrawnCards[0] is not CardType.NONE) + return OriginalHook(Play1); + } + + if (MaleficCount == 4 && CanWeave(actionID)) + { + if (ActionReady(OriginalHook(MinorArcana)) && + IsEnabled(CustomComboPreset.AST_DPS_LazyLord) && Gauge.DrawnCrownCard is CardType.LORD && + HasBattleTarget()) + return OriginalHook(MinorArcana); + + if (IsEnabled(CustomComboPreset.AST_DPS_AutoDraw) && Gauge.DrawnCrownCard is not CardType.LORD && CanDelayedWeave(actionID)) + return OriginalHook(AstralDraw); + } + if (MaleficCount == 5 && CanWeave(actionID)) + { + if (IsEnabled(CustomComboPreset.AST_DPS_AutoPlay) && + ActionReady(Play1) && + Gauge.DrawnCards[0] is not CardType.NONE) + return OriginalHook(Play1); + + if (IsEnabled(CustomComboPreset.AST_DPS_Oracle) && + HasEffect(Buffs.Divining) && + CanSpellWeave(actionID)) + return Oracle; + } + + if (MaleficCount > 0) + return OriginalHook(Malefic); + } + + //End opener + if (IsEnabled(CustomComboPreset.AST_DPS_LightSpeed) && ActionReady(Lightspeed) && GetTargetHPPercent() > Config.AST_DPS_LightSpeedOption && @@ -288,7 +368,94 @@ Gauge.DrawnCards[0] is not CardType.NONE && return actionID; } } + internal class AST_AOE_DPS : CustomCombo + { + protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.AST_ST_DPS; + protected override uint Invoke(uint actionID, uint lastComboMove, float comboTime, byte level) + { + int spellsSinceDraw = ActionWatching.CombatActions.Any(x => x == OriginalHook(AstralDraw)) ? ActionWatching.HowManyTimesUsedAfterAnotherAction(OriginalHook(Malefic), OriginalHook(AstralDraw)) + + ActionWatching.HowManyTimesUsedAfterAnotherAction(OriginalHook(Combust), OriginalHook(AstralDraw)) + + ActionWatching.HowManyTimesUsedAfterAnotherAction(OriginalHook(Gravity), OriginalHook(AstralDraw)) : Config.AST_ST_DPS_Play_SpeedSetting; + + if (spellsSinceDraw == 0 && DrawnCard != CardType.NONE) + { + spellsSinceDraw = 1; + } + + bool AlternateMode = GetIntOptionAsBool(Config.AST_DPS_AltMode); //(0 or 1 radio values) + + + + if (IsEnabled(CustomComboPreset.AST_AOE_DPS) && GravityList.Contains(actionID) && + InCombat()) + { + //Variant stuff + if (IsEnabled(CustomComboPreset.AST_Variant_Rampart) && + IsEnabled(Variant.VariantRampart) && + IsOffCooldown(Variant.VariantRampart) && + CanSpellWeave(actionID)) + return Variant.VariantRampart; + + Status? sustainedDamage = FindTargetEffect(Variant.Debuffs.SustainedDamage); + if (IsEnabled(CustomComboPreset.AST_Variant_SpiritDart) && + IsEnabled(Variant.VariantSpiritDart) && + (sustainedDamage is null || sustainedDamage?.RemainingTime <= 3) && + CanSpellWeave(actionID) && + IsEnabled(CustomComboPreset.AST_AOE_DPS) && GravityList.Contains(actionID)) + return Variant.VariantSpiritDart; + + if (IsEnabled(CustomComboPreset.AST_AOE_LightSpeed) && + ActionReady(Lightspeed) && + GetTargetHPPercent() > Config.AST_AOE_LightSpeedOption && + IsMoving && + !HasEffect(Buffs.Lightspeed)) + return Lightspeed; + + if (IsEnabled(CustomComboPreset.AST_AOE_Lucid) && + ActionReady(All.LucidDreaming) && + LocalPlayer.CurrentMp <= Config.AST_LucidDreaming && + CanSpellWeave(actionID)) + return All.LucidDreaming; + + //Play Card + if (IsEnabled(CustomComboPreset.AST_AOE_AutoPlay) && + ActionReady(Play1) && + Gauge.DrawnCards[0] is not CardType.NONE && + CanSpellWeave(actionID)) + return OriginalHook(Play1); + + //Card Draw + if (IsEnabled(CustomComboPreset.AST_AOE_AutoDraw) && + ActionReady(OriginalHook(AstralDraw)) && + (Gauge.DrawnCards.All(x => x is CardType.NONE) || (DrawnCard == CardType.NONE && Config.AST_AOE_DPS_OverwriteCards)) && + CanDelayedWeave(actionID)) + return OriginalHook(AstralDraw); + + //Divination + if (IsEnabled(CustomComboPreset.AST_AOE_Divination) && + ActionReady(Divination) && + !HasEffectAny(Buffs.Divination) && //Overwrite protection + GetTargetHPPercent() > Config.AST_AOE_DivinationOption && + CanDelayedWeave(actionID) && + ActionWatching.NumberOfGcdsUsed >= 3) + return Divination; + if (IsEnabled(CustomComboPreset.AST_AOE_Oracle) && + HasEffect(Buffs.Divining) && + CanSpellWeave(actionID)) + return Oracle; + + //Minor Arcana / Lord of Crowns + if (ActionReady(OriginalHook(MinorArcana)) && + IsEnabled(CustomComboPreset.AST_AOE_LazyLord) && Gauge.DrawnCrownCard is CardType.LORD && + HasBattleTarget() && + CanDelayedWeave(actionID)) + return OriginalHook(MinorArcana); + + } + return actionID; + } + } internal class AST_AoE_SimpleHeals_AspectedHelios : CustomCombo { protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.AST_AoE_SimpleHeals_AspectedHelios; @@ -353,6 +520,14 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim { if (actionID is Benefic2) { + var canDignity = (Config.AST_ST_SimpleHeals_WeaveDignity && CanSpellWeave(actionID)) || !Config.AST_ST_SimpleHeals_WeaveDignity; + var canIntersect = (Config.AST_ST_SimpleHeals_WeaveIntersection && CanSpellWeave(actionID)) || !Config.AST_ST_SimpleHeals_WeaveIntersection; + var canExalt = (Config.AST_ST_SimpleHeals_WeaveExalt && CanSpellWeave(actionID)) || !Config.AST_ST_SimpleHeals_WeaveExalt; + var canEwer = (Config.AST_ST_SimpleHeals_WeaveEwer && CanSpellWeave(actionID)) || !Config.AST_ST_SimpleHeals_WeaveEwer; + var canSpire = (Config.AST_ST_SimpleHeals_WeaveSpire && CanSpellWeave(actionID)) || !Config.AST_ST_SimpleHeals_WeaveSpire; + var canBole = (Config.AST_ST_SimpleHeals_WeaveBole && CanSpellWeave(actionID)) || !Config.AST_ST_SimpleHeals_WeaveBole; + var canArrow = (Config.AST_ST_SimpleHeals_WeaveArrow && CanSpellWeave(actionID)) || !Config.AST_ST_SimpleHeals_WeaveArrow; + //Grab our target (Soft->Hard->Self) IGameObject? healTarget = GetHealTarget(Config.AST_ST_SimpleHeals_Adv && Config.AST_ST_SimpleHeals_UIMouseOver); @@ -361,31 +536,44 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim HasCleansableDebuff(healTarget)) return All.Esuna; - if ((IsEnabled(CustomComboPreset.AST_ST_SimpleHeals_Spire) && + if (IsEnabled(CustomComboPreset.AST_ST_SimpleHeals_Spire) && Gauge.DrawnCards[2] == CardType.SPIRE && GetTargetHPPercent(healTarget) <= Config.AST_Spire && - CanSpellWeave(actionID)) - || - (IsEnabled(CustomComboPreset.AST_ST_SimpleHeals_Ewer) && + canSpire) + return OriginalHook(Play3); + + if (IsEnabled(CustomComboPreset.AST_ST_SimpleHeals_Ewer) && Gauge.DrawnCards[2] == CardType.EWER && GetTargetHPPercent(healTarget) <= Config.AST_Ewer && - CanSpellWeave(actionID))) + canEwer) return OriginalHook(Play3); + if (IsEnabled(CustomComboPreset.AST_ST_SimpleHeals_Arrow) && + Gauge.DrawnCards[1] == CardType.ARROW && + GetTargetHPPercent(healTarget) <= Config.AST_Arrow && + canArrow) + return OriginalHook(Play2); + + if (IsEnabled(CustomComboPreset.AST_ST_SimpleHeals_Bole) && + Gauge.DrawnCards[1] == CardType.BOLE && + GetTargetHPPercent(healTarget) <= Config.AST_Bole && + canBole) + return OriginalHook(Play2); + if (IsEnabled(CustomComboPreset.AST_ST_SimpleHeals_EssentialDignity) && ActionReady(EssentialDignity) && GetTargetHPPercent(healTarget) <= Config.AST_EssentialDignity && - CanSpellWeave(actionID)) + canDignity) return EssentialDignity; if (IsEnabled(CustomComboPreset.AST_ST_SimpleHeals_Exaltation) && ActionReady(Exaltation) && - CanSpellWeave(actionID)) + canExalt) return Exaltation; if (IsEnabled(CustomComboPreset.AST_ST_SimpleHeals_CelestialIntersection) && ActionReady(CelestialIntersection) && - CanSpellWeave(actionID) && + canIntersect && !(healTarget as IBattleChara)!.HasShield()) return CelestialIntersection; diff --git a/XIVSlothCombo/Combos/PvE/SCH.cs b/XIVSlothCombo/Combos/PvE/SCH.cs index 4275613b8..2e5bec2d1 100644 --- a/XIVSlothCombo/Combos/PvE/SCH.cs +++ b/XIVSlothCombo/Combos/PvE/SCH.cs @@ -5,6 +5,8 @@ using XIVSlothCombo.Combos.PvE.Content; using XIVSlothCombo.CustomComboNS; using XIVSlothCombo.CustomComboNS.Functions; +using XIVSlothCombo.Data; +using System.Linq; using XIVSlothCombo.Extensions; namespace XIVSlothCombo.Combos.PvE @@ -312,6 +314,7 @@ internal class SCH_DPS : CustomCombo protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.SCH_DPS; internal OpenerState openerState = OpenerState.PreOpener; + internal static int BroilCount => ActionWatching.CombatActions.Count(x => x == OriginalHook(Broil)); protected override uint Invoke(uint actionID, uint lastComboMove, float comboTime, byte level) { @@ -334,7 +337,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim { openerState = OpenerState.PreOpener; } - else if (Gauge.HasAetherflow()) + else if (BroilCount > 1) { openerState = OpenerState.PostOpener; } @@ -388,7 +391,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim { // If CS is available and usable, or if the Impact Buff is on Player if (ActionReady(ChainStratagem) && - !TargetHasEffectAny(Debuffs.ChainStratagem) && + !TargetHasEffectAny(Debuffs.ChainStratagem) && (openerState == OpenerState.PostOpener) && GetTargetHPPercent() > Config.SCH_ST_DPS_ChainStratagemOption && InCombat() && CanSpellWeave(actionID)) diff --git a/XIVSlothCombo/Combos/PvE/SGE.cs b/XIVSlothCombo/Combos/PvE/SGE.cs index e71e99c8b..de4453d39 100644 --- a/XIVSlothCombo/Combos/PvE/SGE.cs +++ b/XIVSlothCombo/Combos/PvE/SGE.cs @@ -188,9 +188,9 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim */ internal class SGE_DruoTauro : CustomCombo { - protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.SGE_DruoTauro; + protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.SGE_TauroDruo; protected override uint Invoke(uint actionID, uint lastComboMove, float comboTime, byte level) - => actionID is Druochole && ActionReady(Taurochole) ? Taurochole : actionID; + => actionID is Taurochole && IsOnCooldown(Taurochole) ? Druochole : actionID; } /* diff --git a/XIVSlothCombo/Window/Functions/UserConfig.cs b/XIVSlothCombo/Window/Functions/UserConfig.cs index 7ff5af78a..6d45fb002 100644 --- a/XIVSlothCombo/Window/Functions/UserConfig.cs +++ b/XIVSlothCombo/Window/Functions/UserConfig.cs @@ -1228,6 +1228,21 @@ internal static void Draw(CustomComboPreset preset, bool enabled) if (preset is CustomComboPreset.AST_DPS_LightSpeed) UserConfig.DrawSliderInt(0, 100, AST.Config.AST_DPS_LightSpeedOption, "Stop using at Enemy HP %. Set to Zero to disable this check."); + //AOE added + if (preset is CustomComboPreset.AST_AOE_Lucid) + UserConfig.DrawSliderInt(4000, 9500, AST.Config.AST_LucidDreaming, "Set value for your MP to be at or under for this feature to work", 150, SliderIncrements.Hundreds); + + if (preset is CustomComboPreset.AST_AOE_Divination) + UserConfig.DrawSliderInt(0, 100, AST.Config.AST_AOE_DivinationOption, "Stop using at Enemy HP %. Set to Zero to disable this check."); + + if (preset is CustomComboPreset.AST_AOE_LightSpeed) + UserConfig.DrawSliderInt(0, 100, AST.Config.AST_AOE_LightSpeedOption, "Stop using at Enemy HP %. Set to Zero to disable this check."); + + if (preset is CustomComboPreset.AST_AOE_AutoDraw) + { + UserConfig.DrawAdditionalBoolChoice(AST.Config.AST_AOE_DPS_OverwriteCards, "Overwrite Non-DPS Cards", "Will draw even if you have healing cards remaining."); + } + //end aoe added if (preset is CustomComboPreset.AST_ST_SimpleHeals) { @@ -1244,18 +1259,39 @@ internal static void Draw(CustomComboPreset preset, bool enabled) } if (preset is CustomComboPreset.AST_ST_SimpleHeals_EssentialDignity) + { UserConfig.DrawSliderInt(0, 100, AST.Config.AST_EssentialDignity, "Set percentage value"); + UserConfig.DrawAdditionalBoolChoice(AST.Config.AST_ST_SimpleHeals_WeaveDignity, "Only Weave", "Will only weave this action."); + } + if (preset is CustomComboPreset.AST_ST_SimpleHeals_CelestialIntersection) + UserConfig.DrawAdditionalBoolChoice(AST.Config.AST_ST_SimpleHeals_WeaveIntersection, "Only Weave", "Will only weave this action."); + + if (preset is CustomComboPreset.AST_ST_SimpleHeals_Exaltation) + UserConfig.DrawAdditionalBoolChoice(AST.Config.AST_ST_SimpleHeals_WeaveExalt, "Only Weave", "Will only weave this action."); if (preset is CustomComboPreset.AST_ST_SimpleHeals_Spire) + { UserConfig.DrawSliderInt(0, 100, AST.Config.AST_Spire, "Set percentage value"); - + UserConfig.DrawAdditionalBoolChoice(AST.Config.AST_ST_SimpleHeals_WeaveSpire, "Only Weave", "Will only weave this action."); + } if (preset is CustomComboPreset.AST_ST_SimpleHeals_Ewer) + { UserConfig.DrawSliderInt(0, 100, AST.Config.AST_Ewer, "Set percentage value"); - + UserConfig.DrawAdditionalBoolChoice(AST.Config.AST_ST_SimpleHeals_WeaveEwer, "Only Weave", "Will only weave this action."); + } + if (preset is CustomComboPreset.AST_ST_SimpleHeals_Bole) + { + UserConfig.DrawSliderInt(0, 100, AST.Config.AST_Bole, "Set percentage value"); + UserConfig.DrawAdditionalBoolChoice(AST.Config.AST_ST_SimpleHeals_WeaveBole, "Only Weave", "Will only weave this action."); + } + if (preset is CustomComboPreset.AST_ST_SimpleHeals_Arrow) + { + UserConfig.DrawSliderInt(0, 100, AST.Config.AST_Arrow, "Set percentage value"); + UserConfig.DrawAdditionalBoolChoice(AST.Config.AST_ST_SimpleHeals_WeaveArrow, "Only Weave", "Will only weave this action."); + } if (preset is CustomComboPreset.AST_ST_SimpleHeals_Esuna) UserConfig.DrawSliderInt(0, 100, AST.Config.AST_ST_SimpleHeals_Esuna, "Stop using when below HP %. Set to Zero to disable this check"); - if (preset is CustomComboPreset.AST_AoE_SimpleHeals_LazyLady) UserConfig.DrawAdditionalBoolChoice(AST.Config.AST_AoE_SimpleHeals_WeaveLady, "Only Weave", "Will only weave this action.");