diff --git a/Advanced_Rotations/PVE/Ranged_Magic/BLM_Default.cs b/Advanced_Rotations/PVE/Ranged_Magic/BLM_Default.cs index b7f98c9..77bf24f 100644 --- a/Advanced_Rotations/PVE/Ranged_Magic/BLM_Default.cs +++ b/Advanced_Rotations/PVE/Ranged_Magic/BLM_Default.cs @@ -1,31 +1,28 @@  namespace RabbsRotationsNET8.Magical; -[Rotation("Rabbs Infinite Power-dox", CombatType.PvE, GameVersion = "6.58")] +[Rotation("Infinite Power-dox", CombatType.PvE, GameVersion = "7.11")] [SourceCode(Path = "main/DefaultRotations/Magical/BLM_Default.cs")] [Api(4)] public class BLM_Default : BlackMageRotation { - public IBaseAction FixedUS { get; } = new BaseAction((ActionID)16506); + public IBaseAction FixedUS { get; } = new BaseAction((ActionID)16506); - public IBaseAction FixedMF { get; } = new BaseAction((ActionID)158); + public IBaseAction FixedMF { get; } = new BaseAction((ActionID)158); - [RotationConfig(CombatType.PvE, Name = "Use Transpose to Astral Fire before Paradox")] - public bool UseTransposeForParadox { get; set; } = true; + public IBaseAction FixedB4 { get; } = new BaseAction((ActionID)3576); - [RotationConfig(CombatType.PvE, Name = "Extend Astral Fire Time Safely")] - public bool ExtendTimeSafely { get; set; } = false; - - [RotationConfig(CombatType.PvE, Name = @"Use ""Double Paradox"" rotation [N15]")] - public bool UseN15 { get; set; } = false; + public IBaseAction FixedLL { get; } = new BaseAction((ActionID)3573); public bool NextGCDisInstant => Player.HasStatus(true, StatusID.Triplecast, StatusID.Swiftcast); + public bool CanMakeInstant => TriplecastPvE.Cooldown.CurrentCharges > 0 || !SwiftcastPvE.Cooldown.IsCoolingDown; + protected override IAction? CountDownAction(float remainTime) { IAction act; - if (remainTime < 1) + if (remainTime < 10) { if (TriplecastPvE.CanUse(out act, usedUp: true) && !NextGCDisInstant) return act; } @@ -38,133 +35,188 @@ public class BLM_Default : BlackMageRotation protected override bool AttackAbility(IAction nextGCD, out IAction? act) { + if (InCombat) { - if (AstralSoulStacks == 6 && CurrentMp > 0) + + if (!IsPolyglotStacksMaxed) { - if (DespairPvE.CanUse(out act)) return true; + if (AmplifierPvE.CanUse(out act)) return true; } - if (TriplecastPvE.Cooldown.CurrentCharges == 2) + + + if (!NextGCDisInstant) { - if (AstralSoulStacks == 6) + if (InAstralFire && !HasFire && CurrentMp == 0 && PolyglotStacks == 0) { - if (TriplecastPvE.CanUse(out act)) return true; + if (TriplecastPvE.CanUse(out act, usedUp: true)) return true; + if (SwiftcastPvE.CanUse(out act)) return true; } - - if (InUmbralIce && UmbralHearts == 0) + if (InUmbralIce) { - if (TriplecastPvE.CanUse(out act)) return true; + if (UmbralIceStacks < 3) + { + if (TriplecastPvE.CanUse(out act, usedUp: true)) return true; + if (SwiftcastPvE.CanUse(out act)) return true; + } + if (UmbralHearts < 3) + { + if (TriplecastPvE.CanUse(out act, usedUp: true)) return true; + if (SwiftcastPvE.CanUse(out act)) return true; + } + } + if (!InUmbralIce && !InAstralFire) + { + if (CanMakeInstant) + { + if (TriplecastPvE.CanUse(out act, usedUp: true)) return true; + if (SwiftcastPvE.CanUse(out act)) return true; + } } } - if (TriplecastPvE.Cooldown.CurrentCharges > 0 && InAstralFire) - { - if (TriplecastPvE.CanUse(out act)) return true; - } - if (AstralSoulStacks == 6 && InAstralFire && !NextGCDisInstant) - { - if (SwiftcastPvE.CanUse(out act)) return true; - } + } - if (IsPolyglotStacksMaxed) - { - if (FoulPvE.CanUse(out act)) return true; - if (XenoglossyPvE.CanUse(out act)) return true; - } - if (UmbralIceStacks == 3 && UmbralHearts == 3 && InUmbralIce) - { - if (TransposePvE.CanUse(out act)) return true; - } + return base.AttackAbility(nextGCD, out act); + } - if (InAstralFire && AstralFireStacks == 3 && !Player.HasStatus(true, StatusID.Firestarter)) + protected override bool EmergencyAbility(IAction nextGCD, out IAction? act) + { + if (!NextGCDisInstant) + { + if (InAstralFire && !HasFire && CurrentMp == 0 && PolyglotStacks == 0) { - if (TransposePvE.CanUse(out act)) return true; + if (TriplecastPvE.CanUse(out act, usedUp: true)) return true; + if (SwiftcastPvE.CanUse(out act)) return true; } - - //manafont can only be used in astral fire, it gives 3 umbral hearts. If we are at 2 or more our next umbral soul will kick off paradox - if (InAstralFire && UmbralHearts < 2 && !NextGCDisInstant && AstralSoulStacks == 0) + if (InUmbralIce) { - if (FixedMF.CanUse(out act)) return true; + if (UmbralIceStacks < 3) + { + if (TriplecastPvE.CanUse(out act, usedUp: true)) return true; + if (SwiftcastPvE.CanUse(out act)) return true; + } + if (UmbralHearts < 3) + { + if (TriplecastPvE.CanUse(out act, usedUp: true)) return true; + if (SwiftcastPvE.CanUse(out act)) return true; + } } - - if (UmbralHearts < 2 && !NextGCDisInstant && AstralSoulStacks == 0) + if (!InUmbralIce && !InAstralFire) { - if (SwiftcastPvE.CanUse(out act)) return true; + if (CanMakeInstant) + { + if (TriplecastPvE.CanUse(out act, usedUp: true)) return true; + if (SwiftcastPvE.CanUse(out act)) return true; + } } } - - return base.AttackAbility(nextGCD, out act); - } - - protected override bool EmergencyAbility(IAction nextGCD, out IAction? act) - { - - return base.EmergencyAbility(nextGCD, out act); } protected override bool GeneralGCD(out IAction? act) { - - if (IsParadoxActive) - { - if (ParadoxPvE.CanUse(out act)) return true; - } - if (NextGCDisInstant) + + if (!NextGCDisInstant && InCombat) { - if (InUmbralIce && UmbralHearts == 0) + if (InAstralFire && !HasFire && CurrentMp == 0 && PolyglotStacks == 0) { - if (BlizzardIvPvE.CanUse(out act)) return true; + if (TriplecastPvE.CanUse(out act, usedUp: true)) return true; + if (SwiftcastPvE.CanUse(out act)) return true; } - if (AstralSoulStacks == 6) + if (InUmbralIce) { - if (FlareStarPvE.CanUse(out act)) return true; + if (UmbralIceStacks < 3) + { + if (TriplecastPvE.CanUse(out act, usedUp: true)) return true; + if (SwiftcastPvE.CanUse(out act)) return true; + } + if (UmbralHearts < 3) + { + if (TriplecastPvE.CanUse(out act, usedUp: true)) return true; + if (SwiftcastPvE.CanUse(out act)) return true; + } } - if (InAstralFire && AstralSoulStacks < 6) + if (!InUmbralIce && !InAstralFire) { - if (FlarePvE.CanUse(out act, skipAoeCheck:true)) return true; + if (CanMakeInstant) + { + if (TriplecastPvE.CanUse(out act, usedUp: true)) return true; + if (SwiftcastPvE.CanUse(out act)) return true; + } } - } + if (NextGCDisInstant) + { - if (!InAstralFire && !InUmbralIce) + if (InUmbralIce) + { + if (UmbralIceStacks < 3) + { + if (BlizzardIiiPvE.CanUse(out act)) return true; + } + if (UmbralHearts < 3) + { + if (BlizzardIvPvE.CanUse(out act)) return true; + } + } + } + if (!NextGCDisInstant) { - if (BlizzardIiiPvE.CanUse(out act)) return true; + if (FoulPvE.CanUse(out act)) return true; + if (XenoglossyPvE.CanUse(out act)) return true; + } + if (IsParadoxActive) + { + if (ParadoxPvE.CanUse(out act)) return true; } - if (HostileTarget != null && (!HostileTarget.HasStatus(true, StatusID.Thunder, StatusID.ThunderIi, StatusID.ThunderIii, StatusID.ThunderIv, StatusID.HighThunder_3872, StatusID.HighThunder) || HostileTarget.WillStatusEnd(3, true, StatusID.Thunder, StatusID.ThunderIi, StatusID.ThunderIii, StatusID.ThunderIv, StatusID.HighThunder_3872, StatusID.HighThunder))) { - if (ThunderIiPvE.CanUse(out act)) return true; if (ThunderPvE.CanUse(out act)) return true; } - if (InUmbralIce && (UmbralIceStacks < 3 || UmbralHearts < 3) && NextGCDisInstant) + if (UmbralIceStacks == 3 && UmbralHearts == 3 && InUmbralIce) { - if (BlizzardIvPvE.CanUse(out act)) return true; + if (TransposePvE.CanUse(out act)) return true; } - if (InUmbralIce && (UmbralIceStacks <3 || UmbralHearts < 3) && !NextGCDisInstant) + if (InAstralFire && AstralFireStacks == 3 && !Player.HasStatus(true, StatusID.Firestarter) && CurrentMp < 800) { - if (FixedUS.CanUse(out act)) return true; + if (TransposePvE.CanUse(out act)) return true; } - if (InAstralFire && Player.HasStatus(true, StatusID.Firestarter)) + + + if (InAstralFire) { - if (FireIiiPvE.CanUse(out act)) return true; + if (Player.HasStatus(true, StatusID.Firestarter)) + { + if (FireIiiPvE.CanUse(out act)) return true; + } + if (CurrentMp >= 800) + { + if (DespairPvE.CanUse(out act)) return true; + } } - return base.GeneralGCD(out act); - } + if (InUmbralIce) + { + if (FixedUS.CanUse(out act, skipCastingCheck: true)) return true; + } - + if (!InUmbralIce && !InAstralFire) + { + if (NextGCDisInstant) + { + if (FireIiiPvE.CanUse(out act)) return true; + } + } - [RotationDesc(ActionID.BetweenTheLinesPvE, ActionID.LeyLinesPvE)] - protected override bool HealSingleAbility(IAction nextGCD, out IAction? act) - { - if (BetweenTheLinesPvE.CanUse(out act)) return true; - if (LeyLinesPvE.CanUse(out act)) return true; + if (ScathePvE.CanUse(out act)) return true; - return base.HealSingleAbility(nextGCD, out act); + return base.GeneralGCD(out act); } + + } diff --git a/Advanced_Rotations/RotationInfo.cs b/Advanced_Rotations/RotationInfo.cs index 7240578..bfb59b2 100644 --- a/Advanced_Rotations/RotationInfo.cs +++ b/Advanced_Rotations/RotationInfo.cs @@ -4,5 +4,5 @@ internal class RotationInfo { internal const string USERNAME = $"Rabbs"; - internal const string VERSION = "1.1.3.5"; + internal const string VERSION = "4.0.0.1"; }