From d5cb6419f122e4c36c471d8cae6e7551053a3283 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=8B=E6=B0=B4?= <1123993881@qq.com>
Date: Wed, 1 Mar 2023 17:30:12 +0800
Subject: [PATCH] fix: try to add PLD.
---
RotationSolver/Data/ActionID.cs | 2 +
RotationSolver/Data/StatusID.cs | 4 +
RotationSolver/Rotations/Basic/PLD_Base.cs | 9 +-
.../Rotations/Tank/PLD/PLD_Default.cs | 5 +-
RotationSolver/Rotations/Tank/PLD/PLD_Test.cs | 123 ++++++++++++++++++
5 files changed, 139 insertions(+), 4 deletions(-)
create mode 100644 RotationSolver/Rotations/Tank/PLD/PLD_Test.cs
diff --git a/RotationSolver/Data/ActionID.cs b/RotationSolver/Data/ActionID.cs
index fbf2c1330..7629083f5 100644
--- a/RotationSolver/Data/ActionID.cs
+++ b/RotationSolver/Data/ActionID.cs
@@ -2020,6 +2020,8 @@ public enum ActionID : uint
///
IronWill = 28,
+ Bulwark = 22,
+
///
/// 先锋剑
///
diff --git a/RotationSolver/Data/StatusID.cs b/RotationSolver/Data/StatusID.cs
index 00c755856..21a33db82 100644
--- a/RotationSolver/Data/StatusID.cs
+++ b/RotationSolver/Data/StatusID.cs
@@ -656,6 +656,8 @@ internal enum StatusID : ushort
///
BladeofValor = 2721,
+ DivineMight = 2673,
+
///
/// 赎罪剑
///
@@ -1115,4 +1117,6 @@ internal enum StatusID : ushort
CircleOfPower = 738,
Aetherpact = 1223,
+
+ ConfiteorReady = 3019,
}
diff --git a/RotationSolver/Rotations/Basic/PLD_Base.cs b/RotationSolver/Rotations/Basic/PLD_Base.cs
index 0f67ec69f..c5dd00bcf 100644
--- a/RotationSolver/Rotations/Basic/PLD_Base.cs
+++ b/RotationSolver/Rotations/Basic/PLD_Base.cs
@@ -168,7 +168,10 @@ internal abstract class PLD_Base : CustomRotation.CustomRotation
///
/// ����
///
- public static IBaseAction Confiteor { get; } = new BaseAction(ActionID.Confiteor);
+ public static IBaseAction Confiteor { get; } = new BaseAction(ActionID.Confiteor)
+ {
+ StatusNeed = new StatusID[] {StatusID.ConfiteorReady},
+ };
///
/// ʥ��
@@ -202,10 +205,12 @@ internal abstract class PLD_Base : CustomRotation.CustomRotation
ActionCheck = Cover.ActionCheck,
};
+ public static IBaseAction Bulwark { get; } = new BaseAction(ActionID.Bulwark, isTimeline: true);
+
+
private protected override bool EmergencyAbility(byte abilitiesRemaining, IAction nextGCD, out IAction act)
{
if (HallowedGround.CanUse(out act) && BaseAction.TankBreakOtherCheck(JobIDs[0], HallowedGround.Target)) return true;
- //��ʥ���� ���л�����ˡ�
return base.EmergencyAbility(abilitiesRemaining, nextGCD, out act);
}
diff --git a/RotationSolver/Rotations/Tank/PLD/PLD_Default.cs b/RotationSolver/Rotations/Tank/PLD/PLD_Default.cs
index 9f8d565bf..bd36684f8 100644
--- a/RotationSolver/Rotations/Tank/PLD/PLD_Default.cs
+++ b/RotationSolver/Rotations/Tank/PLD/PLD_Default.cs
@@ -15,8 +15,9 @@ internal sealed class PLD_Default : PLD_Base
private protected override IRotationConfigSet CreateConfiguration()
{
- return base.CreateConfiguration().SetBool("UseDivineVeilPre", false, "DivineVeilPre in 15 seconds.")
- .SetBool("UseHolySpiritPre", true, "use HolySpirit in 2 seconds");
+ return base.CreateConfiguration()
+ .SetBool("UseDivineVeilPre", false, "DivineVeilPre in 15 seconds.")
+ .SetBool("UseHolySpiritPre", true, "use HolySpirit in 2 seconds");
}
private protected override IAction CountDownAction(float remainTime)
{
diff --git a/RotationSolver/Rotations/Tank/PLD/PLD_Test.cs b/RotationSolver/Rotations/Tank/PLD/PLD_Test.cs
new file mode 100644
index 000000000..91f52ed33
--- /dev/null
+++ b/RotationSolver/Rotations/Tank/PLD/PLD_Test.cs
@@ -0,0 +1,123 @@
+using RotationSolver.Actions;
+using RotationSolver.Attributes;
+using RotationSolver.Configuration.RotationConfig;
+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;
+
+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";
+ 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
+ && HolySpirit.CanUse(out var act)) return act;
+
+ if (Configs.GetBool("UseDivineVeilPre") && remainTime <= 15
+ && 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)
+ {
+ if(UseTincture(out act)) return true;
+ }
+
+ 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;
+ return false;
+ }
+
+ private protected override bool GeneralGCD(out IAction act)
+ {
+ if (BladeofValor.CanUse(out act, mustUse: true)) return true;
+ if (BladeofTruth.CanUse(out act, mustUse: true)) return true;
+ if (BladeofFaith.CanUse(out act, mustUse: true)) return true;
+ if (Confiteor.CanUse(out act, mustUse: true)) return true;
+
+ //AOE
+ if (Player.HasStatus(true, StatusID.Requiescat)
+ && 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 (RageofHalone.CanUse(out act)) return true;
+ if (RiotBlade.CanUse(out act)) return true;
+ if (FastBlade.CanUse(out act)) return true;
+
+ //Range
+ if (HolySpirit.CanUse(out act)) return true;
+ if (ShieldLob.CanUse(out act)) return true;
+
+ return false;
+ }
+
+ [RotationDesc(ActionID.Reprisal, ActionID.DivineVeil, ActionID.PassageofArms)]
+ private protected override bool DefenceAreaAbility(byte abilitiesRemaining, out IAction act)
+ {
+ if (Reprisal.CanUse(out act, mustUse: true)) return true;
+ if (DivineVeil.CanUse(out act)) return true;
+ if (PassageofArms.CanUse(out act)) return true;
+ return false;
+ }
+
+ [RotationDesc(ActionID.Sentinel, ActionID.Rampart, ActionID.Bulwark, ActionID.Sheltron, ActionID.Reprisal)]
+ private protected override bool DefenceSingleAbility(byte abilitiesRemaining, out IAction act)
+ {
+ if (abilitiesRemaining == 2)
+ {
+ //10
+ if (OathGauge >= 90 && Sheltron.CanUse(out act)) return true;
+
+ //30
+ if (Sentinel.CanUse(out act)) return true;
+
+ //20
+ if (Rampart.CanUse(out act)) return true;
+
+ //10
+ if (Bulwark.CanUse(out act)) return true;
+ if (Sheltron.CanUse(out act)) return true;
+ }
+
+ if (Reprisal.CanUse(out act)) return true;
+
+ return false;
+ }
+}