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

Commit

Permalink
Merge pull request #262 from Karaha-Baruha/main
Browse files Browse the repository at this point in the history
lets try this again
  • Loading branch information
LTS-FFXIV authored Sep 27, 2024
2 parents 26d1c50 + adf5021 commit 24f61a0
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 37 deletions.
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

0 comments on commit 24f61a0

Please sign in to comment.