From 697f821d295739548cd7b37c48be42fb6a41231f Mon Sep 17 00:00:00 2001 From: IncognitoWater Date: Wed, 21 Aug 2024 14:15:52 +0200 Subject: [PATCH 1/2] Try modifying condition around hammer and added settings for not using comet/holy --- BasicRotations/Magical/ICWA_PCT_BETA.cs | 27 +++++++++++++++---------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/BasicRotations/Magical/ICWA_PCT_BETA.cs b/BasicRotations/Magical/ICWA_PCT_BETA.cs index 57fbd55..c16b0a8 100644 --- a/BasicRotations/Magical/ICWA_PCT_BETA.cs +++ b/BasicRotations/Magical/ICWA_PCT_BETA.cs @@ -15,6 +15,8 @@ public sealed class IcWaPctBeta : PictomancerRotation public MotifSwift MotifSwiftCast { get; set; } = MotifSwift.WeaponMotif; [Range(1, 5, ConfigUnitType.None, 1)] [RotationConfig(CombatType.PvE, Name = "Paint overcap protection. How many paint do you need to be at before using a paint?")] + public bool UseCapCometHoly { get; set; } = true; + [RotationConfig(CombatType.PvE, Name = "Use the paint overcap protection or ( will still use comet while moving if the setup is on)")] public int HolyCometMax { get; set; } = 5; public enum MotifSwift : byte { @@ -129,7 +131,11 @@ protected override bool DefenseAreaAbility(IAction nextGCD, out IAction? act) #region oGCD Logic protected override bool AttackAbility(IAction nextGCD, out IAction? act) { - bool burstTimingChecker = !ScenicMusePvE.Cooldown.WillHaveOneCharge(32) || Player.HasStatus(true, StatusID.StarryMuse); + bool burstTimingCheckerStriking = !ScenicMusePvE.Cooldown.WillHaveOneCharge(10) || Player.HasStatus(true, StatusID.StarryMuse); + if (CombatTime < 5) + { + if (StrikingMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && WeaponMotifDrawn) return true; + } if (SubtractivePalettePvE.CanUse(out act) && !Player.HasStatus(true, StatusID.SubtractivePalette)) return true; if (Player.HasStatus(true, StatusID.StarryMuse)) { @@ -146,7 +152,7 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) } if (RetributionOfTheMadeenPvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true)) return true; if (MogOfTheAgesPvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true)) return true; - if (StrikingMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && burstTimingChecker) return true; + if (StrikingMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && burstTimingCheckerStriking) return true; if (PomMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && LivingMusePvE.AdjustedID == PomMusePvE.ID) return true; if (WingedMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && LivingMusePvE.AdjustedID == WingedMusePvE.ID) return true; if (ClawedMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && LivingMusePvE.AdjustedID == ClawedMusePvE.ID) return true; @@ -157,11 +163,10 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) #region GCD Logic protected override bool GeneralGCD(out IAction? act) { - bool burstTimingChecker = !ScenicMusePvE.Cooldown.WillHaveOneCharge(32) || Player.HasStatus(true, StatusID.StarryMuse); + bool burstTimingChecker = !ScenicMusePvE.Cooldown.WillHaveOneCharge(60) && SteelMusePvE.Cooldown.CurrentCharges != 1 || Player.HasStatus(true, StatusID.StarryMuse); //Opener requirements if (CombatTime < 5) { - if (StrikingMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && WeaponMotifDrawn) return true; if (HolyInWhitePvE.CanUse(out act, skipCastingCheck: true, skipAoeCheck: true) && Paint > 0) return true; if (!CreatureMotifDrawn) { @@ -178,8 +183,8 @@ protected override bool GeneralGCD(out IAction? act) if (CometInBlackPvE.CanUse(out act, skipCastingCheck: true, skipAoeCheck: true) && Paint > 0) return true; } if (StarPrismPvE.CanUse(out act, skipAoeCheck: true) && Player.HasStatus(true, StatusID.Starstruck)) return true; - if (HammerStampPvE.CanUse(out act, skipCastingCheck: true, skipAoeCheck: true) && Player.HasStatus(true, StatusID.HammerTime) && InCombat && burstTimingChecker) return true; - //Cast when not in fight + if (HammerStampPvE.CanUse(out act, skipCastingCheck: true, skipAoeCheck: true) && HasHammerTime && burstTimingChecker) return true; + //Cast when not in fight or no target available if (!InCombat) { if (!CreatureMotifDrawn) @@ -204,7 +209,7 @@ protected override bool GeneralGCD(out IAction? act) { if (StarrySkyMotifPvE.CanUse(out act) && !Player.HasStatus(true, StatusID.Hyperphantasia)) return true; } - if (!CreatureMotifDrawn && (LivingMusePvE.Cooldown.HasOneCharge || LivingMusePvE.Cooldown.RecastTimeRemainOneCharge <= CreatureMotifPvE.Info.CastTime) && !Player.HasStatus(true, StatusID.StarryMuse) && !Player.HasStatus(true, StatusID.Hyperphantasia)) + if (!CreatureMotifDrawn && (LivingMusePvE.Cooldown.HasOneCharge || LivingMusePvE.Cooldown.RecastTimeRemainOneCharge <= CreatureMotifPvE.Info.CastTime * 1.7) && !Player.HasStatus(true, StatusID.StarryMuse) && !Player.HasStatus(true, StatusID.Hyperphantasia)) { if (PomMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == PomMotifPvE.ID) return true; if (WingMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == WingMotifPvE.ID) return true; @@ -212,13 +217,13 @@ protected override bool GeneralGCD(out IAction? act) if (MawMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == MawMotifPvE.ID) return true; ; } - if (!WeaponMotifDrawn && !Player.HasStatus(true, StatusID.HammerTime) && (SteelMusePvE.Cooldown.HasOneCharge || SteelMusePvE.Cooldown.RecastTimeRemainOneCharge <= WeaponMotifPvE.Info.CastTime) && !Player.HasStatus(true, StatusID.StarryMuse) && !Player.HasStatus(true, StatusID.Hyperphantasia)) + if (!WeaponMotifDrawn && !HasHammerTime && (SteelMusePvE.Cooldown.HasOneCharge || SteelMusePvE.Cooldown.RecastTimeRemainOneCharge <= WeaponMotifPvE.Info.CastTime) && !Player.HasStatus(true, StatusID.StarryMuse) && !Player.HasStatus(true, StatusID.Hyperphantasia)) { if (HammerMotifPvE.CanUse(out act)) return true; } - bool isMovingAndNoDraw = IsMoving && act != StarrySkyMotifPvE && act != PomMotifPvE && act != WingMotifPvE && act != ClawMotifPvE && act != MawMotifPvE && act != HammerMotifPvE && !Player.HasStatus(true, StatusID.Swiftcast); + bool isMovingAndSwift = IsMoving && !Player.HasStatus(true, StatusID.Swiftcast); // white/black paint use while moving - if (isMovingAndNoDraw) + if (isMovingAndSwift) { if (HammerStampPvE.CanUse(out act, skipCastingCheck: true, skipAoeCheck: true) && burstTimingChecker) return true; if (HolyCometMoving) @@ -241,7 +246,7 @@ protected override bool GeneralGCD(out IAction? act) if (StarrySkyMotifPvE.CanUse(out act, skipCastingCheck: landscape) && !Player.HasStatus(true, StatusID.Hyperphantasia) && landscape) return true; } //white paint over cap protection - if (Paint == HolyCometMax) + if ((Paint == HolyCometMax && !Player.HasStatus(true, StatusID.StarryMuse)) && UseCapCometHoly) { if (CometInBlackPvE.CanUse(out act, skipCastingCheck: true, skipAoeCheck: true)) return true; if (HolyInWhitePvE.CanUse(out act, skipCastingCheck: true, skipAoeCheck: true)) return true; From 45e7de193d5c1551f159395ae89363d7aff90801 Mon Sep 17 00:00:00 2001 From: IncognitoWater Date: Wed, 21 Aug 2024 15:16:37 +0200 Subject: [PATCH 2/2] Added overcap settings for comet only modify settings to avoid lost of desynced hammer changed some conditions on prebuild bool and optimised code --- BasicRotations/Magical/ICWA_PCT_BETA.cs | 54 ++++++++++--------------- 1 file changed, 22 insertions(+), 32 deletions(-) diff --git a/BasicRotations/Magical/ICWA_PCT_BETA.cs b/BasicRotations/Magical/ICWA_PCT_BETA.cs index c16b0a8..0a57024 100644 --- a/BasicRotations/Magical/ICWA_PCT_BETA.cs +++ b/BasicRotations/Magical/ICWA_PCT_BETA.cs @@ -16,7 +16,9 @@ public sealed class IcWaPctBeta : PictomancerRotation [Range(1, 5, ConfigUnitType.None, 1)] [RotationConfig(CombatType.PvE, Name = "Paint overcap protection. How many paint do you need to be at before using a paint?")] public bool UseCapCometHoly { get; set; } = true; - [RotationConfig(CombatType.PvE, Name = "Use the paint overcap protection or ( will still use comet while moving if the setup is on)")] + [RotationConfig(CombatType.PvE, Name = "Use the paint overcap protection ( will still use comet while moving if the setup is on)")] + public bool UseCapCometOnly { get; set; } = false; + [RotationConfig(CombatType.PvE, Name = "Use the paint overcap protection for comet only or ( will still use comet while moving if the setup is on)")] public int HolyCometMax { get; set; } = 5; public enum MotifSwift : byte { @@ -131,7 +133,7 @@ protected override bool DefenseAreaAbility(IAction nextGCD, out IAction? act) #region oGCD Logic protected override bool AttackAbility(IAction nextGCD, out IAction? act) { - bool burstTimingCheckerStriking = !ScenicMusePvE.Cooldown.WillHaveOneCharge(10) || Player.HasStatus(true, StatusID.StarryMuse); + bool burstTimingCheckerStriking = !ScenicMusePvE.Cooldown.WillHaveOneCharge(60) || Player.HasStatus(true, StatusID.StarryMuse); if (CombatTime < 5) { if (StrikingMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && WeaponMotifDrawn) return true; @@ -144,11 +146,11 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) } if (Player.Level < 92) { - if (ScenicMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && CombatTime > 3 ) return true; + if (ScenicMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && CombatTime > 3 && IsBurst ) return true; } else { - if (ScenicMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && CombatTime > 5 ) return true; + if (ScenicMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && CombatTime > 5 && IsBurst ) return true; } if (RetributionOfTheMadeenPvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true)) return true; if (MogOfTheAgesPvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true)) return true; @@ -163,18 +165,15 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) #region GCD Logic protected override bool GeneralGCD(out IAction? act) { - bool burstTimingChecker = !ScenicMusePvE.Cooldown.WillHaveOneCharge(60) && SteelMusePvE.Cooldown.CurrentCharges != 1 || Player.HasStatus(true, StatusID.StarryMuse); + bool burstTimingChecker = !ScenicMusePvE.Cooldown.WillHaveOneCharge(52) && SteelMusePvE.Cooldown.CurrentCharges != 1 || Player.HasStatus(true, StatusID.StarryMuse); //Opener requirements if (CombatTime < 5) { if (HolyInWhitePvE.CanUse(out act, skipCastingCheck: true, skipAoeCheck: true) && Paint > 0) return true; - if (!CreatureMotifDrawn) - { - if (PomMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == PomMotifPvE.ID) return true; - if (WingMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == WingMotifPvE.ID) return true; - if (ClawMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == ClawMotifPvE.ID) return true; - if (MawMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == MawMotifPvE.ID) return true; - } + if (PomMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == PomMotifPvE.ID) return true; + if (WingMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == WingMotifPvE.ID) return true; + if (ClawMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == ClawMotifPvE.ID) return true; + if (MawMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == MawMotifPvE.ID) return true; } // some gcd priority if (RainbowDripPvE.CanUse(out act, skipAoeCheck: true) && Player.HasStatus(true, StatusID.RainbowBright)) return true; @@ -187,29 +186,20 @@ protected override bool GeneralGCD(out IAction? act) //Cast when not in fight or no target available if (!InCombat) { - if (!CreatureMotifDrawn) - { - if (PomMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == PomMotifPvE.ID) return true; - if (WingMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == WingMotifPvE.ID) return true; - if (ClawMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == ClawMotifPvE.ID) return true; - if (MawMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == MawMotifPvE.ID) return true; - } - if (!WeaponMotifDrawn) - { - if (HammerMotifPvE.CanUse(out act)) return true; - } - if (!LandscapeMotifDrawn) - { - if (StarrySkyMotifPvE.CanUse(out act) && !Player.HasStatus(true, StatusID.Hyperphantasia)) return true; - } + if (PomMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == PomMotifPvE.ID) return true; + if (WingMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == WingMotifPvE.ID) return true; + if (ClawMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == ClawMotifPvE.ID) return true; + if (MawMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == MawMotifPvE.ID) return true; + if (HammerMotifPvE.CanUse(out act)) return true; + if (StarrySkyMotifPvE.CanUse(out act) && !Player.HasStatus(true, StatusID.Hyperphantasia)) return true; if (RainbowDripPvE.CanUse(out act)) return true; } // timings for motif casting - if (!LandscapeMotifDrawn && ScenicMusePvE.Cooldown.RecastTimeRemainOneCharge <= 15 && !Player.HasStatus(true, StatusID.StarryMuse) && !Player.HasStatus(true, StatusID.Hyperphantasia)) + if (ScenicMusePvE.Cooldown.RecastTimeRemainOneCharge <= 15 && !Player.HasStatus(true, StatusID.StarryMuse) && !Player.HasStatus(true, StatusID.Hyperphantasia)) { if (StarrySkyMotifPvE.CanUse(out act) && !Player.HasStatus(true, StatusID.Hyperphantasia)) return true; } - if (!CreatureMotifDrawn && (LivingMusePvE.Cooldown.HasOneCharge || LivingMusePvE.Cooldown.RecastTimeRemainOneCharge <= CreatureMotifPvE.Info.CastTime * 1.7) && !Player.HasStatus(true, StatusID.StarryMuse) && !Player.HasStatus(true, StatusID.Hyperphantasia)) + if ((LivingMusePvE.Cooldown.HasOneCharge || LivingMusePvE.Cooldown.RecastTimeRemainOneCharge <= CreatureMotifPvE.Info.CastTime * 1.7) && !Player.HasStatus(true, StatusID.StarryMuse) && !Player.HasStatus(true, StatusID.Hyperphantasia)) { if (PomMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == PomMotifPvE.ID) return true; if (WingMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == WingMotifPvE.ID) return true; @@ -217,7 +207,7 @@ protected override bool GeneralGCD(out IAction? act) if (MawMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == MawMotifPvE.ID) return true; ; } - if (!WeaponMotifDrawn && !HasHammerTime && (SteelMusePvE.Cooldown.HasOneCharge || SteelMusePvE.Cooldown.RecastTimeRemainOneCharge <= WeaponMotifPvE.Info.CastTime) && !Player.HasStatus(true, StatusID.StarryMuse) && !Player.HasStatus(true, StatusID.Hyperphantasia)) + if ((SteelMusePvE.Cooldown.HasOneCharge || SteelMusePvE.Cooldown.RecastTimeRemainOneCharge <= WeaponMotifPvE.Info.CastTime) && !Player.HasStatus(true, StatusID.StarryMuse) && !Player.HasStatus(true, StatusID.Hyperphantasia)) { if (HammerMotifPvE.CanUse(out act)) return true; } @@ -246,10 +236,10 @@ protected override bool GeneralGCD(out IAction? act) if (StarrySkyMotifPvE.CanUse(out act, skipCastingCheck: landscape) && !Player.HasStatus(true, StatusID.Hyperphantasia) && landscape) return true; } //white paint over cap protection - if ((Paint == HolyCometMax && !Player.HasStatus(true, StatusID.StarryMuse)) && UseCapCometHoly) + if ((Paint == HolyCometMax && !Player.HasStatus(true, StatusID.StarryMuse)) && (UseCapCometHoly || UseCapCometOnly)) { if (CometInBlackPvE.CanUse(out act, skipCastingCheck: true, skipAoeCheck: true)) return true; - if (HolyInWhitePvE.CanUse(out act, skipCastingCheck: true, skipAoeCheck: true)) return true; + if (HolyInWhitePvE.CanUse(out act, skipCastingCheck: true, skipAoeCheck: true) && !UseCapCometOnly) return true; } //aoe sub if (ThunderIiInMagentaPvE.CanUse(out act)) return true;