diff --git a/RotationSolver.Basic/Data/StatusID.cs b/RotationSolver.Basic/Data/StatusID.cs
index 4456aaa32..9fa8505ff 100644
--- a/RotationSolver.Basic/Data/StatusID.cs
+++ b/RotationSolver.Basic/Data/StatusID.cs
@@ -281,6 +281,8 @@ public enum StatusID : ushort
///
NascentChaos = 1897,
+ InnerStrength = 2663,
+
///
/// 战场风暴
///
diff --git a/RotationSolver.Default/Tank/DRK_Default.cs b/RotationSolver.Default/Tank/DRK_Default.cs
index c1daa318d..fd147d0c4 100644
--- a/RotationSolver.Default/Tank/DRK_Default.cs
+++ b/RotationSolver.Default/Tank/DRK_Default.cs
@@ -53,8 +53,18 @@ protected override IRotationConfigSet CreateConfiguration()
protected override IAction CountDownAction(float remainTime)
{
//Provoke when has Shield.
- if (HasTankStance && remainTime <= Service.Config.AbilitiesInterval && Provoke.CanUse(out var act)) return act;
- if (remainTime <= 2 && UseBurstMedicine(out act)) return act;
+ if(remainTime <= Service.Config.AbilitiesInterval)
+ {
+ if (HasTankStance)
+ {
+ if (Provoke.CanUse(out var act1)) return act1;
+ }
+ else
+ {
+ if (Unmend.CanUse(out var act1)) return act1;
+ }
+ }
+ if (remainTime <= 2 && UseBurstMedicine(out var act)) return act;
if (remainTime <= 3 && TheBlackestNight.CanUse(out act)) return act;
if (remainTime <= 4 && BloodWeapon.CanUse(out act)) return act;
return base.CountDownAction(remainTime);
diff --git a/RotationSolver.Default/Tank/WAR_Default.cs b/RotationSolver.Default/Tank/WAR_Default.cs
index 01e766194..f28a5f063 100644
--- a/RotationSolver.Default/Tank/WAR_Default.cs
+++ b/RotationSolver.Default/Tank/WAR_Default.cs
@@ -1,39 +1,44 @@
namespace RotationSolver.Default.Tank;
[SourceCode("https://github.com/ArchiDog1998/RotationSolver/blob/main/RotationSolver.Default/Tank/WAR_Default.cs")]
+[LinkDescription("https://cdn.discordapp.com/attachments/277962807813865472/963548326433796116/unknown.png")]
public sealed class WAR_Default : WAR_Base
{
- public override string GameVersion => "6.0";
+ public override string GameVersion => "6.35";
- public override string RotationName => "Default";
+ public override string RotationName => "All-Around";
- [RotationDesc(ActionID.ShakeItOff, ActionID.Reprisal)]
- protected override bool DefenseAreaAbility(byte abilitiesRemaining, out IAction act)
- {
- if (ShakeItOff.CanUse(out act, CanUseOption.MustUse)) return true;
- if (Reprisal.CanUse(out act, CanUseOption.MustUse)) return true;
- return false;
- }
+ private static bool InBurstStatus => !Player.WillStatusEndGCD(0, 0, false, StatusID.InnerStrength);
- [RotationDesc(ActionID.PrimalRend)]
- protected override bool MoveForwardGCD(out IAction act)
+ protected override IAction CountDownAction(float remainTime)
{
- if (PrimalRend.CanUse(out act, CanUseOption.MustUse)) return true;
- return false;
+ if (remainTime <= Service.Config.AbilitiesInterval)
+ {
+ if (HasTankStance)
+ {
+ if (Provoke.CanUse(out var act1)) return act1;
+ }
+ else
+ {
+ if (Tomahawk.CanUse(out var act1)) return act1;
+ }
+ }
+ return base.CountDownAction(remainTime);
}
protected override bool GeneralGCD(out IAction act)
{
- //��㹥��
- if (PrimalRend.CanUse(out act, CanUseOption.MustUse) && !IsMoving)
- {
- if (PrimalRend.Target.DistanceToPlayer() < 1) return true;
- }
-
- if (SteelCyclone.CanUse(out act)) return true;
if(!Player.WillStatusEndGCD(3, 0, true, StatusID.SurgingTempest))
{
- if (InnerBeast.CanUse(out act)) return true;
+ if (!IsMoving && InBurstStatus && PrimalRend.CanUse(out act, CanUseOption.MustUse))
+ {
+ if (PrimalRend.Target.DistanceToPlayer() < 1) return true;
+ }
+ if (InBurstStatus || !Player.HasStatus(false, StatusID.NascentChaos) || BeastGauge > 80)
+ {
+ if (SteelCyclone.CanUse(out act)) return true;
+ if (InnerBeast.CanUse(out act)) return true;
+ }
}
if (MythrilTempest.CanUse(out act)) return true;
@@ -45,12 +50,59 @@ protected override bool GeneralGCD(out IAction act)
if (HeavySwing.CanUse(out act)) return true;
if (SpecialType == SpecialCommandType.MoveForward && MoveForwardAbility(1, out act)) return true;
-
if (Tomahawk.CanUse(out act)) return true;
return false;
}
+ protected override bool AttackAbility(byte abilitiesRemaining, out IAction act)
+ {
+ if (Infuriate.CanUse(out act, gcdCountForAbility: 3)) return true;
+
+ if (CombatElapsedLessGCD(1)) return false;
+
+ if (abilitiesRemaining == 1)
+ {
+ if (UseBurstMedicine(out act)) return true;
+ if (Player.HasStatus(false, StatusID.SurgingTempest)
+ && !Player.WillStatusEndGCD(6, 0, true, StatusID.SurgingTempest)
+ || !MythrilTempest.EnoughLevel)
+ {
+ if (Berserk.CanUse(out act)) return true;
+ }
+ }
+
+ if (InBurstStatus)
+ {
+ if (Infuriate.CanUse(out act, CanUseOption.EmptyOrSkipCombo)) return true;
+ }
+
+ if (CombatElapsedLessGCD(4)) return false;
+
+ if (Orogeny.CanUse(out act)) return true;
+ if (Upheaval.CanUse(out act)) return true;
+
+ var option = CanUseOption.MustUse;
+ if (InBurstStatus) option |= CanUseOption.EmptyOrSkipCombo;
+ if (Onslaught.CanUse(out act, option) && !IsMoving) return true;
+
+ return false;
+ }
+
+ protected override bool GeneralAbility(byte abilitiesRemaining, out IAction act)
+ {
+ //Auto healing
+ if (Player.GetHealthRatio() < 0.6f)
+ {
+ if (ThrillOfBattle.CanUse(out act)) return true;
+ if (Equilibrium.CanUse(out act)) return true;
+ }
+
+ if (!HasTankStance && NascentFlash.CanUse(out act)) return true;
+
+ return base.GeneralAbility(abilitiesRemaining, out act);
+ }
+
[RotationDesc(ActionID.RawIntuition, ActionID.Vengeance, ActionID.Rampart, ActionID.RawIntuition, ActionID.Reprisal)]
protected override bool DefenseSingleAbility(byte abilitiesRemaining, out IAction act)
{
@@ -76,28 +128,11 @@ protected override bool DefenseSingleAbility(byte abilitiesRemaining, out IActio
return false;
}
- protected override bool AttackAbility(byte abilitiesRemaining, out IAction act)
+ [RotationDesc(ActionID.ShakeItOff, ActionID.Reprisal)]
+ protected override bool DefenseAreaAbility(byte abilitiesRemaining, out IAction act)
{
- if (!Player.WillStatusEndGCD(3, 0, true, StatusID.SurgingTempest) || !MythrilTempest.EnoughLevel)
- {
- if (!InnerRelease.IsCoolingDown && Berserk.CanUse(out act)) return true;
- }
-
- if (Player.GetHealthRatio() < 0.6f)
- {
- if (ThrillOfBattle.CanUse(out act)) return true;
- if (Equilibrium.CanUse(out act)) return true;
- }
-
- if (!HasTankStance && NascentFlash.CanUse(out act)) return true;
-
- if (Infuriate.CanUse(out act, CanUseOption.EmptyOrSkipCombo)) return true;
-
- if (Orogeny.CanUse(out act)) return true;
- if (Upheaval.CanUse(out act)) return true;
-
- if (Onslaught.CanUse(out act, CanUseOption.MustUse) && !IsMoving) return true;
-
+ if (ShakeItOff.CanUse(out act, CanUseOption.MustUse)) return true;
+ if (Reprisal.CanUse(out act, CanUseOption.MustUse)) return true;
return false;
}
}
diff --git a/RotationSolver.Old/RotationSolver.Old.csproj b/RotationSolver.Old/RotationSolver.Old.csproj
index c77c8c661..73267580c 100644
--- a/RotationSolver.Old/RotationSolver.Old.csproj
+++ b/RotationSolver.Old/RotationSolver.Old.csproj
@@ -54,7 +54,6 @@
-
diff --git a/RotationSolver.Old/Tank/WAR_Old.cs b/RotationSolver.Old/Tank/WAR_Old.cs
new file mode 100644
index 000000000..98181afbe
--- /dev/null
+++ b/RotationSolver.Old/Tank/WAR_Old.cs
@@ -0,0 +1,96 @@
+namespace RotationSolver.Default.Tank;
+
+[SourceCode("https://github.com/ArchiDog1998/RotationSolver/blob/main/RotationSolver.Default/Tank/WAR_Default.cs")]
+public sealed class WAR_Old : WAR_Base
+{
+ public override string GameVersion => "6.0";
+
+ public override string RotationName => "Old";
+
+ [RotationDesc(ActionID.ShakeItOff, ActionID.Reprisal)]
+ protected override bool DefenseAreaAbility(byte abilitiesRemaining, out IAction act)
+ {
+ if (ShakeItOff.CanUse(out act, CanUseOption.MustUse)) return true;
+ if (Reprisal.CanUse(out act, CanUseOption.MustUse)) return true;
+ return false;
+ }
+
+ protected override bool GeneralGCD(out IAction act)
+ {
+ //��㹥��
+ if (PrimalRend.CanUse(out act, CanUseOption.MustUse) && !IsMoving)
+ {
+ if (PrimalRend.Target.DistanceToPlayer() < 1) return true;
+ }
+
+ if (SteelCyclone.CanUse(out act)) return true;
+ if(!Player.WillStatusEndGCD(3, 0, true, StatusID.SurgingTempest))
+ {
+ if (InnerBeast.CanUse(out act)) return true;
+ }
+
+ if (MythrilTempest.CanUse(out act)) return true;
+ if (Overpower.CanUse(out act)) return true;
+
+ if (StormsEye.CanUse(out act)) return true;
+ if (StormsPath.CanUse(out act)) return true;
+ if (Maim.CanUse(out act)) return true;
+ if (HeavySwing.CanUse(out act)) return true;
+
+ if (SpecialType == SpecialCommandType.MoveForward && MoveForwardAbility(1, out act)) return true;
+
+ if (Tomahawk.CanUse(out act)) return true;
+
+ return false;
+ }
+
+ [RotationDesc(ActionID.RawIntuition, ActionID.Vengeance, ActionID.Rampart, ActionID.RawIntuition, ActionID.Reprisal)]
+ protected override bool DefenseSingleAbility(byte abilitiesRemaining, out IAction act)
+ {
+ if (abilitiesRemaining == 2)
+ {
+ if (HostileTargets.Count() > 1)
+ {
+ //10
+ if (RawIntuition.CanUse(out act)) return true;
+ }
+
+ //30
+ if (Vengeance.CanUse(out act)) return true;
+
+ //20
+ if (Rampart.CanUse(out act)) return true;
+
+ //10
+ if (RawIntuition.CanUse(out act)) return true;
+ }
+ if (Reprisal.CanUse(out act)) return true;
+
+ return false;
+ }
+
+ protected override bool AttackAbility(byte abilitiesRemaining, out IAction act)
+ {
+ if (!Player.WillStatusEndGCD(3, 0, true, StatusID.SurgingTempest) || !MythrilTempest.EnoughLevel)
+ {
+ if (Berserk.CanUse(out act)) return true;
+ }
+
+ if (Player.GetHealthRatio() < 0.6f)
+ {
+ if (ThrillOfBattle.CanUse(out act)) return true;
+ if (Equilibrium.CanUse(out act)) return true;
+ }
+
+ if (!HasTankStance && NascentFlash.CanUse(out act)) return true;
+
+ if (Infuriate.CanUse(out act, CanUseOption.EmptyOrSkipCombo)) return true;
+
+ if (Orogeny.CanUse(out act)) return true;
+ if (Upheaval.CanUse(out act)) return true;
+
+ if (Onslaught.CanUse(out act, CanUseOption.MustUse) && !IsMoving) return true;
+
+ return false;
+ }
+}