diff --git a/RotationSolver/Actions/BaseAction/BaseAction_Target.cs b/RotationSolver/Actions/BaseAction/BaseAction_Target.cs index 32307c6ee..f1a12edf5 100644 --- a/RotationSolver/Actions/BaseAction/BaseAction_Target.cs +++ b/RotationSolver/Actions/BaseAction/BaseAction_Target.cs @@ -54,13 +54,13 @@ internal static bool TankDefenseSelf(BattleChara chara) { return TargetUpdater.TarOnMeTargets.Any(); } - internal static bool TankBreakOtherCheck(ClassJobID id, BattleChara chara) + internal static bool TankBreakOtherCheck(ClassJobID id) { var tankHealth = id.GetHealthForDyingTank(); return TargetUpdater.HasHostilesInRange && Service.ClientState.LocalPlayer.GetHealthRatio() < tankHealth - && TargetUpdater.PartyMembersAverHP > tankHealth + 0.05f; + && TargetUpdater.PartyMembersAverHP > tankHealth + 0.01f; } private bool FindTarget(bool mustUse, out BattleChara target) diff --git a/RotationSolver/Data/StatusID.cs b/RotationSolver/Data/StatusID.cs index 21a33db82..76425a7f2 100644 --- a/RotationSolver/Data/StatusID.cs +++ b/RotationSolver/Data/StatusID.cs @@ -249,9 +249,7 @@ internal enum StatusID : ushort /// /// 铁壁 /// - Rampart1 = 71, - Rampart2 = 1191, - Rampart3 = 1978, + Rampart = 1191, /// /// 复仇 @@ -1119,4 +1117,6 @@ internal enum StatusID : ushort Aetherpact = 1223, ConfiteorReady = 3019, + + Bulwark = 77, } diff --git a/RotationSolver/Rotations/Basic/DRK_Base.cs b/RotationSolver/Rotations/Basic/DRK_Base.cs index 4965e2331..5f41b92c3 100644 --- a/RotationSolver/Rotations/Basic/DRK_Base.cs +++ b/RotationSolver/Rotations/Basic/DRK_Base.cs @@ -212,7 +212,7 @@ protected static bool DarkSideEndAfterGCD(uint gctCount = 0, uint abilityCount = private protected override bool EmergencyAbility(byte abilitiesRemaining, IAction nextGCD, out IAction act) { //行尸走肉 - if (LivingDead.CanUse(out act) && BaseAction.TankBreakOtherCheck(JobIDs[0], LivingDead.Target)) return true; + if (LivingDead.CanUse(out act) && BaseAction.TankBreakOtherCheck(JobIDs[0])) return true; return base.EmergencyAbility(abilitiesRemaining, nextGCD, out act); } diff --git a/RotationSolver/Rotations/Basic/GNB_Base.cs b/RotationSolver/Rotations/Basic/GNB_Base.cs index 3a0fa4b16..98a52dd1c 100644 --- a/RotationSolver/Rotations/Basic/GNB_Base.cs +++ b/RotationSolver/Rotations/Basic/GNB_Base.cs @@ -231,7 +231,7 @@ internal abstract class GNB_Base : CustomRotation.CustomRotation private protected override bool EmergencyAbility(byte abilitiesRemaining, IAction nextGCD, out IAction act) { - if (Superbolide.CanUse(out act) && BaseAction.TankBreakOtherCheck(JobIDs[0], Superbolide.Target)) return true; + if (Superbolide.CanUse(out act) && BaseAction.TankBreakOtherCheck(JobIDs[0])) return true; return base.EmergencyAbility(abilitiesRemaining, nextGCD, out act); } diff --git a/RotationSolver/Rotations/Basic/PLD_Base.cs b/RotationSolver/Rotations/Basic/PLD_Base.cs index 51804b768..8774bcbf1 100644 --- a/RotationSolver/Rotations/Basic/PLD_Base.cs +++ b/RotationSolver/Rotations/Basic/PLD_Base.cs @@ -104,7 +104,7 @@ internal abstract class PLD_Base : CustomRotation.CustomRotation /// /// ��ʥ���� /// - public static IBaseAction HallowedGround { get; } = new BaseAction(ActionID.HallowedGround, isTimeline: true); + public static IBaseAction HallowedGround { get; } = new BaseAction(ActionID.HallowedGround, true, isTimeline: true); /// /// ʥ��Ļ�� @@ -200,17 +200,20 @@ internal abstract class PLD_Base : CustomRotation.CustomRotation /// /// ���� /// - public static IBaseAction Sheltron { get; } = new BaseAction(ActionID.Sheltron, isTimeline: true) + public static IBaseAction Sheltron { get; } = new BaseAction(ActionID.Sheltron, true, isTimeline: true) { ActionCheck = Cover.ActionCheck, }; - public static IBaseAction Bulwark { get; } = new BaseAction(ActionID.Bulwark, isTimeline: true); + public static IBaseAction Bulwark { get; } = new BaseAction(ActionID.Bulwark, true, isTimeline: true) + { + StatusProvide = Rampart.StatusProvide, + }; 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; + if (HallowedGround.CanUse(out act) && BaseAction.TankBreakOtherCheck(JobIDs[0])) return true; return base.EmergencyAbility(abilitiesRemaining, nextGCD, out act); } diff --git a/RotationSolver/Rotations/Basic/WAR_Base.cs b/RotationSolver/Rotations/Basic/WAR_Base.cs index f3fe5d192..5ff2264b9 100644 --- a/RotationSolver/Rotations/Basic/WAR_Base.cs +++ b/RotationSolver/Rotations/Basic/WAR_Base.cs @@ -181,7 +181,7 @@ internal abstract class WAR_Base : CustomRotation.CustomRotation private protected override bool EmergencyAbility(byte abilitiesRemaining, IAction nextGCD, out IAction act) { //���� ���Ѫ�����ˡ� - if (Holmgang.CanUse(out act) && BaseAction.TankBreakOtherCheck(JobIDs[0], Holmgang.Target)) return true; + if (Holmgang.CanUse(out act) && BaseAction.TankBreakOtherCheck(JobIDs[0])) return true; return base.EmergencyAbility(abilitiesRemaining, nextGCD, out act); } diff --git a/RotationSolver/Rotations/CustomRotation/CustomRotation_Actions.cs b/RotationSolver/Rotations/CustomRotation/CustomRotation_Actions.cs index 6b4c08075..a10df3d51 100644 --- a/RotationSolver/Rotations/CustomRotation/CustomRotation_Actions.cs +++ b/RotationSolver/Rotations/CustomRotation/CustomRotation_Actions.cs @@ -105,7 +105,7 @@ internal RoleAction(ActionID actionID, JobRole[] roles, bool isFriendly = false, StatusProvide = new StatusID[] { StatusID.Superbolide, StatusID.HallowedGround, - StatusID.Rampart1, StatusID.Rampart2, StatusID.Rampart3, + StatusID.Rampart, StatusID.Bulwark, //原初的直觉和血气 StatusID.RawIntuition, StatusID.Bloodwhetting, //复仇 diff --git a/RotationSolver/Windows/OverlayWindow.cs b/RotationSolver/Windows/OverlayWindow.cs index f51c700a3..b7bc1df8e 100644 --- a/RotationSolver/Windows/OverlayWindow.cs +++ b/RotationSolver/Windows/OverlayWindow.cs @@ -16,7 +16,7 @@ namespace RotationSolver.Windows; internal static class OverlayWindow { - internal static BattleChara EnemyLocationTarget; + internal static BattleChara EnemyLocationTarget { get; set; } internal static EnemyPositional ShouldPositional { get; set; } = EnemyPositional.None; public static void Draw() {