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

lets try this again #262

Merged
merged 8 commits into from
Sep 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 32 additions & 36 deletions BasicRotations/Ranged/zMCH_Beta.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,6 @@ namespace DefaultRotations.Ranged;
public sealed class zMCH_Beta : MachinistRotation
{
#region Config Options
[RotationConfig(CombatType.PvE, Name = "Use new beta Queen logic (attempt to align with burst and otherwise avoid overcap). \nUnchecking this will use the 'experimental' hardcoded timings from the default rotation.")]
private bool NewQueenLogic { get; set; } = true;

[RotationConfig(CombatType.PvE, Name = "Prioritize Barrel Stabilizer use")]
private bool BSPrio { get; set; } = true;

Expand All @@ -17,6 +14,12 @@ public sealed class zMCH_Beta : MachinistRotation

[RotationConfig(CombatType.PvE, Name = "Delay Hypercharge for combo GCD if about to break combo")]
private bool HoldHCForCombo { get; set; } = true;

[RotationConfig(CombatType.PvE, Name = "Use burst medicine in countdown (requires auto burst option on)")]
private bool OpenerBurstMeds { get; set; } = false;

[RotationConfig(CombatType.PvE, Name = "Use burst medicine when available for midfight burst phase (requires auto burst option on)")]
private bool MidfightBurstMeds { get; set; } = false;
#endregion

#region Countdown logic
Expand All @@ -25,8 +28,7 @@ public sealed class zMCH_Beta : MachinistRotation
{
// ReassemblePvE's duration is 5s, need to fire the first GCD before it ends
if (remainTime < 5 && ReassemblePvE.CanUse(out var act)) return act;
// tincture needs to be used on -2s exactly
if (remainTime <= 2 && UseBurstMedicine(out act)) return act;
if (IsBurst && OpenerBurstMeds && remainTime <= 1f && UseBurstMedicine(out act)) return act;
return base.CountDownAction(remainTime);
}
#endregion
Expand All @@ -35,6 +37,8 @@ public sealed class zMCH_Beta : MachinistRotation
// Determines emergency actions to take based on the next planned GCD action.
protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
{
if (IsBurst && MidfightBurstMeds && !CombatElapsedLessGCD(10) && TimeForBurstMeds(out act, nextGCD)) return true;

// Reassemble Logic
// Check next GCD action and conditions for Reassemble.
bool isReassembleUsable =
Expand Down Expand Up @@ -68,23 +72,29 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act)
// Check for not burning Hypercharge below level 52 on AOE
bool LowLevelHyperCheck = !AutoCrossbowPvE.EnoughLevel && SpreadShotPvE.CanUse(out _);

// Rook Autoturret/Queen Logic
if (CanUseQueenMeow(out act, nextGCD)) return true;

if (IsBurst && BSPrio && BarrelStabilizerPvE.CanUse(out act)) return true;

// Burst
if (IsBurst)
{
if ((IsLastAbility(false, HyperchargePvE) || Heat >= 50 || Player.HasStatus(true, StatusID.Hypercharged)) && ToolChargeSoon(out _) && !LowLevelHyperCheck && WildfirePvE.CanUse(out act)) return true;
if (WildfirePvE.Cooldown.WillHaveOneChargeGCD(1) && (IsLastAbility(false, HyperchargePvE) || Heat >= 50 || Player.HasStatus(true, StatusID.Hypercharged)) && ToolChargeSoon(out _) && !LowLevelHyperCheck)
{
if (WeaponRemain < 1.25f && WildfirePvE.CanUse(out act)) return true;
act = null;
return false;
}

}
// Use Hypercharge if wildfire will not be up in 30 seconds or if you hit 100 heat
if (!LowLevelHyperCheck && !Player.HasStatus(true, StatusID.Reassembled) && (!WildfirePvE.Cooldown.WillHaveOneCharge(30) || (Heat == 100)))
{
if (!HoldHCForCombo || !(LiveComboTime <= 8f && LiveComboTime > 0f) && ToolChargeSoon(out act)) return true;
if ((!HoldHCForCombo || !(LiveComboTime <= 8f && LiveComboTime > 0f)) && ToolChargeSoon(out act)) return true;
}

// Use Ricochet and Gauss if have pooled charges or is burst window
// Rook Autoturret/Queen Logic
if (CanUseQueenMeow(out act, nextGCD)) return true;

// Use Ricochet and Gauss
if (isRicochetMore && RicochetPvE.CanUse(out act, skipAoeCheck: true, usedUp: true)) return true;
if (GaussRoundPvE.CanUse(out act, usedUp: true, skipAoeCheck: true)) return true;

Expand Down Expand Up @@ -176,33 +186,19 @@ private bool ToolChargeSoon(out IAction? act)
}
}

private bool TimeForBurstMeds(out IAction? act, IAction nextGCD)
{
if (AirAnchorPvE.Cooldown.WillHaveOneChargeGCD(1) && BarrelStabilizerPvE.Cooldown.WillHaveOneChargeGCD(6) && WildfirePvE.Cooldown.WillHaveOneChargeGCD(6)) return UseBurstMedicine(out act);
act = null;
return false;
}

private bool CanUseQueenMeow(out IAction? act, IAction nextGCD)
{
// Define conditions under which the Rook Autoturret/Queen can be used.
bool QueenOne = Battery >= 60 && CombatElapsedLess(25f);
bool QueenTwo = Battery >= 90 && !CombatElapsedLess(58f) && CombatElapsedLess(78f);
bool QueenThree = Battery >= 100 && !CombatElapsedLess(111f) && CombatElapsedLess(131f);
bool QueenFour = Battery >= 50 && !CombatElapsedLess(148f) && CombatElapsedLess(168f);
bool QueenFive = Battery >= 60 && !CombatElapsedLess(178f) && CombatElapsedLess(198f);
bool QueenSix = Battery >= 100 && !CombatElapsedLess(230f) && CombatElapsedLess(250f);
bool QueenSeven = Battery >= 50 && !CombatElapsedLess(268f) && CombatElapsedLess(288f);
bool QueenEight = Battery >= 70 && !CombatElapsedLess(296f) && CombatElapsedLess(316f);
bool QueenNine = Battery >= 100 && !CombatElapsedLess(350f) && CombatElapsedLess(370f);
bool QueenTen = Battery >= 50 && !CombatElapsedLess(388f) && CombatElapsedLess(408f);
bool QueenEleven = Battery >= 80 && !CombatElapsedLess(416f) && CombatElapsedLess(436f);
bool QueenTwelve = Battery >= 100 && !CombatElapsedLess(470f) && CombatElapsedLess(490f);
bool QueenThirteen = Battery >= 50 && !CombatElapsedLess(505f) && CombatElapsedLess(525f);
bool QueenFourteen = Battery >= 60 && !CombatElapsedLess(538f) && CombatElapsedLess(558f);
bool QueenFifteen = Battery >= 100 && !CombatElapsedLess(590f) && CombatElapsedLess(610f);

if (
(NewQueenLogic &&
(!CombatElapsedLess(610f)
|| WildfirePvE.Cooldown.WillHaveOneChargeGCD(4)
|| !WildfirePvE.Cooldown.ElapsedAfter(10)
|| (nextGCD.IsTheSameTo(true, CleanShotPvE) && Battery == 100)
|| (nextGCD.IsTheSameTo(true, HotShotPvE, AirAnchorPvE, ChainSawPvE, ExcavatorPvE) && (Battery == 90 || Battery == 100)))
|| !NewQueenLogic && (QueenOne || QueenTwo || QueenThree || QueenFour || QueenFive || QueenSix || QueenSeven || QueenEight || QueenNine || QueenTen || QueenEleven || QueenTwelve || QueenThirteen || QueenFourteen || QueenFifteen)))
if (WildfirePvE.Cooldown.WillHaveOneChargeGCD(4)
|| !WildfirePvE.Cooldown.ElapsedAfter(10)
|| (nextGCD.IsTheSameTo(true, CleanShotPvE) && Battery == 100)
|| (nextGCD.IsTheSameTo(true, HotShotPvE, AirAnchorPvE, ChainSawPvE, ExcavatorPvE) && (Battery == 90 || Battery == 100)))
{
if (RookAutoturretPvE.CanUse(out act)) return true;
}
Expand Down
16 changes: 15 additions & 1 deletion BasicRotations/Ranged/zMCH_Beta_2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ public sealed class zMCH_Beta_2 : MachinistRotation
#region Config Options
[RotationConfig(CombatType.PvE, Name = "Use hardcoded Queen timings\nSlight DPS gain if uninterrupted but possibly loses more from drift or death.")]
private bool UseBalanceQueenTimings { get; set; }

[RotationConfig(CombatType.PvE, Name = "Use burst medicine in countdown")]
private bool OpenerBurstMeds { get; set; } = false;

[RotationConfig(CombatType.PvE, Name = "Use burst medicine when available for midfight burst phase")]
private bool MidfightBurstMeds { get; set; } = false;
#endregion

private const float HYPERCHARGE_DURATION = 8f;
Expand All @@ -19,7 +25,7 @@ public sealed class zMCH_Beta_2 : MachinistRotation
// ReassemblePvE's duration is 5s, need to fire the first GCD before it ends
if (remainTime < 5 && ReassemblePvE.CanUse(out var act)) return act;
// tincture needs to be used on -2s exactly
if (remainTime <= 2 && UseBurstMedicine(out act)) return act;
if (OpenerBurstMeds && remainTime <= 2 && UseBurstMedicine(out act)) return act;
return base.CountDownAction(remainTime);
}
#endregion
Expand All @@ -28,6 +34,7 @@ public sealed class zMCH_Beta_2 : MachinistRotation
// Determines emergency actions to take based on the next planned GCD action.
protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
{
if (IsBurst && MidfightBurstMeds && !CombatElapsedLessGCD(10) && TimeForBurstMeds(out act, nextGCD)) return true;
if (IsBurst)
{

Expand Down Expand Up @@ -241,6 +248,13 @@ private bool CanUseQueenMeow(out IAction? act, IAction nextGCD)
// Check for not burning Hypercharge below level 52 on AOE
private bool LowLevelHyperCheck => !AutoCrossbowPvE.EnoughLevel && SpreadShotPvE.CanUse(out _);

private bool TimeForBurstMeds(out IAction? act, IAction nextGCD)
{
if (AirAnchorPvE.Cooldown.WillHaveOneChargeGCD(2) && BarrelStabilizerPvE.Cooldown.WillHaveOneChargeGCD(6) && WildfirePvE.Cooldown.WillHaveOneChargeGCD(6)) return UseBurstMedicine(out act);
act = null;
return false;
}

// Keeps Ricochet and Gauss Cannon Even
private bool IsRicochetMore => RicochetPvE.EnoughLevel && GaussRoundPvE.Cooldown.RecastTimeElapsed <= RicochetPvE.Cooldown.RecastTimeElapsed;
#endregion
Expand Down