From 80b282ded0d9b4f565fd002355a071657c4a3767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E6=B0=B4?= <1123993881@qq.com> Date: Thu, 2 Mar 2023 16:19:46 +0800 Subject: [PATCH] fix: add PLD Test rotation. --- RotationSolver/Rotations/Basic/PLD_Base.cs | 10 ++-- .../CustomRotation/CustomRotation_Medicine.cs | 2 +- RotationSolver/Rotations/Tank/PLD/PLD_Test.cs | 54 +++++++++---------- 3 files changed, 31 insertions(+), 35 deletions(-) diff --git a/RotationSolver/Rotations/Basic/PLD_Base.cs b/RotationSolver/Rotations/Basic/PLD_Base.cs index c5dd00bcf..51804b768 100644 --- a/RotationSolver/Rotations/Basic/PLD_Base.cs +++ b/RotationSolver/Rotations/Basic/PLD_Base.cs @@ -13,6 +13,10 @@ internal abstract class PLD_Base : CustomRotation.CustomRotation { private static PLDGauge JobGauge => Service.JobGauges.Get(); + protected static bool HasDivineMight => !Player.WillStatusEndGCD(0, 0, true, StatusID.DivineMight); + + protected static bool HasFightOrFlight => !Player.WillStatusEndGCD(0, 0, true, StatusID.FightOrFlight); + /// /// ����� /// @@ -47,7 +51,6 @@ internal abstract class PLD_Base : CustomRotation.CustomRotation TargetStatus = new[] { StatusID.GoringBlade, - StatusID.BladeofValor, } }; @@ -155,10 +158,7 @@ internal abstract class PLD_Base : CustomRotation.CustomRotation /// /// ����֮�� /// - public static IBaseAction BladeofFaith { get; } = new BaseAction(ActionID.BladeofFaith) - { - StatusNeed = new[] { StatusID.ReadyForBladeofFaith }, - }; + public static IBaseAction BladeofFaith { get; } = new BaseAction(ActionID.BladeofFaith); /// /// �������� diff --git a/RotationSolver/Rotations/CustomRotation/CustomRotation_Medicine.cs b/RotationSolver/Rotations/CustomRotation/CustomRotation_Medicine.cs index 9fe2d5e5f..d789d9742 100644 --- a/RotationSolver/Rotations/CustomRotation/CustomRotation_Medicine.cs +++ b/RotationSolver/Rotations/CustomRotation/CustomRotation_Medicine.cs @@ -30,7 +30,7 @@ protected bool UseBurstMedicine(out IAction act) { act = null; - if (!IsFullParty) return false; + if (!IsFullParty || !InCombat) return false; if (Service.ClientState.LocalPlayer?.Level < 90) return false; var role = Job.GetJobRole(); diff --git a/RotationSolver/Rotations/Tank/PLD/PLD_Test.cs b/RotationSolver/Rotations/Tank/PLD/PLD_Test.cs index 0e8b7bc79..2901e878b 100644 --- a/RotationSolver/Rotations/Tank/PLD/PLD_Test.cs +++ b/RotationSolver/Rotations/Tank/PLD/PLD_Test.cs @@ -4,64 +4,59 @@ using RotationSolver.Data; using RotationSolver.Helpers; using RotationSolver.Rotations.Basic; -using RotationSolver.Updaters; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace RotationSolver.Rotations.Tank.PLD; +[RotationDesc("The whole rotation's burst is base on this:")] +[RotationDesc(ActionID.FightorFlight)] internal class PLD_Test : PLD_Base { public override string GameVersion => "6.31"; public override string RotationName => "Test"; - public override string Description => "NO PRE-PULL FOF OPENER"; + public override string Description => "Tentative v1.2"; + private protected override IRotationConfigSet CreateConfiguration() { return base.CreateConfiguration() .SetBool("UseDivineVeilPre", false, "DivineVeilPre in 15 seconds counting down."); } + private protected override IAction CountDownAction(float remainTime) { - if (remainTime <= HolySpirit.CastTime + Service.Configuration.CountDownAhead + if (remainTime < HolySpirit.CastTime + Service.Configuration.CountDownAhead && HolySpirit.CanUse(out var act)) return act; - if (Configs.GetBool("UseDivineVeilPre") && remainTime <= 15 + if (remainTime < 15 && Configs.GetBool("UseDivineVeilPre") && DivineVeil.CanUse(out act)) return act; return base.CountDownAction(remainTime); } - private protected override bool EmergencyAbility(byte abilitiesRemaining, IAction nextGCD, out IAction act) - { - if (abilitiesRemaining == 1 && nextGCD.IsTheSameTo(true, RiotBlade, GoringBlade)) - { - if (FightorFlight.CanUse(out act)) return true; - } - return base.EmergencyAbility(abilitiesRemaining, nextGCD, out act); - } - private protected override bool AttackAbility(byte abilitiesRemaining, out IAction act) { - if(CombatElapsedLess(6) ) - { - if(FightorFlight.CanUse(out act)) return true; - } - else if(InBurst) + act = null; + + if (abilitiesRemaining == 1 && InCombat) { - if(UseBurstMedicine(out act)) return true; + if (UseBurstMedicine(out act)) return true; + if (InBurst && FightorFlight.CanUse(out act)) return true; } + if (CombatElapsedLess(5)) return false; if (CircleofScorn.CanUse(out act, mustUse: true)) return true; - if (SpiritsWithin.CanUse(out act, mustUse: true)) return true; if (Expiacion.CanUse(out act, mustUse: true)) return true; - act = null; + if (SpiritsWithin.CanUse(out act, mustUse: true)) return true; + + if (Player.WillStatusEndGCD(4, 0, true, StatusID.FightOrFlight) + && Requiescat.CanUse(out act, mustUse: true)) return true; + + if (HasFightOrFlight && Intervene.CanUse(out act, true, true)) return true; return false; } + private static bool UseHoly => HasDivineMight && !FightorFlight.WillHaveOneChargeGCD(1); + private protected override bool GeneralGCD(out IAction act) { if (BladeofValor.CanUse(out act, mustUse: true)) return true; @@ -70,14 +65,15 @@ private protected override bool GeneralGCD(out IAction act) if (Confiteor.CanUse(out act, mustUse: true)) return true; //AOE - if (Player.HasStatus(true, StatusID.Requiescat) - && HolyCircle.CanUse(out act)) return true; + if (UseHoly && HolyCircle.CanUse(out act)) return true; if (Prominence.CanUse(out act)) return true; if (TotalEclipse.CanUse(out act)) return true; //Single - if (GoringBlade.CanUse(out act)) return true; // Dot + if (UseHoly && HolySpirit.CanUse(out act)) return true; + if (!CombatElapsedLess(7) && GoringBlade.CanUse(out act)) return true; // Dot if (RageofHalone.CanUse(out act)) return true; + if (!FightorFlight.WillHaveOneChargeGCD(1) && Atonement.CanUse(out act)) return true; if (RiotBlade.CanUse(out act)) return true; if (FastBlade.CanUse(out act)) return true;