diff --git a/BasicRotations/PVPRotations/Magical/PCT_Default.PvP.cs b/BasicRotations/PVPRotations/Magical/PCT_Default.PvP.cs new file mode 100644 index 000000000..48ebc8a6b --- /dev/null +++ b/BasicRotations/PVPRotations/Magical/PCT_Default.PvP.cs @@ -0,0 +1,112 @@ +namespace RebornRotations.PVPRotations.Magical; + +[Rotation("Default PvP", CombatType.PvP, GameVersion = "7.15", Description = "Default PVP Pictomancer by Crito")] +[Api(4)] +public class PCT_DefaultPvP : PictomancerRotation +{ + #region Configurations + + [RotationConfig(CombatType.PvP, Name = "Use Purify")] + public bool UsePurifyPvP { get; set; } = true; + + [RotationConfig(CombatType.PvP, Name = "Stop attacking while in Guard.")] + public bool RespectGuard { get; set; } = true; + #endregion + + #region Standard PVP Utilities + private bool DoPurify(out IAction? action) + { + action = null; + if (!UsePurifyPvP) return false; + + var purifiableStatusesIDs = new List + { + // Stun, DeepFreeze, HalfAsleep, Sleep, Bind, Heavy, Silence + 1343, 3219, 3022, 1348, 1345, 1344, 1347 + }; + + if (purifiableStatusesIDs.Any(id => Player.HasStatus(false, (StatusID)id))) + { + return PurifyPvP.CanUse(out action); + } + + return false; + } + #endregion + + #region oGCDs + protected override bool EmergencyAbility(IAction nextGCD, out IAction? action) + { + action = null; + if (RespectGuard && Player.HasStatus(true, StatusID.Guard)) return false; + if (DoPurify(out action)) return true; + + return base.EmergencyAbility(nextGCD, out action); + } + + protected override bool DefenseSingleAbility(IAction nextGCD, out IAction? action) + { + action = null; + if (RespectGuard && Player.HasStatus(true, StatusID.Guard)) return false; + + return base.DefenseSingleAbility(nextGCD, out action); + } + + protected override bool AttackAbility(IAction nextGCD, out IAction? action) + { + action = null; + if (RespectGuard && Player.HasStatus(true, StatusID.Guard)) return false; + + if (PomMusePvP.CanUse(out action, usedUp: true)) return true; + if (WingedMusePvP.CanUse(out action, usedUp: true)) return true; + if (ClawedMusePvP.CanUse(out action, usedUp: true)) return true; + if (FangedMusePvP.CanUse(out action, usedUp: true)) return true; + + switch (IsMoving) + { + case true: + if (ReleaseSubtractivePalettePvP.CanUse(out action)) return true; + break; + case false: + if (SubtractivePalettePvP.CanUse(out action)) return true; + break; + } + + return base.AttackAbility(nextGCD, out action); + } + + #endregion + + #region GCDs + protected override bool GeneralGCD(out IAction? action) + { + action = null; + if (RespectGuard && Player.HasStatus(true, StatusID.Guard)) return false; + + if (StarPrismPvP.CanUse(out action)) return true; + + if (MogOfTheAgesPvP.CanUse(out action)) return true; + if (RetributionOfTheMadeenPvP.CanUse(out action)) return true; + + if (CometInBlackPvP.CanUse(out action, usedUp: true)) return true; + + if (PomMotifPvP.CanUse(out action, usedUp: true)) return true; + if (WingMotifPvP.CanUse(out action, usedUp: true)) return true; + if (ClawMotifPvP.CanUse(out action, usedUp: true)) return true; + if (MawMotifPvP.CanUse(out action, usedUp: true)) return true; + + if (ThunderInMagentaPvP.CanUse(out action)) return true; + if (StoneInYellowPvP.CanUse(out action)) return true; + if (BlizzardInCyanPvP.CanUse(out action)) return true; + + if (WaterInBluePvP.CanUse(out action)) return true; + if (AeroInGreenPvP.CanUse(out action)) return true; + if (FireInRedPvP.CanUse(out action)) return true; + + + + + return base.GeneralGCD(out action); + } + #endregion +} \ No newline at end of file diff --git a/RotationSolver.Basic/Rotations/Basic/PictomancerRotation.cs b/RotationSolver.Basic/Rotations/Basic/PictomancerRotation.cs index 355b16feb..290c16604 100644 --- a/RotationSolver.Basic/Rotations/Basic/PictomancerRotation.cs +++ b/RotationSolver.Basic/Rotations/Basic/PictomancerRotation.cs @@ -833,7 +833,7 @@ static partial void ModifyBlizzardInCyanPvP(ref ActionSetting setting) static partial void ModifyStoneInYellowPvP(ref ActionSetting setting) { - setting.StatusNeed = [StatusID.SubtractivePalette_4102, StatusID.Aetherhues_4100]; + setting.StatusNeed = [StatusID.Aetherhues_4100]; setting.StatusProvide = [StatusID.AetherhuesIi_4101]; setting.CreateConfig = () => new ActionConfig() { @@ -843,7 +843,7 @@ static partial void ModifyStoneInYellowPvP(ref ActionSetting setting) static partial void ModifyThunderInMagentaPvP(ref ActionSetting setting) { - setting.StatusNeed = [StatusID.SubtractivePalette_4102, StatusID.AetherhuesIi_4101]; + setting.StatusNeed = [StatusID.AetherhuesIi_4101]; setting.CreateConfig = () => new ActionConfig() { AoeCount = 1,