Skip to content

Commit

Permalink
BLM cleanup & rebase
Browse files Browse the repository at this point in the history
  • Loading branch information
Akechi-kun committed Feb 8, 2025
1 parent 6cf0c25 commit a22fc5d
Show file tree
Hide file tree
Showing 6 changed files with 205 additions and 454 deletions.
537 changes: 151 additions & 386 deletions BossMod/Autorotation/Standard/akechi/DPS/AkechiBLM.cs

Large diffs are not rendered by default.

34 changes: 21 additions & 13 deletions BossMod/Autorotation/Standard/akechi/DPS/AkechiDRG.cs
Original file line number Diff line number Diff line change
Expand Up @@ -266,19 +266,9 @@ public override void Execution(StrategyValues strategy, Enemy? primaryTarget)

#endregion

#region Forced Rotation
//Force specific actions based on the AOE strategy selected
if (AOEStrategy == AOEStrategy.ForceST) //if forced single target
QueueGCD(NextFullST(), TargetChoice(AOE) ?? primaryTarget?.Actor, GCDPriority.ForcedGCD); //Queue the next single target action
if (AOEStrategy == AOEStrategy.Force123ST) //if forced 123 combo
QueueGCD(UseOnly123ST(), TargetChoice(AOE) ?? primaryTarget?.Actor, GCDPriority.ForcedGCD); //Queue the 123 combo action
if (AOEStrategy == AOEStrategy.ForceBuffsST) //if forced buffs combo
QueueGCD(UseOnly145ST(), TargetChoice(AOE) ?? primaryTarget?.Actor, GCDPriority.ForcedGCD); //Queue the buffed 145 combo action
if (AOEStrategy == AOEStrategy.ForceAOE) //if forced AOE action
QueueGCD(NextFullAOE(), TargetChoice(AOE) ?? (NumAOETargets > 1 ? BestAOETargets?.Actor : primaryTarget?.Actor), GCDPriority.ForcedGCD); //Queue the next AOE action
#endregion
#region Full Rotation Execution

#region Dives Strategy
#region Dives
//Dive strategy
var diveStrategy = dive switch
{
Expand All @@ -295,11 +285,23 @@ public override void Execution(StrategyValues strategy, Enemy? primaryTarget)
var divesGood = diveStrategy && (maxMelee || closeMelee || allowed) && !forbidden; //Check if dives are good to use
#endregion

#region Combo & Cooldown Execution
#region Standard Rotations
//Force specific actions based on the AOE strategy selected
if (AOEStrategy == AOEStrategy.ForceST) //if forced single target
QueueGCD(NextFullST(), TargetChoice(AOE) ?? primaryTarget?.Actor, GCDPriority.ForcedGCD); //Queue the next single target action
if (AOEStrategy == AOEStrategy.Force123ST) //if forced 123 combo
QueueGCD(UseOnly123ST(), TargetChoice(AOE) ?? primaryTarget?.Actor, GCDPriority.ForcedGCD); //Queue the 123 combo action
if (AOEStrategy == AOEStrategy.ForceBuffsST) //if forced buffs combo
QueueGCD(UseOnly145ST(), TargetChoice(AOE) ?? primaryTarget?.Actor, GCDPriority.ForcedGCD); //Queue the buffed 145 combo action
if (AOEStrategy == AOEStrategy.ForceAOE) //if forced AOE action
QueueGCD(NextFullAOE(), TargetChoice(AOE) ?? (NumAOETargets > 1 ? BestAOETargets?.Actor : primaryTarget?.Actor), GCDPriority.ForcedGCD); //Queue the next AOE action
//Combo Action evecution
QueueGCD(NumAOETargets > 2 ? NextFullAOE() : NextFullST(),
BestAOETarget?.Actor,
GCDPriority.Combo123);
#endregion

#region Cooldowns

if (!hold)
{
Expand Down Expand Up @@ -388,6 +390,8 @@ ptStrat is PiercingTalonStrategy.Force or PiercingTalonStrategy.ForceEX
? GCDPriority.ForcedGCD : GCDPriority.NormalGCD);
#endregion

#endregion

#region AI
//AI hints for positioning
var goalST = primaryTarget?.Actor != null ? Hints.GoalSingleTarget(primaryTarget!.Actor, 3) : null; //Set goal for single target
Expand All @@ -405,6 +409,8 @@ ptStrat is PiercingTalonStrategy.Force or PiercingTalonStrategy.ForceEX
#endregion
}

#region Rotation Helpers

#region Single-Target Helpers

//Determines the next skill in the single-target (ST) combo chain based on the last used action.
Expand Down Expand Up @@ -532,6 +538,8 @@ ptStrat is PiercingTalonStrategy.Force or PiercingTalonStrategy.ForceEX

#endregion

#endregion

#region Cooldown Helpers

#region Buffs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,17 +59,17 @@ public enum OffensiveStrategy
}
#endregion

#region Module Definitions
public static RotationModuleDefinition Definition()
{
var res = new RotationModuleDefinition("Akechi SCH", //Title
"Standard Rotation Module", //Description
"Standard rotation (Akechi)", //Category
"Standard rotation (Akechi)|Healer", //Category
"Akechi", //Contributor
RotationModuleQuality.Ok, //Quality
BitMask.Build((int)Class.SCH), //Job
100); //Level supported

#region Custom strategies
res.Define(Track.AOE).As<AOEStrategy>("AOE", "AOE", uiPriority: 200)
.AddOption(AOEStrategy.Auto, "Auto", "Automatically decide when to use ST or AOE abilities")
.AddOption(AOEStrategy.Ruin2, "Ruin II", "Force use of Ruin II only (instant cast ST, less DPS)", supportedTargets: ActionTargets.Hostile)
Expand All @@ -96,9 +96,6 @@ public static RotationModuleDefinition Definition()
.AddOption(EnergyStrategy.Force, "Force", "Force use of Energy Drain if any Aetherflow is available", 0, 0, ActionTargets.None, 45)
.AddOption(EnergyStrategy.Delay, "Delay", "Delay use of Energy Drain", 0, 0, ActionTargets.None, 45)
.AddAssociatedActions(AID.EnergyDrain);
#endregion

#region Offensive Strategies
res.Define(Track.ChainStratagem).As<OffensiveStrategy>("Chain Stratagem", "Stratagem", uiPriority: 170)
.AddOption(OffensiveStrategy.Automatic, "Auto", "Normal use of Chain Stratagem")
.AddOption(OffensiveStrategy.Force, "Force", "Force use of Chain Stratagem", 120, 20, ActionTargets.Hostile, 66)
Expand All @@ -115,10 +112,10 @@ public static RotationModuleDefinition Definition()
.AddOption(OffensiveStrategy.LateWeave, "Late Weave", "Force use of Aetherflow in very next LAST weave slot only", 60, 10, ActionTargets.Self, 45)
.AddOption(OffensiveStrategy.Delay, "Delay", "Delay use of Aetherflow", 0, 0, ActionTargets.None, 45)
.AddAssociatedActions(AID.Aetherflow);
#endregion

return res;
}
#endregion

#region Priorities
public enum GCDPriority //priorities for GCDs (higher number = higher priority)
Expand All @@ -139,7 +136,16 @@ public static RotationModuleDefinition Definition()
}
#endregion

#region Placeholders for Variables
#region Upgrade Paths
private AID BestBroil => Unlocked(AID.Broil4) ? AID.Broil4 : Unlocked(AID.Broil3) ? AID.Broil3 : Unlocked(AID.Broil2) ? AID.Broil2 : AID.Broil1;
private AID BestRuin => Unlocked(AID.Ruin2) ? AID.Ruin2 : AID.Ruin1;
private AID BestBio => Unlocked(AID.Biolysis) ? AID.Biolysis : Unlocked(AID.Bio2) ? AID.Bio2 : AID.Bio1;
private SID BestDOT => Unlocked(AID.Biolysis) ? SID.Biolysis : Unlocked(AID.Bio2) ? SID.Bio2 : SID.Bio1;
private AID BestST => Unlocked(AID.Broil1) ? BestBroil : BestRuin;
private AID BestAOE => Unlocked(AID.ArtOfWar2) ? AID.ArtOfWar2 : AID.ArtOfWar1;
#endregion

#region Module Variables
private (int Stacks, bool IsActive) Aetherflow; //Current Aetherflow stacks (max: 3)
private bool canAF; //Checks if Aetherflow is completely available
private bool canED; //Checks if Energy Drain is completely available
Expand All @@ -158,41 +164,6 @@ public static RotationModuleDefinition Definition()
public float BurstWindowIn; //Time until next burst window (typically 20s-22s)
#endregion

#region Upgrade Paths
private AID BestBroil //Determine the best Broil to use
=> Unlocked(AID.Broil4) //If Broil IV is unlocked
? AID.Broil4 //Use Broil IV
: Unlocked(AID.Broil3) //Otherwise, if Broil III is unlocked
? AID.Broil3 //Use Broil III
: Unlocked(AID.Broil2) //Otherwise, if Broil II is unlocked
? AID.Broil2 //Use Broil II
: AID.Broil1; //Otherwise, default to Broil I
private AID BestRuin //Determine the best Ruin to use
=> Unlocked(AID.Ruin2) //Otherwise, if Ruin II is unlocked
? AID.Ruin2 //Use Ruin II
: AID.Ruin1; //Otherwise, default to Ruin I
private AID BestBio //Determine the best DOT to use
=> Unlocked(AID.Biolysis) //If Biolysis is unlocked
? AID.Biolysis //Use Biolysis
: Unlocked(AID.Bio2) //Otherwise, if Bio II is unlocked
? AID.Bio2 //Use Bio II
: AID.Bio1; //Otherwise, default to Bio I
private SID BestDOT //Determine the best DOT to use
=> Unlocked(AID.Biolysis) //If Biolysis is unlocked
? SID.Biolysis //Use Biolysis
: Unlocked(AID.Bio2) //Otherwise, if Bio II is unlocked
? SID.Bio2 //Use Bio II
: SID.Bio1; //Otherwise, default to Bio I
private AID BestST //Determine the best ST to use
=> Unlocked(AID.Broil1) //If Broil I is unlocked
? BestBroil //Use the best Broil
: BestRuin; //Otherwise, default to best Ruin
private AID BestAOE //Determine the best AOE to use
=> Unlocked(AID.ArtOfWar2) //If Art of War II is unlocked
? AID.ArtOfWar2 //Use Art of War II
: AID.ArtOfWar1; //Otherwise, default to Art of War
#endregion

public override void Execution(StrategyValues strategy, Enemy? primaryTarget)
{
#region Variables
Expand Down Expand Up @@ -227,16 +198,9 @@ public override void Execution(StrategyValues strategy, Enemy? primaryTarget)

#endregion

#region Force Execution
if (AOEStrategy is AOEStrategy.Ruin2)
QueueGCD(BestRuin, TargetChoice(AOE) ?? primaryTarget?.Actor, GCDPriority.ForcedGCD);
if (AOEStrategy is AOEStrategy.Broil)
QueueGCD(BestBroil, TargetChoice(AOE) ?? primaryTarget?.Actor, GCDPriority.ForcedGCD);
if (AOEStrategy is AOEStrategy.ArtOfWar)
QueueGCD(BestAOE, Player, GCDPriority.ForcedGCD);
#endregion
#region Full Rotation Execution

#region Standard Execution
#region Standard Rotation
if (AOEStrategy == AOEStrategy.Auto)
{
if (ShouldUseAOE)
Expand All @@ -245,8 +209,17 @@ public override void Execution(StrategyValues strategy, Enemy? primaryTarget)
(!ShouldUseAOE || IsFirstGCD()))
QueueGCD(IsMoving ? BestRuin : BestST, TargetChoice(AOE) ?? primaryTarget?.Actor, GCDPriority.Standard);
}
if (AOEStrategy is AOEStrategy.Ruin2)
QueueGCD(BestRuin, TargetChoice(AOE) ?? primaryTarget?.Actor, GCDPriority.ForcedGCD);
if (AOEStrategy is AOEStrategy.Broil)
QueueGCD(BestBroil, TargetChoice(AOE) ?? primaryTarget?.Actor, GCDPriority.ForcedGCD);
if (AOEStrategy is AOEStrategy.ArtOfWar)
QueueGCD(BestAOE, Player, GCDPriority.ForcedGCD);
if (ShouldUseBio(primaryTarget?.Actor, BioStrategy))
QueueGCD(BestBio, TargetChoice(Bio) ?? primaryTarget?.Actor, GCDPriority.DOT);
#endregion

#region Cooldowns
if (PlayerHasEffect(SID.ImpactImminent, 30))
QueueOGCD(AID.BanefulImpaction, TargetChoice(Bio) ?? primaryTarget?.Actor, OGCDPriority.ChainStratagem);
if (ShouldUseChainStratagem(primaryTarget?.Actor, csStrat))
Expand All @@ -269,6 +242,12 @@ afStrat is OffensiveStrategy.Force or OffensiveStrategy.AnyWeave or OffensiveStr
potion is PotionStrategy.Immediate)
Hints.ActionsToExecute.Push(ActionDefinitions.IDPotionMnd, Player, ActionQueue.Priority.VeryHigh + (int)OGCDPriority.Potion, 0, GCD - 0.9f);
#endregion

#endregion

#region AI
GoalZoneSingle(25);
#endregion
}

#region Cooldown Helpers
Expand Down
5 changes: 2 additions & 3 deletions BossMod/Autorotation/Standard/akechi/Tank/AkechiPLD.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public enum DashStrategy { Automatic, Force, Force1, GapClose, GapClose1, Delay
public enum RangedStrategy { Automatic, OpenerRangedCast, OpenerCast, ForceCast, RangedCast, OpenerRanged, Opener, Force, Ranged, Forbid }
#endregion

#region Module & Strategy Definitions
#region Module Definitions
public static RotationModuleDefinition Definition()
{
var res = new RotationModuleDefinition("Akechi PLD", //Title
Expand Down Expand Up @@ -395,7 +395,6 @@ gbStrat is GCDStrategy.Force
if (goal != null) //if goal is set
Hints.GoalZones.Add(goal); //add goal to zones
#endregion

}

#region Rotation Helpers
Expand Down Expand Up @@ -444,7 +443,7 @@ gbStrat is GCDStrategy.Force
};
private bool ShouldUseFightOrFlight(OGCDStrategy strategy, Actor? target) => strategy switch
{
OGCDStrategy.Automatic => Player.InCombat && target != null && FightOrFlight.IsReady && (CombatTimer <= 30 && ComboLastMove is AID.RoyalAuthority or AID.RageOfHalone || CombatTimer > 30),
OGCDStrategy.Automatic => Player.InCombat && target != null && FightOrFlight.IsReady && ((CombatTimer <= 30 && ComboLastMove is AID.RoyalAuthority or AID.RageOfHalone || ShouldUseAOE) || CombatTimer > 30),
OGCDStrategy.Force => FightOrFlight.IsReady,
OGCDStrategy.AnyWeave => FightOrFlight.IsReady && CanWeaveIn,
OGCDStrategy.EarlyWeave => FightOrFlight.IsReady && CanEarlyWeaveIn,
Expand Down
2 changes: 1 addition & 1 deletion BossMod/Autorotation/Standard/akechi/Tank/AkechiWAR.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public enum TomahawkStrategy { OpenerFar, OpenerForce, Force, Allow, Forbid }
public enum PotionStrategy { Manual, AlignWithRaidBuffs, Immediate }
#endregion

#region Module Definitions & Strategies
#region Module Definitions
public static RotationModuleDefinition Definition()
{
var res = new RotationModuleDefinition("Akechi WAR", //Title
Expand Down

0 comments on commit a22fc5d

Please sign in to comment.