diff --git a/BossMod/ActionTweaks/OutOfCombatActionsTweak.cs b/BossMod/ActionTweaks/OutOfCombatActionsTweak.cs index 6959e185fb..9366c04e97 100644 --- a/BossMod/ActionTweaks/OutOfCombatActionsTweak.cs +++ b/BossMod/ActionTweaks/OutOfCombatActionsTweak.cs @@ -1,6 +1,6 @@ namespace BossMod; -[ConfigDisplay(Name = "Automatic out-of-combat utility actions", Parent = typeof(ActionTweaksConfig), Since = "0.0.0.245")] +[ConfigDisplay(Name = "Automatic out-of-combat utility actions", Parent = typeof(ActionTweaksConfig), Since = "7.2.0.146")] class OutOfCombatActionsConfig : ConfigNode { [PropertyDisplay("Enable the feature")] diff --git a/BossMod/ActionTweaks/SmartRotationTweak.cs b/BossMod/ActionTweaks/SmartRotationTweak.cs index be7a4b6368..ee9a52b89a 100644 --- a/BossMod/ActionTweaks/SmartRotationTweak.cs +++ b/BossMod/ActionTweaks/SmartRotationTweak.cs @@ -1,6 +1,6 @@ namespace BossMod; -[ConfigDisplay(Name = "Smart character orientation", Parent = typeof(ActionTweaksConfig), Since = "0.0.0.229")] +[ConfigDisplay(Name = "Smart character orientation", Parent = typeof(ActionTweaksConfig), Since = "7.2.0.146")] class SmartRotationConfig : ConfigNode { [PropertyDisplay("Enable the feature", tooltip: "Replace in-game 'auto face target' option with a smarter alternative.\nWhen using an action, changes direction only if target is not in frontal cone.\nDuring cast, keep character facing the target.")] diff --git a/BossMod/Autorotation/Utility/ClassSCHUtility.cs b/BossMod/Autorotation/Utility/ClassSCHUtility.cs index 57d32e36b7..3b53bc16ce 100644 --- a/BossMod/Autorotation/Utility/ClassSCHUtility.cs +++ b/BossMod/Autorotation/Utility/ClassSCHUtility.cs @@ -60,7 +60,7 @@ public static RotationModuleDefinition Definition() DefineSimpleConfig(res, Track.Resurrection, "Resurrection", "Raise", 10, SCH.AID.Resurrection); // Pet Summons - res.Define(Track.PetActions).As("Pet", "", 180) + res.Define(Track.Summons).As("Pet", "", 180) .AddOption(PetOption.None, "None", "Do not use automatically") .AddOption(PetOption.Eos, "Eos", "Summon Eos", 2, 0, ActionTargets.Self, 4) .AddOption(PetOption.Seraph, "Seraph", "Summon Seraph", 120, 22, ActionTargets.Self, 80) diff --git a/BossMod/BossModule/AIHintsVisualizer.cs b/BossMod/BossModule/AIHintsVisualizer.cs index 828f628e39..63dda171e1 100644 --- a/BossMod/BossModule/AIHintsVisualizer.cs +++ b/BossMod/BossModule/AIHintsVisualizer.cs @@ -3,7 +3,7 @@ namespace BossMod; -public class AIHintsVisualizer(AIHints hints, WorldState ws, Actor player, float preferredDistance) +public class AIHintsVisualizer(AIHints hints, WorldState ws, Actor player, ulong targetID, Func targetSelect) { private readonly MapVisualizer?[] _zoneVisualizers = new MapVisualizer?[hints.ForbiddenZones.Count]; private MapVisualizer? _pathfindVisualizer; diff --git a/BossMod/Config/ConfigChangelog.cs b/BossMod/Config/ConfigChangelog.cs index e731c38197..bf55a6d6ad 100644 --- a/BossMod/Config/ConfigChangelog.cs +++ b/BossMod/Config/ConfigChangelog.cs @@ -14,7 +14,7 @@ public class ConfigChangelogWindow : UIWindow private readonly Version PreviousVersion; private readonly List Fields; - public ConfigChangelogWindow() : base("VBM Changelog", true, new(400, 300)) + public ConfigChangelogWindow() : base("BMR Changelog", true, new(400, 300)) { PreviousVersion = GetPreviousPluginVersion(); Service.Config.AssemblyVersion = GetCurrentPluginVersion(); diff --git a/BossMod/Debug/DebugAutorotation.cs b/BossMod/Debug/DebugAutorotation.cs index 317bc5ca2f..4bbf0c7e29 100644 --- a/BossMod/Debug/DebugAutorotation.cs +++ b/BossMod/Debug/DebugAutorotation.cs @@ -11,6 +11,12 @@ public void Draw() var player = autorot.Bossmods.WorldState.Party[autorot.PlayerSlot]; if (player == null) return; - new AIHintsVisualizer(autorot.Hints, autorot.Bossmods.WorldState, player, 3).Draw(_tree); + new AIHintsVisualizer(autorot.Hints, autorot.Bossmods.WorldState, player, player.TargetID, e => + { + // TODO: ... + return (e, 3, Positional.Any, false); + //var t = e != null ? autorot.ClassActions.SelectBetterTarget(e) : new(); + //return (t.Target, t.PreferredRange, t.PreferredPosition, t.PreferTanking); + }).Draw(_tree); } } diff --git a/BossMod/Debug/DebugCollision.cs b/BossMod/Debug/DebugCollision.cs index 012d7b5d27..b403408caa 100644 --- a/BossMod/Debug/DebugCollision.cs +++ b/BossMod/Debug/DebugCollision.cs @@ -528,8 +528,9 @@ // private void VisualizeOBB(Vector3 min, Vector3 max, CollisionObjectShape* obj) => Camera.Instance?.DrawWorldOBB(min, max, obj->World.M, Colors.Safe); // private void VisualizeVertex(Vector3 v, CollisionObjectShape* obj) => Camera.Instance?.DrawWorldSphere(SharpDX.Vector3.TransformCoordinate(new(v.X, v.Y, v.Z), obj->World.M).ToSystem(), 0.1f, Colors.Danger); -// private void VisualizePrimitive(CollisionShapePCBData* data, int iPrim, CollisionObjectShape* obj, uint color = Colors.Danger) +// private void VisualizePrimitive(CollisionShapePCBData* data, int iPrim, CollisionObjectShape* obj, uint color = 0) // { +// var colors = color == 0 ? Colors.Danger : color; // var pRaw = (float*)(data + 1); // var pCompr = (ushort*)(pRaw + 3 * data->NumVertsRaw); // var pPrim = (CollisionShapePrimitive*)(pCompr + 3 * data->NumVertsCompressed); @@ -541,19 +542,20 @@ // var w1 = SharpDX.Vector3.TransformCoordinate(new(v1.X, v1.Y, v1.Z), w).ToSystem(); // var w2 = SharpDX.Vector3.TransformCoordinate(new(v2.X, v2.Y, v2.Z), w).ToSystem(); // var w3 = SharpDX.Vector3.TransformCoordinate(new(v3.X, v3.Y, v3.Z), w).ToSystem(); -// Camera.Instance?.DrawWorldLine(w1, w2, color); -// Camera.Instance?.DrawWorldLine(w2, w3, color); -// Camera.Instance?.DrawWorldLine(w3, w1, color); +// Camera.Instance?.DrawWorldLine(w1, w2, colors); +// Camera.Instance?.DrawWorldLine(w2, w3, colors); +// Camera.Instance?.DrawWorldLine(w3, w1, colors); // } -// private void VisualizeShape(CollisionShapePCBData* data, CollisionObjectShape* obj, uint color = Colors.Danger) +// private void VisualizeShape(CollisionShapePCBData* data, CollisionObjectShape* obj, uint color = 0) // { +// var colors = color == 0 ? Colors.Danger : color; // for (int i = 0; i < data->NumPrims; ++i) // VisualizePrimitive(data, i, obj, color); // if (data->Child1Offset != 0) -// VisualizeShape((CollisionShapePCBData*)((byte*)data + data->Child1Offset), obj, color); +// VisualizeShape((CollisionShapePCBData*)((byte*)data + data->Child1Offset), obj, colors); // if (data->Child2Offset != 0) -// VisualizeShape((CollisionShapePCBData*)((byte*)data + data->Child2Offset), obj, color); +// VisualizeShape((CollisionShapePCBData*)((byte*)data + data->Child2Offset), obj, colors); // } // private void VisualizeObject(CollisionObjectBase* obj) diff --git a/BossMod/Debug/MainDebugWindow.cs b/BossMod/Debug/MainDebugWindow.cs index f0298295db..156cae22ae 100644 --- a/BossMod/Debug/MainDebugWindow.cs +++ b/BossMod/Debug/MainDebugWindow.cs @@ -29,7 +29,7 @@ protected override void Dispose(bool disposing) _debugClassDefinitions.Dispose(); _debugAddon.Dispose(); // _debugCollision.Dispose(); - //_debugVfx.Dispose(); + // _debugVfx.Dispose(); base.Dispose(disposing); } diff --git a/BossMod/Modules/Shadowbringers/Dungeon/D02DohnMheg/D023AencThon.cs b/BossMod/Modules/Shadowbringers/Dungeon/D02DohnMheg/D023AencThon.cs index 63d271a294..3aad5940e7 100644 --- a/BossMod/Modules/Shadowbringers/Dungeon/D02DohnMheg/D023AencThon.cs +++ b/BossMod/Modules/Shadowbringers/Dungeon/D02DohnMheg/D023AencThon.cs @@ -106,7 +106,7 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme } } -class Finale(BossModule module) : Components.CastHint(module, ActionID.MakeSpell(AID.Finale), $"Enrage, destroy the Liar's Lyre!", true); +class Finale(BossModule module) : Components.CastHint(module, ActionID.MakeSpell(AID.Finale), "Enrage, destroy the Liar's Lyre!", true); class CorrosiveBile(BossModule module) : Components.GenericAOEs(module) { diff --git a/BossMod/Replay/Visualization/ReplayDetailsWindow.cs b/BossMod/Replay/Visualization/ReplayDetailsWindow.cs index f2839708f7..54729002f5 100644 --- a/BossMod/Replay/Visualization/ReplayDetailsWindow.cs +++ b/BossMod/Replay/Visualization/ReplayDetailsWindow.cs @@ -426,7 +426,12 @@ private void DrawAI() if (player == null) return; - _pfVisu ??= new(_hints, _mgr.WorldState, player, _pfTargetRadius); + if (_pfVisu == null) + { + var playerAssignment = Service.Config.Get()[_mgr.WorldState.Party.Members[_povSlot].ContentId]; + var pfTank = playerAssignment == PartyRolesConfig.Assignment.MT || playerAssignment == PartyRolesConfig.Assignment.OT && !_mgr.WorldState.Party.WithoutSlot().Any(p => p != player && p.Role == Role.Tank); + _pfVisu = new(_hints, _mgr.WorldState, player, player.TargetID, e => (e, _pfTargetRadius, _pfPositional, pfTank)); + } _pfVisu.Draw(_pfTree); var rebuild = false; diff --git a/BossMod/ThirdParty/Clipper2/Clipper.Engine.cs b/BossMod/ThirdParty/Clipper2/Clipper.Engine.cs index 0fc5de82bd..91a0d9920b 100644 --- a/BossMod/ThirdParty/Clipper2/Clipper.Engine.cs +++ b/BossMod/ThirdParty/Clipper2/Clipper.Engine.cs @@ -887,7 +887,7 @@ protected void AddReuseableData(ReuseableDataContainer64 reuseableData) } } - // VBM/BMR edit: a version of AddReusableData that forces polytype; useful if same data is to be reused as subject or clip + // BMR edit: a version of AddReusableData that forces polytype; useful if same data is to be reused as subject or clip [MethodImpl(MethodImplOptions.AggressiveInlining)] protected void AddReuseableData(ReuseableDataContainer64 reuseableData, PathType typeOverride) { @@ -3163,7 +3163,7 @@ public class Clipper64 : ClipperBase base.AddReuseableData(reuseableData); } - // VBM/BMR edit: a version of AddReusableData that forces polytype; useful if same data is to be reused as subject or clip + // BMR edit: a version of AddReusableData that forces polytype; useful if same data is to be reused as subject or clip [MethodImpl(MethodImplOptions.AggressiveInlining)] public new void AddReuseableData(ReuseableDataContainer64 reuseableData, PathType typeOverride) {