Skip to content

Commit

Permalink
Merge pull request #446 from FFXIV-CombatReborn/mergeWIP
Browse files Browse the repository at this point in the history
Yuweyawata Field Station modules, bug fixes, merge vbm
  • Loading branch information
CarnifexOptimus authored Nov 19, 2024
2 parents 79eb75b + 725acb9 commit c99d151
Show file tree
Hide file tree
Showing 66 changed files with 973 additions and 411 deletions.
2 changes: 1 addition & 1 deletion BossMod/Autorotation/Utility/ClassASTUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public static RotationModuleDefinition Definition()

public override void Execute(StrategyValues strategy, Actor? primaryTarget, float estimatedAnimLockDelay, bool isMoving)
{
ExecuteShared(strategy, IDLimitBreak3);
ExecuteShared(strategy, IDLimitBreak3, primaryTarget);
ExecuteSimple(strategy.Option(Track.Lightspeed), AST.AID.Lightspeed, Player);
ExecuteSimple(strategy.Option(Track.BeneficII), AST.AID.BeneficII, primaryTarget ?? Player);
ExecuteSimple(strategy.Option(Track.EssentialDignity), AST.AID.EssentialDignity, primaryTarget ?? Player);
Expand Down
2 changes: 1 addition & 1 deletion BossMod/Autorotation/Utility/ClassBLMUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public static RotationModuleDefinition Definition()

public override void Execute(StrategyValues strategy, Actor? primaryTarget, float estimatedAnimLockDelay, bool isMoving)
{
ExecuteShared(strategy, IDLimitBreak3);
ExecuteShared(strategy, IDLimitBreak3, primaryTarget);
ExecuteSimple(strategy.Option(Track.Manaward), BLM.AID.Manaward, Player);

var dash = strategy.Option(Track.AetherialManipulation);
Expand Down
2 changes: 1 addition & 1 deletion BossMod/Autorotation/Utility/ClassBLUUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public static RotationModuleDefinition Definition()

public override void Execute(StrategyValues strategy, Actor? primaryTarget, float estimatedAnimLockDelay, bool isMoving)
{
ExecuteShared(strategy, IDLimitBreak3);
ExecuteShared(strategy, IDLimitBreak3, primaryTarget);
ExecuteSimple(strategy.Option(Track.Bristle), BLU.AID.Bristle, Player);
ExecuteSimple(strategy.Option(Track.WhiteWind), BLU.AID.WhiteWind, Player);
ExecuteSimple(strategy.Option(Track.IceSpikes), BLU.AID.IceSpikes, Player);
Expand Down
2 changes: 1 addition & 1 deletion BossMod/Autorotation/Utility/ClassBRDUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public static RotationModuleDefinition Definition()

public override void Execute(StrategyValues strategy, Actor? primaryTarget, float estimatedAnimLockDelay, bool isMoving)
{
ExecuteShared(strategy, IDLimitBreak3);
ExecuteShared(strategy, IDLimitBreak3, primaryTarget);
ExecuteSimple(strategy.Option(Track.WardensPaean), BRD.AID.WardensPaean, Player);
ExecuteSimple(strategy.Option(Track.NaturesMinne), BRD.AID.NaturesMinne, Player);

Expand Down
2 changes: 1 addition & 1 deletion BossMod/Autorotation/Utility/ClassDNCUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public static RotationModuleDefinition Definition()

public override void Execute(StrategyValues strategy, Actor? primaryTarget, float estimatedAnimLockDelay, bool isMoving)
{
ExecuteShared(strategy, IDLimitBreak3);
ExecuteShared(strategy, IDLimitBreak3, primaryTarget);
ExecuteSimple(strategy.Option(Track.CuringWaltz), DNC.AID.CuringWaltz, Player);
ExecuteSimple(strategy.Option(Track.ShieldSamba), DNC.AID.ShieldSamba, Player);
ExecuteSimple(strategy.Option(Track.Improvisation), DNC.AID.Improvisation, Player);
Expand Down
2 changes: 1 addition & 1 deletion BossMod/Autorotation/Utility/ClassMCHUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public static RotationModuleDefinition Definition()

public override void Execute(StrategyValues strategy, Actor? primaryTarget, float estimatedAnimLockDelay, bool isMoving)
{
ExecuteShared(strategy, IDLimitBreak3);
ExecuteShared(strategy, IDLimitBreak3, primaryTarget);
ExecuteSimple(strategy.Option(Track.Dismantle), MCH.AID.Dismantle, primaryTarget);

var tact = strategy.Option(Track.Tactician);
Expand Down
2 changes: 1 addition & 1 deletion BossMod/Autorotation/Utility/ClassPCTUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public static RotationModuleDefinition Definition()

public override void Execute(StrategyValues strategy, Actor? primaryTarget, float estimatedAnimLockDelay, bool isMoving)
{
ExecuteShared(strategy, IDLimitBreak3);
ExecuteShared(strategy, IDLimitBreak3, primaryTarget);
ExecuteSimple(strategy.Option(Track.TemperaCoat), PCT.AID.TemperaCoat, Player);
}
}
2 changes: 1 addition & 1 deletion BossMod/Autorotation/Utility/ClassRDMUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public static RotationModuleDefinition Definition()

public override void Execute(StrategyValues strategy, Actor? primaryTarget, float estimatedAnimLockDelay, bool isMoving)
{
ExecuteShared(strategy, IDLimitBreak3);
ExecuteShared(strategy, IDLimitBreak3, primaryTarget);
ExecuteSimple(strategy.Option(Track.MagickBarrier), RDM.AID.MagickBarrier, Player);
}
}
2 changes: 1 addition & 1 deletion BossMod/Autorotation/Utility/ClassSCHUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public static RotationModuleDefinition Definition()

public override void Execute(StrategyValues strategy, Actor? primaryTarget, float estimatedAnimLockDelay, bool isMoving)
{
ExecuteShared(strategy, IDLimitBreak3);
ExecuteShared(strategy, IDLimitBreak3, primaryTarget);
ExecuteSimple(strategy.Option(Track.WhisperingDawn), SCH.AID.WhisperingDawn, Player);
ExecuteSimple(strategy.Option(Track.Adloquium), SCH.AID.Adloquium, primaryTarget ?? Player);
ExecuteSimple(strategy.Option(Track.FeyIllumination), SCH.AID.FeyIllumination, Player);
Expand Down
2 changes: 1 addition & 1 deletion BossMod/Autorotation/Utility/ClassSGEUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public static RotationModuleDefinition Definition()

public override void Execute(StrategyValues strategy, Actor? primaryTarget, float estimatedAnimLockDelay, bool isMoving) //How we're executing our skills listed below
{
ExecuteShared(strategy, IDLimitBreak3);
ExecuteShared(strategy, IDLimitBreak3, primaryTarget);
ExecuteSimple(strategy.Option(Track.Eukrasia), SGE.AID.Eukrasia, Player);
ExecuteSimple(strategy.Option(Track.Druochole), SGE.AID.Druochole, primaryTarget ?? Player);
ExecuteSimple(strategy.Option(Track.Kerachole), SGE.AID.Kerachole, Player);
Expand Down
7 changes: 3 additions & 4 deletions BossMod/Autorotation/Utility/ClassSMNUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ public sealed class ClassSMNUtility(RotationModuleManager manager, Actor player)
{
public enum Track { RadiantAegis = SharedTrack.Count }
public enum AegisStrategy { None, Use }
public bool HasEffect<SID>(SID sid) where SID : Enum => Player.FindStatus((uint)(object)sid, Player.InstanceID) != null; //Checks if Status effect is on self

public static readonly ActionID IDLimitBreak3 = ActionID.MakeSpell(SMN.AID.Teraflare);

Expand All @@ -22,11 +21,11 @@ public static RotationModuleDefinition Definition()

public override void Execute(StrategyValues strategy, Actor? primaryTarget, float estimatedAnimLockDelay, bool isMoving)
{
ExecuteShared(strategy, IDLimitBreak3);
ExecuteShared(strategy, IDLimitBreak3, primaryTarget);

var radi = strategy.Option(Track.RadiantAegis);
var hasAegis = HasEffect(SMN.SID.RadiantAegis);
var hasAegis = SelfStatusLeft(SMN.SID.RadiantAegis, 30) > 0;
if (radi.As<AegisStrategy>() != AegisStrategy.None && !hasAegis)
Hints.ActionsToExecute.Push(ActionID.MakeSpell(SMN.AID.RadiantAegis), primaryTarget, radi.Priority(), radi.Value.ExpireIn);
Hints.ActionsToExecute.Push(ActionID.MakeSpell(SMN.AID.RadiantAegis), primaryTarget ?? Player, radi.Priority(), radi.Value.ExpireIn);
}
}
6 changes: 3 additions & 3 deletions BossMod/Autorotation/Utility/RoleCasterUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ protected static void DefineShared(RotationModuleDefinition def, ActionID lb3)
DefineSimpleConfig(def, SharedTrack.Surecast, "Surecast", "Anti-KB", 10, ClassShared.AID.Surecast, 6); // note: secondary effect 15s
}

protected void ExecuteShared(StrategyValues strategy, ActionID lb3)
protected void ExecuteShared(StrategyValues strategy, ActionID lb3, Actor? primaryTarget)
{
ExecuteSimple(strategy.Option(SharedTrack.Sprint), ClassShared.AID.Sprint, Player);
ExecuteSimple(strategy.Option(SharedTrack.Sleep), ClassShared.AID.Sleep, null);
ExecuteSimple(strategy.Option(SharedTrack.Sleep), ClassShared.AID.Sleep, primaryTarget);
ExecuteSimple(strategy.Option(SharedTrack.LucidDreaming), ClassShared.AID.LucidDreaming, Player);
ExecuteSimple(strategy.Option(SharedTrack.Surecast), ClassShared.AID.Surecast, Player);

Expand All @@ -46,7 +46,7 @@ protected void ExecuteShared(StrategyValues strategy, ActionID lb3)

var addle = strategy.Option(SharedTrack.Addle);
if (addle.As<AddleOption>() != AddleOption.None)
Hints.ActionsToExecute.Push(ActionID.MakeSpell(ClassShared.AID.Addle), null, addle.Priority(), addle.Value.ExpireIn);
Hints.ActionsToExecute.Push(ActionID.MakeSpell(ClassShared.AID.Addle), primaryTarget, addle.Priority(), addle.Value.ExpireIn);

var swift = strategy.Option(SharedTrack.Swiftcast);
if (swift.As<SwiftcastOption>() != SwiftcastOption.None)
Expand Down
8 changes: 4 additions & 4 deletions BossMod/Autorotation/Utility/RoleHealerUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@ protected static void DefineShared(RotationModuleDefinition def, ActionID lb3)
DefineSimpleConfig(def, SharedTrack.Rescue, "Rescue", "", 50, ClassShared.AID.Rescue);
}

protected void ExecuteShared(StrategyValues strategy, ActionID lb3)
protected void ExecuteShared(StrategyValues strategy, ActionID lb3, Actor? primaryTarget)
{
ExecuteSimple(strategy.Option(SharedTrack.Sprint), ClassShared.AID.Sprint, Player);
ExecuteSimple(strategy.Option(SharedTrack.Repose), ClassShared.AID.Repose, null);
ExecuteSimple(strategy.Option(SharedTrack.Esuna), ClassShared.AID.Esuna, null);
ExecuteSimple(strategy.Option(SharedTrack.Repose), ClassShared.AID.Repose, primaryTarget);
ExecuteSimple(strategy.Option(SharedTrack.Esuna), ClassShared.AID.Esuna, primaryTarget);
ExecuteSimple(strategy.Option(SharedTrack.LucidDreaming), ClassShared.AID.LucidDreaming, Player);
ExecuteSimple(strategy.Option(SharedTrack.Surecast), ClassShared.AID.Surecast, Player);
ExecuteSimple(strategy.Option(SharedTrack.Rescue), ClassShared.AID.Rescue, null);
ExecuteSimple(strategy.Option(SharedTrack.Rescue), ClassShared.AID.Rescue, primaryTarget);

var lb = strategy.Option(SharedTrack.LB);
var lbLevel = LBLevelToExecute(lb.As<LBOption>());
Expand Down
2 changes: 1 addition & 1 deletion BossMod/Autorotation/Utility/RoleMeleeUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ protected void ExecuteShared(StrategyValues strategy, ActionID lb3, Actor? prima
{
ExecuteSimple(strategy.Option(SharedTrack.Sprint), ClassShared.AID.Sprint, Player);
ExecuteSimple(strategy.Option(SharedTrack.SecondWind), ClassShared.AID.SecondWind, Player);
ExecuteSimple(strategy.Option(SharedTrack.LegSweep), ClassShared.AID.LegSweep, null);
ExecuteSimple(strategy.Option(SharedTrack.LegSweep), ClassShared.AID.LegSweep, primaryTarget);
ExecuteSimple(strategy.Option(SharedTrack.Bloodbath), ClassShared.AID.Bloodbath, Player);
ExecuteSimple(strategy.Option(SharedTrack.ArmsLength), ClassShared.AID.ArmsLength, Player);

Expand Down
8 changes: 4 additions & 4 deletions BossMod/Autorotation/Utility/RoleRangedUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@ protected static void DefineShared(RotationModuleDefinition def, ActionID lb3)
DefineSimpleConfig(def, SharedTrack.ArmsLength, "ArmsLength", "ArmsL", 300, ClassShared.AID.ArmsLength, 6); // note: secondary effect 15s
}

protected void ExecuteShared(StrategyValues strategy, ActionID lb3)
protected void ExecuteShared(StrategyValues strategy, ActionID lb3, Actor? primaryTarget)
{
ExecuteSimple(strategy.Option(SharedTrack.Sprint), ClassShared.AID.Sprint, Player);
ExecuteSimple(strategy.Option(SharedTrack.LegGraze), ClassShared.AID.LegGraze, null);
ExecuteSimple(strategy.Option(SharedTrack.LegGraze), ClassShared.AID.LegGraze, primaryTarget);
ExecuteSimple(strategy.Option(SharedTrack.SecondWind), ClassShared.AID.SecondWind, Player);
ExecuteSimple(strategy.Option(SharedTrack.FootGraze), ClassShared.AID.FootGraze, null);
ExecuteSimple(strategy.Option(SharedTrack.HeadGraze), ClassShared.AID.HeadGraze, null);
ExecuteSimple(strategy.Option(SharedTrack.FootGraze), ClassShared.AID.FootGraze, primaryTarget);
ExecuteSimple(strategy.Option(SharedTrack.HeadGraze), ClassShared.AID.HeadGraze, primaryTarget);
ExecuteSimple(strategy.Option(SharedTrack.ArmsLength), ClassShared.AID.ArmsLength, Player);

var lb = strategy.Option(SharedTrack.LB);
Expand Down
2 changes: 1 addition & 1 deletion BossMod/Autorotation/akechi/AkechiGNB.cs
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@ public override void Execute(StrategyValues strategy, Actor? primaryTarget, floa
canBreak = hasBreak && Unlocked(GNB.AID.SonicBreak); //SonicBreak conditions
canBow = Unlocked(GNB.AID.BowShock) && ActionReady(GNB.AID.BowShock); //BowShock conditions
canContinue = Unlocked(GNB.AID.Continuation); //Continuation conditions
canReign = Unlocked(GNB.AID.ReignOfBeasts); //ReignOfBeasts conditions
canReign = Unlocked(GNB.AID.ReignOfBeasts) && hasReign; //ReignOfBeasts conditions
#endregion

#endregion
Expand Down
8 changes: 5 additions & 3 deletions BossMod/BossModule/AOEShapes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -189,10 +189,11 @@ public enum OperandType

// shapes1 for unions, shapes 2 for shapes for XOR/intersection with shapes1, differences for shapes that get subtracted after previous operations
// always create a new instance of AOEShapeCustom if something other than the invertforbiddenzone changes
public sealed record class AOEShapeCustom(IEnumerable<Shape> Shapes1, IEnumerable<Shape>? DifferenceShapes = null, IEnumerable<Shape>? Shapes2 = null, bool InvertForbiddenZone = false, OperandType Operand = OperandType.Union) : AOEShape
// if the origin of the AOE can change, edit the origin default value to prevent cache issues
public sealed record class AOEShapeCustom(IEnumerable<Shape> Shapes1, IEnumerable<Shape>? DifferenceShapes = null, IEnumerable<Shape>? Shapes2 = null, bool InvertForbiddenZone = false, OperandType Operand = OperandType.Union, WPos Origin = default) : AOEShape
{
private RelSimplifiedComplexPolygon? polygon;
private readonly int hashkey = CreateCacheKey(Shapes1, Shapes2 ?? [], DifferenceShapes ?? [], Operand);
private readonly int hashkey = CreateCacheKey(Shapes1, Shapes2 ?? [], DifferenceShapes ?? [], Operand, Origin);
public static readonly Dictionary<int, RelSimplifiedComplexPolygon> Cache = [];
public static readonly LinkedList<int> CacheOrder = new();
public void AddToCache(RelSimplifiedComplexPolygon value)
Expand Down Expand Up @@ -255,12 +256,13 @@ public override bool Check(WPos position, WPos origin, Angle rotation)
return result;
}

private static int CreateCacheKey(IEnumerable<Shape> shapes1, IEnumerable<Shape> shapes2, IEnumerable<Shape> differenceShapes, OperandType operand)
private static int CreateCacheKey(IEnumerable<Shape> shapes1, IEnumerable<Shape> shapes2, IEnumerable<Shape> differenceShapes, OperandType operand, WPos origin)
{
var hashCode = new HashCode();
foreach (var shape in shapes1.Concat(shapes2).Concat(differenceShapes))
hashCode.Add(shape.GetHashCode());
hashCode.Add(operand);
hashCode.Add(origin);
return hashCode.ToHashCode();
}

Expand Down
2 changes: 1 addition & 1 deletion BossMod/BossModule/ArenaBounds.cs
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ public override WDir ClampToBounds(WDir offset)
var cacheKey = (poly, offset);
if (Cache.TryGetValue(cacheKey, out var cachedResult))
return (WDir)cachedResult;
if (Contains(offset) || offset.AlmostEqual(default, 1) || offset.X == default) // if actor is almost in the center of the arena, do nothing (eg donut arena)
if (Contains(offset) || offset.AlmostEqual(default, 1) || Math.Abs(offset.X) < 0.1f) // if actor is almost in the center of the arena, do nothing (eg donut arena)
{
Cache[(poly, offset)] = offset;
return offset;
Expand Down
Loading

0 comments on commit c99d151

Please sign in to comment.