diff --git a/XIVSlothCombo/Combos/CustomComboPreset.cs b/XIVSlothCombo/Combos/CustomComboPreset.cs index ec7c793b4..2a5f6c972 100644 --- a/XIVSlothCombo/Combos/CustomComboPreset.cs +++ b/XIVSlothCombo/Combos/CustomComboPreset.cs @@ -3345,7 +3345,7 @@ New features should be added to the appropriate sections. SMN_Advanced_Combo = 17000, [ParentCombo(SMN_Advanced_Combo)] - [CustomComboInfo("Demi Attacks Combo Option", "Adds Deathflare, Ahk Morn and Revelation to the single target and AoE combos.", SMN.JobID, 11, "", "")] + [CustomComboInfo("Demi Attacks Combo Option", "Adds Demi Summon oGCDs to the single target and AoE combos.", SMN.JobID, 11, "", "")] SMN_Advanced_Combo_DemiSummons_Attacks = 17002, [ParentCombo(SMN_Advanced_Combo)] @@ -3382,11 +3382,15 @@ New features should be added to the appropriate sections. [ParentCombo(SMN_Advanced_Combo)] [CustomComboInfo("Searing Light Combo Option", "Adds Searing Light to the single target and AoE combos.\nWill be used on cooldown.", SMN.JobID, 9, "", "")] - SMN_SearingLight = 17018, + SMN_SearingLight = 17017, [ParentCombo(SMN_SearingLight)] [CustomComboInfo("Searing Light Burst Option", "Casts Searing Light only during Demi phases.\nReflects Demi choice selected under 'Pooled oGCDs Option'.\nNot recommended for SpS Builds.", SMN.JobID, 0, "")] - SMN_SearingLight_Burst = 170181, // Genesis, why must you be like this -K + SMN_SearingLight_Burst = 17018, + + [ParentCombo(SMN_SearingLight)] + [CustomComboInfo("Searing Flash Combo Option", "Adds Searing Flash to the single target and AoE combos.", SMN.JobID, 1, "", "")] + SMN_SearingFlash = 17019, [ParentCombo(SMN_Advanced_Combo)] [CustomComboInfo("Demi Summons Combo Option", "Adds Demi summons to the single target and AoE combos.", SMN.JobID, 10, "", "")] @@ -3400,17 +3404,21 @@ New features should be added to the appropriate sections. SMN_DemiAbilities = 17024, [ParentCombo(SMN_Advanced_Combo_EDFester)] - [CustomComboInfo("Pooled oGCDs Option", "Pools damage oGCDs for use inside the selected Demi phase while under the Searing Light buff.", SMN.JobID, 1, "", "")] + [CustomComboInfo("Pooled oGCDs Option", "Pools damage oGCDs for use inside the selected Demi phase while under the Searing Light buff.\nBahamut Burst becomes Solar Bahamut Burst at Lv100.", SMN.JobID, 1, "", "")] SMN_DemiEgiMenu_oGCDPooling = 17025, [ConflictingCombos(ALL_Caster_Raise)] [CustomComboInfo("Alternative Raise Feature", "Changes Swiftcast to Raise when on cooldown.", SMN.JobID, 8, "", "")] SMN_Raise = 17027, - [ParentCombo(SMN_Advanced_Combo)] + [ParentCombo(SMN_Advanced_Combo_DemiSummons_Attacks)] [CustomComboInfo("Rekindle Combo Option", "Adds Rekindle to the single target and AoE combos.", SMN.JobID, 13, "", "")] SMN_Advanced_Combo_DemiSummons_Rekindle = 17028, + [ParentCombo(SMN_Advanced_Combo_DemiSummons_Attacks)] + [CustomComboInfo("Lux Solaris Combo Option", "Adds Lux Solaris to the single target and AoE combos.", SMN.JobID, 14, "", "")] + SMN_Advanced_Combo_DemiSummons_LuxSolaris = 17029, + [ReplaceSkill(SMN.Ruin4)] [CustomComboInfo("Ruin III Mobility Feature", "Puts Ruin III on Ruin IV when you don't have Further Ruin.", SMN.JobID, 9, "", "")] SMN_RuinMobility = 17030, diff --git a/XIVSlothCombo/Combos/PvE/SMN.cs b/XIVSlothCombo/Combos/PvE/SMN.cs index 951338d4b..a85dc0990 100644 --- a/XIVSlothCombo/Combos/PvE/SMN.cs +++ b/XIVSlothCombo/Combos/PvE/SMN.cs @@ -71,6 +71,7 @@ public const uint // Demi summons SummonBahamut = 7427, SummonPhoenix = 25831, + SummonSolarBahamut = 36992, // Demi summon abilities AstralImpulse = 25820, // Single target Bahamut GCD @@ -82,6 +83,12 @@ public const uint BrandOfPurgatory = 16515, // AoE Phoenix GCD Rekindle = 25830, // Healing oGCD Phoenix EnkindlePhoenix = 16516, + + UmbralImpulse = 36994, //Single target Solar Bahamut GCD + UmbralFlare = 36995, //AoE Solar Bahamut GCD + Sunflare = 36996, //Damage oGCD Solar Bahamut + EnkindleSolarBahamut = 36998, + LuxSolaris = 36997, //Healing oGCD Solar Bahamut // Shared summon abilities AstralFlow = 25822, @@ -103,6 +110,7 @@ public const uint Fester = 181, EnergySiphon = 16510, Painflare = 3578, + SearingFlash = 36991, // Revive Resurrection = 173, @@ -121,7 +129,9 @@ public const ushort TitansFavor = 2853, IfritsFavor = 2724, EverlastingFlight = 16517, - SearingLight = 2703; + SearingLight = 2703, + RubysGlimmer = 3873, + RefulgentLux = 3874; } public static class Config @@ -229,6 +239,12 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim var gauge = GetJobGauge(); var STCombo = actionID is Ruin or Ruin2; var AoECombo = actionID is Outburst or Tridisaster; + var IsGarudaAttuned = OriginalHook(Gemshine) is EmeralRuin1 or EmeralRuin2 or EmeralRuin3 or EmeraldRite; + var IsTitanAttuned = OriginalHook(Gemshine) is TopazRuin1 or TopazRuin2 or TopazRuin3 or TopazRite; + var IsIfritAttuned = OriginalHook(Gemshine) is RubyRuin1 or RubyRuin2 or RubyRuin3 or RubyRite; + var IsBahamutReady = OriginalHook(Aethercharge) is SummonBahamut; + var IsPhoenixReady = OriginalHook(Aethercharge) is SummonPhoenix; + var IsSolarBahamutReady = OriginalHook(Aethercharge) is SummonSolarBahamut; if (actionID is Ruin or Ruin2 or Outburst or Tridisaster) { @@ -243,7 +259,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim if (CanSpellWeave(actionID)) { - if (IsOffCooldown(SearingLight) && LevelChecked(SearingLight) && OriginalHook(Ruin) == AstralImpulse) + if (IsOffCooldown(SearingLight) && LevelChecked(SearingLight) && ((!LevelChecked(SummonSolarBahamut) && OriginalHook(Ruin) is AstralImpulse) || OriginalHook(Ruin) is UmbralImpulse)) return SearingLight; if (!gauge.HasAetherflowStacks && IsOffCooldown(EnergyDrain)) @@ -255,16 +271,22 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim return EnergySiphon; } - if (OriginalHook(Ruin) is AstralImpulse or FountainOfFire) + if (HasEffect(Buffs.RubysGlimmer) && LevelChecked(SearingFlash)) + return SearingFlash; + + if (OriginalHook(Ruin) is AstralImpulse or UmbralImpulse or FountainOfFire) { if (IsOffCooldown(OriginalHook(EnkindleBahamut)) && LevelChecked(SummonBahamut)) return OriginalHook(EnkindleBahamut); - if (IsOffCooldown(Deathflare) && LevelChecked(Deathflare) && OriginalHook(Ruin) is AstralImpulse) + if (IsOffCooldown(Deathflare) && LevelChecked(Deathflare) && OriginalHook(Ruin) is AstralImpulse or UmbralImpulse) return OriginalHook(AstralFlow); if (IsOffCooldown(Rekindle) && OriginalHook(Ruin) is FountainOfFire) return OriginalHook(AstralFlow); + + if (IsOffCooldown(LuxSolaris) && HasEffect(Buffs.RefulgentLux)) + return OriginalHook(LuxSolaris); } if (gauge.HasAetherflowStacks && CanSpellWeave(actionID)) @@ -272,7 +294,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim if (!LevelChecked(SearingLight)) { if (STCombo) - return Fester; + return OriginalHook(Fester); if (AoECombo && LevelChecked(Painflare)) return Painflare; @@ -281,7 +303,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim if (HasEffect(Buffs.SearingLight)) { if (STCombo) - return Fester; + return OriginalHook(Fester); if (AoECombo && LevelChecked(Painflare)) return Painflare; @@ -302,18 +324,18 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim { if (LevelChecked(Slipstream) && HasEffect(Buffs.GarudasFavor)) { - if (CanSpellWeave(actionID) && gauge.IsGarudaAttuned && IsOffCooldown(All.Swiftcast)) + if (CanSpellWeave(actionID) && IsGarudaAttuned && IsOffCooldown(All.Swiftcast)) return All.Swiftcast; if (HasEffect(Buffs.GarudasFavor) && HasEffect(All.Buffs.Swiftcast)) return OriginalHook(AstralFlow); } - if (gauge.IsIfritAttuned && gauge.Attunement >= 1 && IsOffCooldown(All.Swiftcast)) + if (IsIfritAttuned && gauge.Attunement >= 1 && IsOffCooldown(All.Swiftcast)) return All.Swiftcast; } - if (gauge.IsIfritAttuned && gauge.Attunement >= 1 && HasEffect(All.Buffs.Swiftcast) && lastComboMove is not CrimsonCyclone) + if (IsIfritAttuned && gauge.Attunement >= 1 && HasEffect(All.Buffs.Swiftcast) && lastComboMove is not CrimsonCyclone) { if (STCombo) return OriginalHook(Gemshine); @@ -324,13 +346,13 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim if ((HasEffect(Buffs.GarudasFavor) && gauge.Attunement is 0) || (HasEffect(Buffs.TitansFavor) && lastComboMove is TopazRite or TopazCata && CanSpellWeave(actionID)) || - (HasEffect(Buffs.IfritsFavor) && (IsMoving || gauge.Attunement is 0)) || lastComboMove == CrimsonCyclone) + (HasEffect(Buffs.IfritsFavor) && (IsMoving || gauge.Attunement is 0)) || (lastComboMove == CrimsonCyclone && InMeleeRange())) return OriginalHook(AstralFlow); - if (HasEffect(Buffs.FurtherRuin) && ((!HasEffect(All.Buffs.Swiftcast) && gauge.IsIfritAttuned && IsMoving) || (GetCooldownRemainingTime(OriginalHook(Aethercharge)) is < 2.5f and > 0))) + if (HasEffect(Buffs.FurtherRuin) && ((!HasEffect(All.Buffs.Swiftcast) && IsIfritAttuned && IsMoving) || (GetCooldownRemainingTime(OriginalHook(Aethercharge)) is < 2.5f and > 0))) return Ruin4; - if (gauge.IsGarudaAttuned || gauge.IsTitanAttuned || gauge.IsIfritAttuned) + if (IsGarudaAttuned || IsTitanAttuned || IsIfritAttuned) { if (STCombo) return OriginalHook(Gemshine); @@ -375,6 +397,12 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim var inOpener = CombatEngageDuration().TotalSeconds < 40; var STCombo = actionID is Ruin or Ruin2; var AoECombo = actionID is Outburst or Tridisaster; + var IsGarudaAttuned = OriginalHook(Gemshine) is EmeralRuin1 or EmeralRuin2 or EmeralRuin3 or EmeraldRite; + var IsTitanAttuned = OriginalHook(Gemshine) is TopazRuin1 or TopazRuin2 or TopazRuin3 or TopazRite; + var IsIfritAttuned = OriginalHook(Gemshine) is RubyRuin1 or RubyRuin2 or RubyRuin3 or RubyRite; + var IsBahamutReady = OriginalHook(Aethercharge) is SummonBahamut; + var IsPhoenixReady = OriginalHook(Aethercharge) is SummonPhoenix; + var IsSolarBahamutReady = OriginalHook(Aethercharge) is SummonSolarBahamut; if (WasLastAction(OriginalHook(Aethercharge))) DemiAttackCount = 0; // Resets counter @@ -385,7 +413,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim if (gauge.SummonTimerRemaining == 0 && !InCombat()) DemiAttackCount = 0; //CHECK_DEMIATTACK_USE - if (UsedDemiAttack == false && lastComboMove is AstralImpulse or FountainOfFire or AstralFlare or BrandOfPurgatory && DemiAttackCount is not 6 && GetCooldownRemainingTime(AstralImpulse) > 1) + if (UsedDemiAttack == false && lastComboMove is AstralImpulse or UmbralImpulse or FountainOfFire or AstralFlare or UmbralFlare or BrandOfPurgatory && DemiAttackCount is not 6 && GetCooldownRemainingTime(AstralImpulse) > 1) { UsedDemiAttack = true; // Registers that a Demi Attack was used and blocks further incrementation of DemiAttackCountCount DemiAttackCount++; // Increments DemiAttack counter @@ -412,21 +440,21 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim { if (IsEnabled(CustomComboPreset.SMN_SearingLight_Burst)) { - if ((SummonerBurstPhase is 0 or 1 && OriginalHook(Ruin) == AstralImpulse) || + if (SummonerBurstPhase is 0 or 1 && ((!LevelChecked(SummonSolarBahamut) && OriginalHook(Ruin) is AstralImpulse) || OriginalHook(Ruin) is UmbralImpulse) || (SummonerBurstPhase == 2 && OriginalHook(Ruin) == FountainOfFire) || - (SummonerBurstPhase == 3 && OriginalHook(Ruin) is AstralImpulse or FountainOfFire) || + (SummonerBurstPhase == 3 && OriginalHook(Ruin) is AstralImpulse or UmbralImpulse or FountainOfFire) || (SummonerBurstPhase == 4)) { if (STCombo || (AoECombo && IsNotEnabled(CustomComboPreset.SMN_SearingLight_STOnly))) return SearingLight; } } - else return SearingLight; } // Emergency priority Demi Nuke to prevent waste if you can't get demi attacks out to satisfy the slider check. - if (OriginalHook(Ruin) is AstralImpulse or FountainOfFire && GetCooldown(OriginalHook(Aethercharge)).CooldownElapsed >= 12.5) + if (OriginalHook(Ruin) is AstralImpulse or UmbralImpulse or FountainOfFire && + IsEnabled(CustomComboPreset.SMN_Advanced_Combo_DemiSummons_Attacks) && GetCooldown(OriginalHook(Aethercharge)).CooldownElapsed >= 12.5) { if (IsEnabled(CustomComboPreset.SMN_Advanced_Combo_DemiSummons_Attacks)) { @@ -435,12 +463,18 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim if (IsOffCooldown(Deathflare) && LevelChecked(Deathflare) && OriginalHook(Ruin) is AstralImpulse) return OriginalHook(AstralFlow); - } - // Demi Nuke 2: Electric Boogaloo - if (IsEnabled(CustomComboPreset.SMN_Advanced_Combo_DemiSummons_Rekindle)) - { - if (IsOffCooldown(Rekindle) && OriginalHook(Ruin) is FountainOfFire) + if (IsOffCooldown(OriginalHook(EnkindlePhoenix)) && LevelChecked(SummonPhoenix)) + return OriginalHook(EnkindlePhoenix); + + if (IsEnabled(CustomComboPreset.SMN_Advanced_Combo_DemiSummons_Rekindle)) + if (IsOffCooldown(Rekindle) && OriginalHook(Ruin) is FountainOfFire) + return OriginalHook(AstralFlow); + + if (IsOffCooldown(OriginalHook(EnkindleSolarBahamut)) && LevelChecked(SummonSolarBahamut)) + return OriginalHook(EnkindleSolarBahamut); + + if (IsOffCooldown(Sunflare) && LevelChecked(Sunflare) && OriginalHook(Ruin) is UmbralImpulse) return OriginalHook(AstralFlow); } } @@ -465,7 +499,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim (SummonerBurstPhase == 4 && !HasEffect(Buffs.TitansFavor))) { if (STCombo) - return Fester; + return OriginalHook(Fester); if (AoECombo && LevelChecked(Painflare) && IsNotEnabled(CustomComboPreset.SMN_DemiEgiMenu_oGCDPooling_Only)) return Painflare; @@ -473,10 +507,13 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim } } + if (IsEnabled(CustomComboPreset.SMN_SearingFlash) && HasEffect(Buffs.RubysGlimmer) && LevelChecked(SearingFlash)) + return SearingFlash; + // Demi Nuke - if (OriginalHook(Ruin) is AstralImpulse or FountainOfFire) + if (OriginalHook(Ruin) is AstralImpulse or UmbralImpulse or FountainOfFire) { - if (IsEnabled(CustomComboPreset.SMN_Advanced_Combo_DemiSummons_Attacks) && DemiAttackCount >= burstDelay) + if (IsEnabled(CustomComboPreset.SMN_Advanced_Combo_DemiSummons_Attacks) && IsBahamutReady && (!LevelChecked(SummonSolarBahamut) || DemiAttackCount >= burstDelay)) { if (IsOffCooldown(OriginalHook(EnkindleBahamut)) && LevelChecked(SummonBahamut)) return OriginalHook(EnkindleBahamut); @@ -486,10 +523,26 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim } // Demi Nuke 2: Electric Boogaloo - if (IsEnabled(CustomComboPreset.SMN_Advanced_Combo_DemiSummons_Rekindle)) + if (IsEnabled(CustomComboPreset.SMN_Advanced_Combo_DemiSummons_Attacks) && IsPhoenixReady) { - if (IsOffCooldown(Rekindle) && OriginalHook(Ruin) is FountainOfFire) + if (IsOffCooldown(OriginalHook(EnkindlePhoenix)) && LevelChecked(SummonPhoenix) && OriginalHook(Ruin) is FountainOfFire) + return OriginalHook(EnkindlePhoenix); + + if (IsOffCooldown(Rekindle) && IsEnabled(CustomComboPreset.SMN_Advanced_Combo_DemiSummons_Rekindle) && OriginalHook(Ruin) is FountainOfFire) + return OriginalHook(AstralFlow); + } + + // Demi Nuke 3: More Boogaloo + if (IsEnabled(CustomComboPreset.SMN_Advanced_Combo_DemiSummons_Attacks) && IsSolarBahamutReady && DemiAttackCount >= burstDelay) + { + if (IsOffCooldown(OriginalHook(EnkindleSolarBahamut)) && LevelChecked(SummonSolarBahamut)) + return OriginalHook(EnkindleSolarBahamut); + + if (IsOffCooldown(Sunflare) && LevelChecked(Sunflare) && OriginalHook(Ruin) is UmbralImpulse) return OriginalHook(AstralFlow); + + if (IsOffCooldown(LuxSolaris) && IsEnabled(CustomComboPreset.SMN_Advanced_Combo_DemiSummons_LuxSolaris) && HasEffect(Buffs.RefulgentLux)) + return OriginalHook(LuxSolaris); } } @@ -501,7 +554,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim if (IsNotEnabled(CustomComboPreset.SMN_DemiEgiMenu_oGCDPooling)) { if (STCombo) - return Fester; + return OriginalHook(Fester); if (AoECombo && LevelChecked(Painflare)) return Painflare; @@ -512,7 +565,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim if (!LevelChecked(SearingLight)) { if (STCombo) - return Fester; + return OriginalHook(Fester); if (AoECombo && LevelChecked(Painflare) && IsNotEnabled(CustomComboPreset.SMN_DemiEgiMenu_oGCDPooling_Only)) return Painflare; @@ -523,7 +576,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim (SummonerBurstPhase == 4 && !HasEffect(Buffs.TitansFavor))) { if (STCombo) - return Fester; + return OriginalHook(Fester); if (AoECombo && LevelChecked(Painflare) && IsNotEnabled(CustomComboPreset.SMN_DemiEgiMenu_oGCDPooling_Only)) return Painflare; @@ -540,16 +593,17 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim // Demi if (IsEnabled(CustomComboPreset.SMN_Advanced_Combo_DemiSummons)) { - if (InCombat() && gauge.SummonTimerRemaining == 0 && IsOffCooldown(OriginalHook(Aethercharge)) && - ((LevelChecked(Aethercharge) && !LevelChecked(SummonBahamut)) || // Pre-Bahamut Phase - (gauge.IsBahamutReady && LevelChecked(SummonBahamut)) || // Bahamut Phase - (gauge.IsPhoenixReady && LevelChecked(SummonPhoenix)))) // Phoenix Phase + if (gauge.SummonTimerRemaining == 0 && IsOffCooldown(OriginalHook(Aethercharge)) && + ((LevelChecked(Aethercharge) && !LevelChecked(SummonBahamut) && InCombat()) || // Pre-Bahamut Phase + (IsBahamutReady && LevelChecked(SummonBahamut)) || // Bahamut Phase + (IsPhoenixReady && LevelChecked(SummonPhoenix)) || // Phoenix Phase + (IsSolarBahamutReady && LevelChecked(SummonSolarBahamut)))) // Solar Bahamut Phase return OriginalHook(Aethercharge); } //Ruin4 in Egi Phases if (IsEnabled(CustomComboPreset.SMN_Advanced_Combo_Ruin4) && HasEffect(Buffs.FurtherRuin) && - ((!HasEffect(All.Buffs.Swiftcast) && IsMoving && ((HasEffect(Buffs.GarudasFavor) && !gauge.IsGarudaAttuned) || (gauge.IsIfritAttuned && lastComboMove is not CrimsonCyclone))) || + ((!HasEffect(All.Buffs.Swiftcast) && IsMoving && ((HasEffect(Buffs.GarudasFavor) && !IsGarudaAttuned) || (IsIfritAttuned && lastComboMove is not CrimsonCyclone))) || GetCooldownRemainingTime(OriginalHook(Aethercharge)) is < 2.5f and > 0)) return Ruin4; @@ -559,7 +613,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim // Swiftcast Garuda Feature if (swiftcastPhase is 0 or 1 && LevelChecked(Slipstream) && HasEffect(Buffs.GarudasFavor)) { - if (CanSpellWeave(actionID) && gauge.IsGarudaAttuned && IsOffCooldown(All.Swiftcast)) + if (CanSpellWeave(actionID) && IsGarudaAttuned && IsOffCooldown(All.Swiftcast)) { if (STCombo || (AoECombo && IsNotEnabled(CustomComboPreset.SMN_DemiEgiMenu_SwiftcastEgi_Only))) return All.Swiftcast; @@ -573,7 +627,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim // Swiftcast Ifrit Feature (Conditions to allow for SpS Ruins to still be under the effect of Swiftcast) if (swiftcastPhase == 2) { - if (IsOffCooldown(All.Swiftcast) && gauge.IsIfritAttuned && lastComboMove is not CrimsonCyclone) + if (IsOffCooldown(All.Swiftcast) && IsIfritAttuned && lastComboMove is not CrimsonCyclone) { if (!Config.SMN_ST_Egi_AstralFlow[1] || (Config.SMN_ST_Egi_AstralFlow[1] && gauge.Attunement >= 1)) { @@ -589,7 +643,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim // Swiftcast Garuda Feature if (LevelChecked(Slipstream) && HasEffect(Buffs.GarudasFavor)) { - if (CanSpellWeave(actionID) && gauge.IsGarudaAttuned && IsOffCooldown(All.Swiftcast)) + if (CanSpellWeave(actionID) && IsGarudaAttuned && IsOffCooldown(All.Swiftcast)) { if (STCombo || (AoECombo && IsNotEnabled(CustomComboPreset.SMN_DemiEgiMenu_SwiftcastEgi_Only))) return All.Swiftcast; @@ -601,7 +655,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim } // Swiftcast Ifrit Feature (Conditions to allow for SpS Ruins to still be under the effect of Swiftcast) - if (IsOffCooldown(All.Swiftcast) && gauge.IsIfritAttuned && lastComboMove is not CrimsonCyclone) + if (IsOffCooldown(All.Swiftcast) && IsIfritAttuned && lastComboMove is not CrimsonCyclone) { if (!Config.SMN_ST_Egi_AstralFlow[1] || (Config.SMN_ST_Egi_AstralFlow[1] && gauge.Attunement >= 1)) { @@ -614,7 +668,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim // Gemshine/Precious Brilliance priority casting if (IsEnabled(CustomComboPreset.SMN_Advanced_Combo_EgiSummons_Attacks) && - ((gauge.IsIfritAttuned && gauge.Attunement >= 1 && HasEffect(All.Buffs.Swiftcast) && lastComboMove is not CrimsonCyclone) || + ((IsIfritAttuned && gauge.Attunement >= 1 && HasEffect(All.Buffs.Swiftcast) && lastComboMove is not CrimsonCyclone) || (HasEffect(Buffs.GarudasFavor) && gauge.Attunement >= 1 && !HasEffect(All.Buffs.Swiftcast) && IsMoving))) { if (STCombo) @@ -626,12 +680,12 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim if ((Config.SMN_ST_Egi_AstralFlow[2] && HasEffect(Buffs.GarudasFavor) && (IsNotEnabled(CustomComboPreset.SMN_DemiEgiMenu_SwiftcastEgi) || swiftcastPhase == 2)) || // Garuda (Config.SMN_ST_Egi_AstralFlow[0] && HasEffect(Buffs.TitansFavor) && lastComboMove is TopazRite or TopazCata && CanSpellWeave(actionID)) || // Titan - (Config.SMN_ST_Egi_AstralFlow[1] && HasEffect(Buffs.IfritsFavor) && !Config.SMN_ST_CrimsonCycloneMelee && (IsMoving || gauge.Attunement == 0 || (lastComboMove is CrimsonCyclone && InMeleeRange()))) || + (Config.SMN_ST_Egi_AstralFlow[1] && (HasEffect(Buffs.IfritsFavor) && !Config.SMN_ST_CrimsonCycloneMelee && (IsMoving || gauge.Attunement == 0) || (lastComboMove is CrimsonCyclone && InMeleeRange()))) || (Config.SMN_ST_Egi_AstralFlow[1] && HasEffect(Buffs.IfritsFavor) && Config.SMN_ST_CrimsonCycloneMelee && InMeleeRange())) // Ifrit return OriginalHook(AstralFlow); // Gemshine/Precious Brilliance - if (IsEnabled(CustomComboPreset.SMN_Advanced_Combo_EgiSummons_Attacks) && (gauge.IsGarudaAttuned || gauge.IsTitanAttuned || gauge.IsIfritAttuned)) + if (IsEnabled(CustomComboPreset.SMN_Advanced_Combo_EgiSummons_Attacks) && (IsGarudaAttuned || IsTitanAttuned || IsIfritAttuned)) { if (STCombo) return OriginalHook(Gemshine); @@ -641,7 +695,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim } // Egi Order - if (IsEnabled(CustomComboPreset.SMN_DemiEgiMenu_EgiOrder) && gauge.SummonTimerRemaining == 0 && IsOnCooldown(SummonPhoenix) && IsOnCooldown(SummonBahamut)) + if (IsEnabled(CustomComboPreset.SMN_DemiEgiMenu_EgiOrder) && gauge.SummonTimerRemaining == 0) { if (gauge.IsIfritReady && !gauge.IsTitanReady && !gauge.IsGarudaReady && LevelChecked(SummonRuby)) return OriginalHook(SummonRuby); @@ -738,6 +792,9 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim if ((OriginalHook(AstralFlow) is Deathflare && IsOffCooldown(Deathflare)) || (OriginalHook(AstralFlow) is Rekindle && IsOffCooldown(Rekindle))) return OriginalHook(AstralFlow); + + if (OriginalHook(AstralFlow) is Sunflare && IsOffCooldown(Sunflare)) + return OriginalHook(Sunflare); } return actionID; diff --git a/XIVSlothCombo/Window/Functions/UserConfig.cs b/XIVSlothCombo/Window/Functions/UserConfig.cs index 7b24b2feb..6521013d6 100644 --- a/XIVSlothCombo/Window/Functions/UserConfig.cs +++ b/XIVSlothCombo/Window/Functions/UserConfig.cs @@ -2360,9 +2360,9 @@ internal static void Draw(CustomComboPreset preset, bool enabled) if (preset == CustomComboPreset.SMN_DemiEgiMenu_oGCDPooling) { - UserConfig.DrawHorizontalRadioButton(SMN.Config.SMN_BurstPhase, "Bahamut", "Bursts during Bahamut phase.", 1); + UserConfig.DrawHorizontalRadioButton(SMN.Config.SMN_BurstPhase, "Solar Bahamut/Bahamut", "Bursts during Bahamut phase.\nBahamut burst phase becomes Solar Bahamut at Lv100.", 1); UserConfig.DrawHorizontalRadioButton(SMN.Config.SMN_BurstPhase, "Phoenix", "Bursts during Phoenix phase.", 2); - UserConfig.DrawHorizontalRadioButton(SMN.Config.SMN_BurstPhase, "Bahamut or Phoenix", "Bursts during Bahamut or Phoenix phase (whichever comes first).", 3); + UserConfig.DrawHorizontalRadioButton(SMN.Config.SMN_BurstPhase, "Any Demi Phase", "Bursts during any Demi Summon phase.", 3); UserConfig.DrawHorizontalRadioButton(SMN.Config.SMN_BurstPhase, "Flexible (SpS) Option", "Bursts when Searing Light is ready, regardless of phase.", 4); } diff --git a/XIVSlothCombo/XIVSlothCombo.cs b/XIVSlothCombo/XIVSlothCombo.cs index a5da46adb..1cfc826b8 100644 --- a/XIVSlothCombo/XIVSlothCombo.cs +++ b/XIVSlothCombo/XIVSlothCombo.cs @@ -63,7 +63,7 @@ public sealed partial class XIVSlothCombo : IDalamudPlugin SAM.JobID, SCH.JobID, SGE.JobID, - SMN.JobID, + //SMN.JobID, //VPR.JobID, WAR.JobID, WHM.JobID