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

Commit

Permalink
Refactor rotation logic and update configurations
Browse files Browse the repository at this point in the history
Removed UseBurstMedicine from multiple rotations. Added UFGhosting config to VPR_Default and adjusted logic accordingly. Removed ExperimentalPot from VPR_Default. Removed BindWAND and NewLogicType from BRD_Default. Refined IsBurst condition in BRD_Default. Updated BarrelStabilizerPvE usage in MCH_Default. Updated RotationSolverReborn.Basic to 7.0.5.50. Added IsInBurst property to VPR_Default. Various logic adjustments for burst phases and config cleanup.
  • Loading branch information
LTS-FFXIV committed Sep 6, 2024
1 parent 02a459c commit 4c1bcd1
Show file tree
Hide file tree
Showing 8 changed files with 26 additions and 68 deletions.
1 change: 0 additions & 1 deletion BasicRotations/Magical/BLM_Default.cs
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,6 @@ protected override bool GeneralAbility(IAction nextGCD, out IAction? act)
[RotationDesc(ActionID.RetracePvE, ActionID.SwiftcastPvE, ActionID.TriplecastPvE, ActionID.AmplifierPvE)]
protected override bool AttackAbility(IAction nextGCD, out IAction? act)
{
if (IsBurst && UseBurstMedicine(out act)) return true;
if (InUmbralIce)
{
if (UmbralIceStacks == 2 && !HasFire
Expand Down
2 changes: 0 additions & 2 deletions BasicRotations/Magical/RDM_Default.cs
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,6 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act)
//If nothing else to use and player moving - fire reprise.
EnchantedReprisePvE.CanUse(out act))) return true;

if (IsBurst && UseBurstMedicine(out act)) return true;

//Attack abilities.
if (PrefulgencePvE.CanUse(out act, skipAoeCheck: true)) return true;
if (ViceOfThornsPvE.CanUse(out act, skipAoeCheck: true)) return true;
Expand Down
3 changes: 0 additions & 3 deletions BasicRotations/Melee/NIN_Default.cs
Original file line number Diff line number Diff line change
Expand Up @@ -313,9 +313,6 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
// First priority is given to Kassatsu if it's available, allowing for an immediate powerful Ninjutsu.
if (KassatsuPvE.CanUse(out act)) return true;

// Next, checks if a burst medicine is available and appropriate to use.
if (UseBurstMedicine(out act)) return true;

if (TenriJindoPvE.CanUse(out act)) return true;

// If in a burst phase and not just starting combat, checks if Mug is available to generate additional Ninki.
Expand Down
23 changes: 10 additions & 13 deletions BasicRotations/Melee/VPR_Default.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ public sealed class VPR_Default : ViperRotation
{
#region Config Options

[RotationConfig(CombatType.PvE, Name = "Tincture/Gemdraught Usage (Experimental)")]
public bool ExperimentalPot { get; set; } = false;

[RotationConfig(CombatType.PvE, Name = "Use up all charges of Uncoiled Fury if you have used Tincture/Gemdraught (Overrides next option)")]
public bool BurstUncoiledFury { get; set; } = true;

[RotationConfig(CombatType.PvE, Name = "Allow Uncoiled Fury and Writhing Snap to overwrite oGCDs when at range")]
public bool UFGhosting { get; set; } = true;

[Range(1, 3, ConfigUnitType.None, 1)]
[RotationConfig(CombatType.PvE, Name = "How many charges of Uncoiled Fury needs to be at before be used inside of melee (Ignores burst, leave at 3 to hold charges for out of melee uptime or burst only)")]
public int MaxUncoiledStacksUser { get; set; } = 3;
Expand All @@ -31,6 +31,8 @@ public sealed class VPR_Default : ViperRotation

#endregion

private static bool IsInBurst => Player.Level > 50 && !Player.WillStatusEnd(0, true, StatusID.RagingStrikes);

#region Additional oGCD Logic
[RotationDesc]
protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
Expand Down Expand Up @@ -79,11 +81,6 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act)
if (LastLashPvE.CanUse(out act)) return true;
if (DeathRattlePvE.CanUse(out act)) return true;

if (IsBurst && ExperimentalPot)
{
if (UseBurstMedicine(out act)) return true;
}

return base.AttackAbility(nextGCD, out act);
}
#endregion
Expand Down Expand Up @@ -113,18 +110,18 @@ protected override bool GeneralGCD(out IAction? act)
}

// Uncoiled Fury Overcap protection
if ((MaxRattling == RattlingCoilStacks || RattlingCoilStacks >= MaxUncoiledStacksUser) && !Player.HasStatus(true, StatusID.ReadyToReawaken))
if ((MaxRattling == RattlingCoilStacks || RattlingCoilStacks >= MaxUncoiledStacksUser) && !Player.HasStatus(true, StatusID.ReadyToReawaken) && (UFGhosting || (!UFGhosting && SerpentCombo == SerpentCombo.NONE)))
{
if (UncoiledFuryPvE.CanUse(out act, usedUp: true)) return true;
}

if (BurstUncoiledFury && Player.HasStatus(true, StatusID.Medicated) && !Player.HasStatus(true, StatusID.ReadyToReawaken))
if (BurstUncoiledFury && Player.HasStatus(true, StatusID.Medicated) && !Player.HasStatus(true, StatusID.ReadyToReawaken) && (UFGhosting || (!UFGhosting && SerpentCombo == SerpentCombo.NONE)))
{
if (UncoiledFuryPvE.CanUse(out act, usedUp: true)) return true;
}

//Uncoiled fury use
if (SerpentsIrePvE.Cooldown.JustUsedAfter(30) && !Player.HasStatus(true, StatusID.ReadyToReawaken))
if (SerpentsIrePvE.Cooldown.JustUsedAfter(30) && !Player.HasStatus(true, StatusID.ReadyToReawaken) && (UFGhosting || (!UFGhosting && SerpentCombo == SerpentCombo.NONE)))
{
if (UncoiledFuryPvE.CanUse(out act, usedUp: true)) return true;
}
Expand Down Expand Up @@ -169,8 +166,8 @@ protected override bool GeneralGCD(out IAction? act)
if (SteelFangsPvE.CanUse(out act)) return true;

//Ranged
if (UncoiledFuryPvE.CanUse(out act, usedUp: true)) return true;
if (WrithingSnapPvE.CanUse(out act)) return true;
if ((UFGhosting || (!UFGhosting && SerpentCombo == SerpentCombo.NONE)) && UncoiledFuryPvE.CanUse(out act, usedUp: true)) return true;
if ((UFGhosting || (!UFGhosting && SerpentCombo == SerpentCombo.NONE)) && WrithingSnapPvE.CanUse(out act)) return true;

return base.GeneralGCD(out act);
}
Expand Down
52 changes: 7 additions & 45 deletions BasicRotations/Ranged/BRD_Default.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@ public sealed class BRD_Default : BardRotation
{
#region Config Options

[RotationConfig(CombatType.PvE, Name = @"Use Raging Strikes on ""Wanderer's Minuet""")]
public bool BindWAND { get; set; } = false;

[Range(1, 45, ConfigUnitType.Seconds, 1)]
[RotationConfig(CombatType.PvE, Name = "Wanderer's Minuet Uptime")]
public float WANDTime { get; set; } = 43;
Expand All @@ -23,13 +20,9 @@ public sealed class BRD_Default : BardRotation
[RotationConfig(CombatType.PvE, Name = "Army's Paeon Uptime")]
public float ARMYTime { get; set; } = 43;

[RotationConfig(CombatType.PvE, Name = "Use experimental buff oGCD logic")]
public bool NewLogicType { get; set; } = false;

[RotationConfig(CombatType.PvE, Name = "First Song")]
private Song FirstSong { get; set; } = Song.WANDERER;

private bool BindWANDEnough => BindWAND && this.TheWanderersMinuetPvE.EnoughLevel;
private float WANDRemainTime => 45 - WANDTime;
private float MAGERemainTime => 45 - MAGETime;
private float ARMYRemainTime => 45 - ARMYTime;
Expand Down Expand Up @@ -72,11 +65,6 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act)
{
act = null;

if (IsBurst)
{
if (UseBurstMedicine(out act)) return true;
}

if (Song == Song.NONE && InCombat)
{
switch (FirstSong)
Expand All @@ -100,42 +88,16 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act)

if (IsBurst && Song != Song.NONE && MagesBalladPvE.EnoughLevel)
{
if (NewLogicType)
{
if (((!RadiantFinalePvE.EnoughLevel && !RagingStrikesPvE.Cooldown.IsCoolingDown)
|| (RadiantFinalePvE.EnoughLevel && !RadiantFinalePvE.Cooldown.IsCoolingDown && RagingStrikesPvE.EnoughLevel && !RagingStrikesPvE.Cooldown.IsCoolingDown))
if (((!RadiantFinalePvE.EnoughLevel && !RagingStrikesPvE.Cooldown.IsCoolingDown)
|| (RadiantFinalePvE.EnoughLevel && !RadiantFinalePvE.Cooldown.IsCoolingDown && RagingStrikesPvE.EnoughLevel && !RagingStrikesPvE.Cooldown.IsCoolingDown))
&& BattleVoicePvE.CanUse(out act, isLastAbility: false)) return true;

if (!Player.WillStatusEnd(0, true, StatusID.BattleVoice) && RadiantFinalePvE.CanUse(out act)) return true;

if (((RadiantFinalePvE.EnoughLevel && !Player.WillStatusEnd(0, true, StatusID.RadiantFinale) && !Player.WillStatusEnd(0, true, StatusID.BattleVoice))
|| (!RadiantFinalePvE.EnoughLevel && BattleVoicePvE.EnoughLevel && !Player.WillStatusEnd(0, true, StatusID.BattleVoice))
|| (!RadiantFinalePvE.EnoughLevel && !BattleVoicePvE.EnoughLevel))
&& RagingStrikesPvE.CanUse(out act)) return true;
}

if (!NewLogicType)
{
if (RagingStrikesPvE.CanUse(out act))
{
if (BindWANDEnough && Song == Song.WANDERER && TheWanderersMinuetPvE.EnoughLevel) return true;
if (!BindWANDEnough) return true;
}

if (RadiantFinalePvE.CanUse(out act, skipAoeCheck: true))
{
if (Player.HasStatus(true, StatusID.RagingStrikes) && RagingStrikesPvE.Cooldown.ElapsedOneChargeAfterGCD(1)) return true;
}
if (!Player.WillStatusEnd(0, true, StatusID.BattleVoice) && RadiantFinalePvE.CanUse(out act)) return true;

if (BattleVoicePvE.CanUse(out act, skipAoeCheck: true))
{
if (nextGCD.IsTheSameTo(true, RadiantFinalePvE)) return true;

if (nextGCD.IsTheSameTo(true, RadiantEncorePvE)) return true;

if (Player.HasStatus(true, StatusID.RagingStrikes) && RagingStrikesPvE.Cooldown.ElapsedOneChargeAfterGCD(1)) return true;
}
}
if (((RadiantFinalePvE.EnoughLevel && !Player.WillStatusEnd(0, true, StatusID.RadiantFinale) && !Player.WillStatusEnd(0, true, StatusID.BattleVoice))
|| (!RadiantFinalePvE.EnoughLevel && BattleVoicePvE.EnoughLevel && !Player.WillStatusEnd(0, true, StatusID.BattleVoice))
|| (!RadiantFinalePvE.EnoughLevel && !BattleVoicePvE.EnoughLevel))
&& RagingStrikesPvE.CanUse(out act)) return true;
}

if (RadiantFinalePvE.EnoughLevel && RadiantFinalePvE.Cooldown.IsCoolingDown && BattleVoicePvE.EnoughLevel && !BattleVoicePvE.Cooldown.IsCoolingDown) return false;
Expand Down
10 changes: 8 additions & 2 deletions BasicRotations/Ranged/MCH_Default.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,10 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
// Logic for using attack abilities outside of GCD, focusing on burst windows and cooldown management.
protected override bool AttackAbility(IAction nextGCD, out IAction? act)
{
if (BSPrio && BarrelStabilizerPvE.CanUse(out act)) return true;
if (BSPrio && IsBurst)
{
if (BarrelStabilizerPvE.CanUse(out act)) return true;
}

// Check for not burning Hypercharge below level 52 on AOE
bool LowLevelHyperCheck = !AutoCrossbowPvE.EnoughLevel && SpreadShotPvE.CanUse(out _);
Expand Down Expand Up @@ -100,7 +103,10 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act)
if (RookAutoturretPvE.CanUse(out act)) return true;
}

if (BarrelStabilizerPvE.CanUse(out act)) return true;
if (IsBurst)
{
if (BarrelStabilizerPvE.CanUse(out act)) return true;
}

return base.AttackAbility(nextGCD, out act);
}
Expand Down
2 changes: 1 addition & 1 deletion BasicRotations/RebornRotations.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<Compile Include="Duty\EmanationDefault" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="RotationSolverReborn.Basic" Version="7.0.5.48" />
<PackageReference Include="RotationSolverReborn.Basic" Version="7.0.5.50" />
</ItemGroup>
<ItemGroup>
<Reference Include="Dalamud">
Expand Down
1 change: 0 additions & 1 deletion BasicRotations/Tank/DRK_Default.cs
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,6 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act)

if (IsBurst)
{
if (UseBurstMedicine(out act)) return true;
if (InCombat && DeliriumPvE.CanUse(out act)) return true;
if (DeliriumPvE.EnoughLevel && DeliriumPvE.Cooldown.ElapsedAfterGCD(1) && !DeliriumPvE.Cooldown.ElapsedAfterGCD(3)
&& BloodWeaponPvE.CanUse(out act)) return true;
Expand Down

0 comments on commit 4c1bcd1

Please sign in to comment.