Skip to content
This repository has been archived by the owner on Aug 28, 2024. It is now read-only.

Commit

Permalink
feat: new War rotation.
Browse files Browse the repository at this point in the history
  • Loading branch information
ArchiDog1998 committed Mar 31, 2023
1 parent 30511f7 commit 7d8ab88
Show file tree
Hide file tree
Showing 5 changed files with 188 additions and 46 deletions.
2 changes: 2 additions & 0 deletions RotationSolver.Basic/Data/StatusID.cs
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,8 @@ public enum StatusID : ushort
/// </summary>
NascentChaos = 1897,

InnerStrength = 2663,

/// <summary>
/// 战场风暴
/// </summary>
Expand Down
14 changes: 12 additions & 2 deletions RotationSolver.Default/Tank/DRK_Default.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
121 changes: 78 additions & 43 deletions RotationSolver.Default/Tank/WAR_Default.cs
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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)
{
Expand All @@ -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;
}
}
1 change: 0 additions & 1 deletion RotationSolver.Old/RotationSolver.Old.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@
<ItemGroup>
<Folder Include="Healer\" />
<Folder Include="Magical\" />
<Folder Include="Tank\" />
<Folder Include="Ranged\" />
</ItemGroup>
</Project>
96 changes: 96 additions & 0 deletions RotationSolver.Old/Tank/WAR_Old.cs
Original file line number Diff line number Diff line change
@@ -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;
}
}

0 comments on commit 7d8ab88

Please sign in to comment.