diff --git a/BasicRotations/Magical/ICWA_PCT_BETA.cs b/BasicRotations/Magical/ICWA_PCT_BETA.cs new file mode 100644 index 0000000..a615e56 --- /dev/null +++ b/BasicRotations/Magical/ICWA_PCT_BETA.cs @@ -0,0 +1,385 @@ +using System.ComponentModel; + +namespace DefaultRotations.Magical; + +[Rotation("IcWa_PCT_Beta", CombatType.PvE, GameVersion = "7.0", Description = "Kindly created and donated by Rabbs")] +[SourceCode(Path = "main/DefaultRotations/Magical/PCT_Default.cs")] +[Api(3)] +public sealed class IcWa_PCT_Beta : PictomancerRotation +{ + public override MedicineType MedicineType => MedicineType.Intelligence; + public static IBaseAction RainbowPrePull { get; } = new BaseAction((ActionID)34688); + + [RotationConfig(CombatType.PvE, Name = "Use HolyInWhite or CometInBlack while moving")] + public bool HolyCometMoving { get; set; } = true; + + [RotationConfig(CombatType.PvE, Name = "Use swifcast on")] + public MotifSwift MotifSwiftCast { get; set; } = MotifSwift.WeaponMotif; + + public enum MotifSwift : byte + { + + [Description("CreatureMotif")] CreatureMotif, + + [Description("WeaponMotif")] WeaponMotif, + + [Description("LandscapeMotif")] LandscapeMotif, + + [Description("AllMotif")] AllMotif, + + [Description("NoMotif(ManualSwifcast")] + NoMotif + } + + #region Countdown logic + // Defines logic for actions to take during the countdown before combat starts. + protected override IAction? CountDownAction(float remainTime) + { + IAction act; + if (!InCombat) + { + if (!CreatureMotifDrawn) + { + if (PomMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == PomMotifPvE.ID) return act; + if (WingMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == WingMotifPvE.ID) return act; + if (ClawMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == ClawMotifPvE.ID) return act; + if (MawMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == MawMotifPvE.ID) return act; + } + if (!WeaponMotifDrawn) + { + if (HammerMotifPvE.CanUse(out act)) return act; + } + if (!LandscapeMotifDrawn) + { + if (StarrySkyMotifPvE.CanUse(out act) && !Player.HasStatus(true, StatusID.Hyperphantasia)) return act; + } + } + if (remainTime < RainbowDripPvE.Info.CastTime + CountDownAhead) + { + if (StrikingMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && WeaponMotifDrawn) return act; + } + if (remainTime < RainbowDripPvE.Info.CastTime + 0.4f + CountDownAhead) + { + if (RainbowPrePull.CanUse(out act, skipAoeCheck: true, skipCastingCheck: true, skipStatusProvideCheck: true)) return act; + } + return base.CountDownAction(remainTime); + } + #endregion + + #region Additional oGCD Logic + protected override bool EmergencyAbility(IAction nextGCD, out IAction? act) + { + if (InCombat) + { + switch (MotifSwiftCast) + { + case MotifSwift.CreatureMotif: + if (nextGCD == PomMotifPvE || nextGCD == WingMotifPvE || nextGCD == MawMotifPvE || nextGCD == ClawMotifPvE) + { + if (SwiftcastPvE.CanUse(out act)) return true; + } + break; + case MotifSwift.WeaponMotif: + if (nextGCD == HammerMotifPvE) + { + if (SwiftcastPvE.CanUse(out act)) return true; + } + break; + case MotifSwift.LandscapeMotif: + if (nextGCD == StarrySkyMotifPvE) + { + if (SwiftcastPvE.CanUse(out act)) return true; + } + break; + case MotifSwift.AllMotif: + if (nextGCD == PomMotifPvE || nextGCD == WingMotifPvE || nextGCD == MawMotifPvE || nextGCD == ClawMotifPvE) + { + if (SwiftcastPvE.CanUse(out act)) return true; + } + else if (nextGCD == HammerMotifPvE) + { + if (SwiftcastPvE.CanUse(out act)) return true; + } + else if (nextGCD == StarrySkyMotifPvE) + { + if (SwiftcastPvE.CanUse(out act)) return true; + } + break; + case MotifSwift.NoMotif: + break; + } + } + + return base.EmergencyAbility(nextGCD, out act); + } + + [RotationDesc(ActionID.SmudgePvE)] + protected override bool MoveForwardAbility(IAction nextGCD, out IAction? act) + { + if (SmudgePvE.CanUse(out act)) return true; + return base.AttackAbility(nextGCD, out act); + } + + [RotationDesc(ActionID.AddlePvE, ActionID.TemperaCoatPvE, ActionID.TemperaGrassaPvE)] + protected override bool DefenseAreaAbility(IAction nextGCD, out IAction? act) + { + if (AddlePvE.CanUse(out act)) return true; + if (TemperaCoatPvE.CanUse(out act)) return true; + if (TemperaGrassaPvE.CanUse(out act)) return true; + return base.DefenseAreaAbility(nextGCD, out act); + } + #endregion + + #region oGCD Logic + protected override bool AttackAbility(IAction nextGCD, out IAction? act) + { + if (Player.HasStatus(true, StatusID.StarryMuse)) + { + if (Player.HasStatus(true, StatusID.SubtractiveSpectrum) && !Player.HasStatus(true, StatusID.SubtractivePalette)) + { + if (SubtractivePalettePvE.CanUse(out act)) return true; + } + + if (CreatureMotifDrawn) + { + if (FangedMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && CreatureMotifDrawn && LivingMusePvE.AdjustedID == FangedMusePvE.ID) return true; + } + + if (RetributionOfTheMadeenPvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && MadeenPortraitReady) return true; + } + + if (!Player.HasStatus(true, StatusID.SubtractivePalette) && (PaletteGauge >= 50 || Player.HasStatus(true, StatusID.SubtractiveSpectrum)) && SubtractivePalettePvE.CanUse(out act)) return true; + + if (InCombat) + { + if (ScenicMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && LandscapeMotifDrawn && CreatureMotifDrawn && CombatTime > 5) return true; + if (RetributionOfTheMadeenPvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && MadeenPortraitReady) return true; + if (MogOfTheAgesPvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && MooglePortraitReady) return true; + if (StrikingMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && WeaponMotifDrawn) return true; + if (PomMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && CreatureMotifDrawn && LivingMusePvE.AdjustedID == PomMusePvE.ID) return true; + if (WingedMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && CreatureMotifDrawn && LivingMusePvE.AdjustedID == WingedMusePvE.ID) return true; + if (ClawedMusePvE.CanUse(out act, skipCastingCheck: true, skipStatusProvideCheck: true, skipComboCheck: true, skipAoeCheck: true, usedUp: true) && CreatureMotifDrawn && LivingMusePvE.AdjustedID == ClawedMusePvE.ID) return true; + } + + return base.AttackAbility(nextGCD, out act); + } + #endregion + + #region GCD Logic + protected override bool MoveForwardGCD(out IAction? act) + { + act = null; + + return base.MoveForwardGCD(out act); + } + + protected override bool GeneralGCD(out IAction? act) + { + bool BurstTimingChecker = !ScenicMusePvE.Cooldown.WillHaveOneCharge(32) || Player.HasStatus(true, StatusID.StarryMuse); + + bool IsTargetDying = HostileTarget?.IsDying() ?? false; + + 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) + { + 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 (RainbowDripPvE.CanUse(out act, skipAoeCheck: true) && Player.HasStatus(true, StatusID.RainbowBright)) return true; + if (Player.HasStatus(true, StatusID.StarryMuse)) + { + if (CometInBlackPvE.CanUse(out act, skipCastingCheck: true, skipAoeCheck: true) && Paint > 0 && Player.HasStatus(true, StatusID.MonochromeTones)) return true; + } + if (StarPrismPvE.CanUse(out act, skipAoeCheck: true) && Player.HasStatus(true, StatusID.Starstruck)) return true; + + // white/black paint use while moving + if (IsMoving) + { + if (HammerStampPvE.CanUse(out act, skipCastingCheck: true, skipAoeCheck: true) && Player.HasStatus(true, StatusID.HammerTime) && InCombat && BurstTimingChecker) return true; + if (HolyCometMoving) + { + if (CometInBlackPvE.CanUse(out act, skipCastingCheck: true, skipAoeCheck: true) && Paint > 0 && Player.HasStatus(true, StatusID.MonochromeTones)) return true; + if (HolyInWhitePvE.CanUse(out act, skipCastingCheck: true, skipAoeCheck: true) && Paint > 0) return true; + } + } + + if (HammerStampPvE.CanUse(out act, skipCastingCheck: true, skipAoeCheck: true) && Player.HasStatus(true, StatusID.HammerTime) && InCombat && BurstTimingChecker) return true; + + 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 (RainbowDripPvE.CanUse(out act)) return true; + } + + if (InCombat && !Player.HasStatus(true, StatusID.StarryMuse) && !Player.HasStatus(true, StatusID.Hyperphantasia) && !IsTargetDying && (HasSwift || !HasHostilesInMaxRange) && (!CreatureMotifDrawn || !WeaponMotifDrawn && !Player.HasStatus(true, StatusID.HammerTime) || !LandscapeMotifDrawn)) + { + bool swiftmode = HasSwift || !SwiftcastPvE.Cooldown.IsCoolingDown; + switch (MotifSwiftCast) + { + case MotifSwift.CreatureMotif: + if (!CreatureMotifDrawn) + { + if (PomMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CreatureMotifPvE.AdjustedID == PomMotifPvE.ID) return true; + if (WingMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CreatureMotifPvE.AdjustedID == WingMotifPvE.ID) return true; + if (ClawMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CreatureMotifPvE.AdjustedID == ClawMotifPvE.ID) return true; + if (MawMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CreatureMotifPvE.AdjustedID == MawMotifPvE.ID) return true; + } + if (!WeaponMotifDrawn && !Player.HasStatus(true, StatusID.HammerTime)) + { + if (HammerMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CombatTime > 23) return true; + } + if (!LandscapeMotifDrawn) + { + if (StarrySkyMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && !Player.HasStatus(true, StatusID.Hyperphantasia)) return true; + } + break; + case MotifSwift.WeaponMotif: + if (!WeaponMotifDrawn && !Player.HasStatus(true, StatusID.HammerTime)) + { + if (HammerMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CombatTime > 23) return true; + } + if (!LandscapeMotifDrawn) + { + if (StarrySkyMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && !Player.HasStatus(true, StatusID.Hyperphantasia)) return true; + } + if (!CreatureMotifDrawn) + { + if (PomMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CreatureMotifPvE.AdjustedID == PomMotifPvE.ID) return true; + if (WingMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CreatureMotifPvE.AdjustedID == WingMotifPvE.ID) return true; + if (ClawMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CreatureMotifPvE.AdjustedID == ClawMotifPvE.ID) return true; + if (MawMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CreatureMotifPvE.AdjustedID == MawMotifPvE.ID) return true; + } + break; + case MotifSwift.LandscapeMotif: + if (!LandscapeMotifDrawn) + { + if (StarrySkyMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && !Player.HasStatus(true, StatusID.Hyperphantasia)) return true; + } + if (!WeaponMotifDrawn && !Player.HasStatus(true, StatusID.HammerTime)) + { + if (HammerMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CombatTime > 23) return true; + } + if (!CreatureMotifDrawn) + { + if (PomMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CreatureMotifPvE.AdjustedID == PomMotifPvE.ID) return true; + if (WingMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CreatureMotifPvE.AdjustedID == WingMotifPvE.ID) return true; + if (ClawMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CreatureMotifPvE.AdjustedID == ClawMotifPvE.ID) return true; + if (MawMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CreatureMotifPvE.AdjustedID == MawMotifPvE.ID) return true; + } + break; + case MotifSwift.AllMotif: + if (!CreatureMotifDrawn) + { + if (PomMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CreatureMotifPvE.AdjustedID == PomMotifPvE.ID) return true; + if (WingMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CreatureMotifPvE.AdjustedID == WingMotifPvE.ID) return true; + if (ClawMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CreatureMotifPvE.AdjustedID == ClawMotifPvE.ID) return true; + if (MawMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CreatureMotifPvE.AdjustedID == MawMotifPvE.ID) return true; + } + if (!WeaponMotifDrawn && !Player.HasStatus(true, StatusID.HammerTime)) + { + if (HammerMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && CombatTime > 23) return true; + } + if (!LandscapeMotifDrawn) + { + if (StarrySkyMotifPvE.CanUse(out act, skipCastingCheck: swiftmode) && !Player.HasStatus(true, StatusID.Hyperphantasia)) return true; + } + break; + case MotifSwift.NoMotif: + if (!LandscapeMotifDrawn) + { + if (StarrySkyMotifPvE.CanUse(out act) && !Player.HasStatus(true, StatusID.Hyperphantasia)) return true; + } + if (!WeaponMotifDrawn && !Player.HasStatus(true, StatusID.HammerTime)) + { + if (HammerMotifPvE.CanUse(out act) && CombatTime > 23) 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; + } + break; + } + } + + if (!LandscapeMotifDrawn && 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) && !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; + if (ClawMotifPvE.CanUse(out act) && CreatureMotifPvE.AdjustedID == ClawMotifPvE.ID) return true; + 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 (HammerMotifPvE.CanUse(out act)) return true; + } + + //white paint over cap protection + if (Paint == 5) + { + if (CometInBlackPvE.CanUse(out act, skipCastingCheck: true, skipAoeCheck: true) && Paint > 0 && Player.HasStatus(true, StatusID.MonochromeTones)) return true; + if (HolyInWhitePvE.CanUse(out act, skipCastingCheck: true, skipAoeCheck: true) && Paint > 0) return true; + } + //aoe + // + if (ThunderIiInMagentaPvE.CanUse(out act) && Player.HasStatus(true, StatusID.SubtractivePalette) && Player.HasStatus(true, StatusID.AetherhuesIi)) return true; + if (StoneIiInYellowPvE.CanUse(out act) && Player.HasStatus(true, StatusID.SubtractivePalette) && Player.HasStatus(true, StatusID.Aetherhues)) return true; + if (BlizzardIiInCyanPvE.CanUse(out act) && Player.HasStatus(true, StatusID.SubtractivePalette)) return true; + + + if (WaterIiInBluePvE.CanUse(out act) && Player.HasStatus(true, StatusID.AetherhuesIi)) return true; + if (AeroIiInGreenPvE.CanUse(out act) && Player.HasStatus(true, StatusID.Aetherhues)) return true; + if (FireIiInRedPvE.CanUse(out act)) return true; + + //single target + // + + if (ThunderInMagentaPvE.CanUse(out act) && Player.HasStatus(true, StatusID.SubtractivePalette) && Player.HasStatus(true, StatusID.AetherhuesIi)) return true; + if (StoneInYellowPvE.CanUse(out act) && Player.HasStatus(true, StatusID.SubtractivePalette) && Player.HasStatus(true, StatusID.Aetherhues)) return true; + if (BlizzardInCyanPvE.CanUse(out act) && Player.HasStatus(true, StatusID.SubtractivePalette)) return true; + + + if (WaterInBluePvE.CanUse(out act) && Player.HasStatus(true, StatusID.AetherhuesIi)) return true; + if (AeroInGreenPvE.CanUse(out act) && Player.HasStatus(true, StatusID.Aetherhues)) return true; + if (FireInRedPvE.CanUse(out act)) return true; + + return base.GeneralGCD(out act); + } + + private bool AttackGCD(out IAction? act, bool burst) + { + act = null; + + return false; + } + #endregion + +} \ No newline at end of file diff --git a/BasicRotations/Magical/zPCT_BETA.cs b/BasicRotations/Magical/zPCT_BETA.cs deleted file mode 100644 index 7107899..0000000 --- a/BasicRotations/Magical/zPCT_BETA.cs +++ /dev/null @@ -1,239 +0,0 @@ -namespace DefaultRotations.Magical; - -[Rotation("zPCT Beta", CombatType.PvE, GameVersion = "7.05")] -[SourceCode(Path = "main/DefaultRotations/Magical/zPCT_BETA.cs")] -[Api(3)] -public sealed class zPCT_BETA : PictomancerRotation -{ - [RotationConfig(CombatType.PvE, Name = "Use HolyInWhite or CometInBlack while moving")] - public bool HolyCometMoving { get; set; } = true; - - [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? (Setting is ignored when you have Hyperphantasia)")] - public int HolyCometMax { get; set; } = 5; - - [RotationConfig(CombatType.PvE, Name = "Use swiftcast on Rainbow Drip (Priority over below settings)")] - public bool RainbowDripSwift { get; set; } = true; - - [RotationConfig(CombatType.PvE, Name = "Use swiftcast on Motif")] - public bool MotifSwiftCastSwift { get; set; } = false; - - [RotationConfig(CombatType.PvE, Name = "Which Motif")] - public CanvasFlags MotifSwiftCast { get; set; } = CanvasFlags.Pom; - - #region Countdown logic - // Defines logic for actions to take during the countdown before combat starts. - protected override IAction? CountDownAction(float remainTime) - { - IAction act; - if (!InCombat) - { - if (!CreatureMotifDrawn) - { - if (PomMotifPvE.CanUse(out act, skipCastingCheck: true)) return act; - } - if (!WeaponMotifDrawn) - { - if (HammerMotifPvE.CanUse(out act, skipCastingCheck: true)) return act; - } - if (!LandscapeMotifDrawn) - { - if (StarrySkyMotifPvE.CanUse(out act, skipCastingCheck: true) && !Player.HasStatus(true, StatusID.Hyperphantasia)) return act; - } - } - if (remainTime < RainbowDripPvE.Info.CastTime + CountDownAhead) - { - if (StrikingMusePvE.CanUse(out act, skipCastingCheck: true) && WeaponMotifDrawn) return act; - } - - if (remainTime < RainbowDripPvE.Info.CastTime + 0.4f + CountDownAhead) - { - if (RainbowDripPvE.CanUse(out act, skipCastingCheck: true)) return act; - } - - return base.CountDownAction(remainTime); - } - #endregion - - #region Additional oGCD Logic - - protected override bool EmergencyAbility(IAction nextGCD, out IAction? act) - { - if (InCombat) - { - if (RainbowDripSwift) - { - if (nextGCD == RainbowDripPvE) - { - if (SwiftcastPvE.CanUse(out act)) return true; - } - } - } - - if (InCombat) - { - if (MotifSwiftCastSwift) - { - switch (MotifSwiftCast) - { - case CanvasFlags.Pom: - if (nextGCD == PomMotifPvE) - { - if (SwiftcastPvE.CanUse(out act)) return true; - } - break; - case CanvasFlags.Wing: - if (nextGCD == WingMotifPvE) - { - if (SwiftcastPvE.CanUse(out act)) return true; - } - break; - case CanvasFlags.Claw: - if (nextGCD == ClawMotifPvE) - { - if (SwiftcastPvE.CanUse(out act)) return true; - } - break; - case CanvasFlags.Maw: - if (nextGCD == MawMotifPvE) - { - if (SwiftcastPvE.CanUse(out act)) return true; - } - break; - case CanvasFlags.Weapon: - if (nextGCD == HammerMotifPvE) - { - if (SwiftcastPvE.CanUse(out act)) return true; - } - break; - case CanvasFlags.Landscape: - if (nextGCD == StarrySkyMotifPvE) - { - if (SwiftcastPvE.CanUse(out act)) return true; - } - break; - } - } - } - return base.EmergencyAbility(nextGCD, out act); - } - - - [RotationDesc(ActionID.SmudgePvE)] - protected override bool MoveForwardAbility(IAction nextGCD, out IAction? act) - { - - if (SmudgePvE.CanUse(out act)) return true; - - return base.MoveForwardAbility(nextGCD, out act); - } - - [RotationDesc(ActionID.TemperaCoatPvE, ActionID.TemperaGrassaPvE, ActionID.AddlePvE)] - protected sealed override bool DefenseAreaAbility(IAction nextGCD, out IAction? act) - { - // Mitigations - if (TemperaCoatPvE.CanUse(out act)) return true; - if (TemperaGrassaPvE.CanUse(out act)) return true; - if (AddlePvE.CanUse(out act)) return true; - return base.DefenseAreaAbility(nextGCD, out act); - } - - #endregion - - #region oGCD Logic - - protected override bool AttackAbility(IAction nextGCD, out IAction? act) - { - // Bursts - if (SubtractivePalettePvE.CanUse(out act)) return true; - if (RetributionOfTheMadeenPvE.CanUse(out act)) return true; - if (FangedMusePvE.CanUse(out act, usedUp: true)) return true; - if (ClawedMusePvE.CanUse(out act, usedUp: true)) return true; - - //Expert Muses - if (MogOfTheAgesPvE.CanUse(out act)) return true; - if (WingedMusePvE.CanUse(out act, usedUp: true)) return true; - - //Advanced Muses - if (StarryMusePvE.CanUse(out act)) return true; - if (StrikingMusePvE.CanUse(out act)) return true; - if (ClawedMusePvE.CanUse(out act, usedUp: true)) return true; - if (WingedMusePvE.CanUse(out act, usedUp: true)) return true; - if (PomMusePvE.CanUse(out act, usedUp: true)) return true; - - //Basic Muses - //if (ScenicMusePvE.CanUse(out act)) return true; - //if (SteelMusePvE.CanUse(out act, usedUp: true)) return true; - //if (LivingMusePvE.CanUse(out act, usedUp: true)) return true; - return base.AttackAbility(nextGCD, out act); - } - #endregion - - #region GCD Logic - - protected override bool GeneralGCD(out IAction? act) - { - // Weapon Painting Burst - if (HammerStampPvE.CanUse(out act, skipCastingCheck: true, skipComboCheck: true)) return true; - - if (Player.HasStatus(true, StatusID.Hyperphantasia)) - { - if (CometInBlackPvE.CanUse(out act, skipCastingCheck: true)) return true; - if (HolyInWhitePvE.CanUse(out act, skipCastingCheck: true)) return true; - } - - //Use up paint if in Hyperphantasia - if (Player.HasStatus(true, StatusID.Hyperphantasia)) - { - if (CometInBlackPvE.CanUse(out act, skipCastingCheck: true)) return true; - if (HolyInWhitePvE.CanUse(out act, skipCastingCheck: true)) return true; - } - - //Paint overcap protection - if (Paint == HolyCometMax) - { - if (CometInBlackPvE.CanUse(out act, skipCastingCheck: true)) return true; - if (HolyInWhitePvE.CanUse(out act, skipCastingCheck: true)) return true; - } - - // Landscape Paining Burst - if (RainbowDripPvE.CanUse(out act)) return true; - if (StarPrismPvE.CanUse(out act, skipCastingCheck: true)) return true; - - //Advanced Paintings - if (StarrySkyMotifPvE.CanUse(out act)) return true; - if (HammerMotifPvE.CanUse(out act)) return true; - if (MawMotifPvE.CanUse(out act)) return true; - if (ClawMotifPvE.CanUse(out act)) return true; - if (WingMotifPvE.CanUse(out act)) return true; - if (PomMotifPvE.CanUse(out act)) return true; - - //Basic Paintings - //if (LandscapeMotifPvE.CanUse(out act)) return true; - //if (WeaponMotifPvE.CanUse(out act)) return true; - //if (CreatureMotifPvE.CanUse(out act)) return true; - - //AOE Subtractive Inks - if (ThunderIiInMagentaPvE.CanUse(out act)) return true; - if (StoneIiInYellowPvE.CanUse(out act)) return true; - if (BlizzardIiInCyanPvE.CanUse(out act)) return true; - - //AOE Additive Inks - if (WaterIiInBluePvE.CanUse(out act)) return true; - if (AeroIiInGreenPvE.CanUse(out act)) return true; - if (FireIiInRedPvE.CanUse(out act)) return true; - - //ST Subtractive Inks - if (ThunderInMagentaPvE.CanUse(out act)) return true; - if (StoneInYellowPvE.CanUse(out act)) return true; - if (BlizzardInCyanPvE.CanUse(out act)) return true; - - //ST Additive Inks - if (WaterInBluePvE.CanUse(out act)) return true; - if (AeroInGreenPvE.CanUse(out act)) return true; - if (FireInRedPvE.CanUse(out act)) return true; - return base.GeneralGCD(out act); - } - - #endregion -}