From 053cb3822736b532117fb0975f81fc5797147df3 Mon Sep 17 00:00:00 2001 From: Ethan Henderson Date: Sun, 28 Jun 2026 01:11:35 -0600 Subject: [PATCH 01/11] feat(Meta): Move custom action images to where they belong, Add them and other files to the solution items --- WrathCombo.slnx | 13 ++++++++ WrathCombo/WrathCombo.csproj | 30 ++++++++---------- .../custom_action_images}/AoEDPS.png | Bin .../custom_action_images}/AoEHeals.png | Bin .../custom_action_images}/SingleTargetDPS.png | Bin .../SingleTargetHeals.png | Bin 6 files changed, 26 insertions(+), 17 deletions(-) rename {WrathCombo/Resources => res/custom_action_images}/AoEDPS.png (100%) rename {WrathCombo/Resources => res/custom_action_images}/AoEHeals.png (100%) rename {WrathCombo/Resources => res/custom_action_images}/SingleTargetDPS.png (100%) rename {WrathCombo/Resources => res/custom_action_images}/SingleTargetHeals.png (100%) diff --git a/WrathCombo.slnx b/WrathCombo.slnx index f6463661a4..b6634fc137 100644 --- a/WrathCombo.slnx +++ b/WrathCombo.slnx @@ -19,6 +19,19 @@ + + + + + + + + + + + + + diff --git a/WrathCombo/WrathCombo.csproj b/WrathCombo/WrathCombo.csproj index 42f4d93929..40370028f6 100644 --- a/WrathCombo/WrathCombo.csproj +++ b/WrathCombo/WrathCombo.csproj @@ -30,11 +30,6 @@ false false - - - - - @@ -72,6 +67,19 @@ + + + Always + + + Always + + + Always + + + Always + @@ -431,18 +439,6 @@ - - Always - - - Always - - - Always - - - Always - PreserveNewest diff --git a/WrathCombo/Resources/AoEDPS.png b/res/custom_action_images/AoEDPS.png similarity index 100% rename from WrathCombo/Resources/AoEDPS.png rename to res/custom_action_images/AoEDPS.png diff --git a/WrathCombo/Resources/AoEHeals.png b/res/custom_action_images/AoEHeals.png similarity index 100% rename from WrathCombo/Resources/AoEHeals.png rename to res/custom_action_images/AoEHeals.png diff --git a/WrathCombo/Resources/SingleTargetDPS.png b/res/custom_action_images/SingleTargetDPS.png similarity index 100% rename from WrathCombo/Resources/SingleTargetDPS.png rename to res/custom_action_images/SingleTargetDPS.png diff --git a/WrathCombo/Resources/SingleTargetHeals.png b/res/custom_action_images/SingleTargetHeals.png similarity index 100% rename from WrathCombo/Resources/SingleTargetHeals.png rename to res/custom_action_images/SingleTargetHeals.png From 5dee697f431f6c69c96126b756f19be460e92c68 Mon Sep 17 00:00:00 2001 From: Ethan Henderson Date: Sun, 28 Jun 2026 01:24:13 -0600 Subject: [PATCH 02/11] fix(Meta): Match Custom Action icons output-path to other images imported into the project --- WrathCombo/Native/CustomActionManager.cs | 26 ++++++++++++++++++++---- WrathCombo/WrathCombo.csproj | 18 +++++----------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/WrathCombo/Native/CustomActionManager.cs b/WrathCombo/Native/CustomActionManager.cs index e3c330c40d..bbc97b26da 100644 --- a/WrathCombo/Native/CustomActionManager.cs +++ b/WrathCombo/Native/CustomActionManager.cs @@ -370,10 +370,28 @@ public CustomActionSetup() EzSignatureHelper.Initialize(this); AddonActionBarBase_ReceiveEventHook?.Enable(); Manager = new(Svc.SigScanner, Svc.Hook, Svc.Texture, Svc.Framework); - _singleTargetDPS = new(All.SingleTargetDPS, "Single Target DPS", "This is for the Single Target DPS combos.", 1504, customIconPath: Path.Combine(Svc.PluginInterface.AssemblyLocation.DirectoryName!, "Resources/SingleTargetDPS.png")); - _aoeDPS = new(All.AoEDPS, "AoE DPS", "This is for the AoE DPS combos.", 1505, customIconPath: Path.Combine(Svc.PluginInterface.AssemblyLocation.DirectoryName!, "Resources/AoEDPS.png")); - _singleTargeHeals = new(All.SingleTargetHeals, "Single Target Heals", "This is for the Single Target Heal combos.", 1508, customIconPath: Path.Combine(Svc.PluginInterface.AssemblyLocation.DirectoryName!, "Resources/SingleTargetHeals.png")); - _aoeHeals = new(All.AoeHeals, "AoE Heals", "This is for the AoE Heal combos.", 1510, customIconPath: Path.Combine(Svc.PluginInterface.AssemblyLocation.DirectoryName!, "Resources/AoEHeals.png")); + var path = Svc.PluginInterface.AssemblyLocation.Directory?.FullName!; + + _singleTargetDPS = new(All.SingleTargetDPS, + "Single Target DPS", + "This is for the Single Target DPS combos.", 1504, + customIconPath: Path.Combine(path, + "images\\SingleTargetDPS.png")); + _aoeDPS = new(All.AoEDPS, + "AoE DPS", + "This is for the AoE DPS combos.", 1505, + customIconPath: Path.Combine(path, + "images\\AoEDPS.png")); + _singleTargeHeals = new(All.SingleTargetHeals, + "Single Target Heals", + "This is for the Single Target Heal combos.", 1508, + customIconPath: Path.Combine(path, + "images\\SingleTargetHeals.png")); + _aoeHeals = new(All.AoeHeals, + "AoE Heals", + "This is for the AoE Heal combos.", 1510, + customIconPath: Path.Combine(path, + "images\\AoEHeals.png")); Manager.Register(_singleTargetDPS, _aoeDPS, _singleTargeHeals, _aoeHeals); } diff --git a/WrathCombo/WrathCombo.csproj b/WrathCombo/WrathCombo.csproj index 40370028f6..2a3179efe5 100644 --- a/WrathCombo/WrathCombo.csproj +++ b/WrathCombo/WrathCombo.csproj @@ -67,19 +67,11 @@ - - - Always - - - Always - - - Always - - - Always - + + + + + From 6a93e694b8150b9161823142c830fd40a4689bb5 Mon Sep 17 00:00:00 2001 From: Ethan Henderson Date: Sun, 28 Jun 2026 20:20:30 -0600 Subject: [PATCH 03/11] fix(Commands): Give a more useful error --- WrathCombo/Commands.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WrathCombo/Commands.cs b/WrathCombo/Commands.cs index d98ed0d566..b9bc12e50c 100644 --- a/WrathCombo/Commands.cs +++ b/WrathCombo/Commands.cs @@ -792,11 +792,11 @@ internal void HandleOpenCommand } else { - DuoLog.Error($"{argument[0]} is not a correct job abbreviation."); - return; + if (argument[0].Length < 4) + DuoLog.Error($"{argument[0]} is not a correct job abbreviation."); + else + DuoLog.Error($"{argument[0]} is not an understood command."); } - - } /// From a72607bee9a68783d3a93bb44e78bc46193885fc Mon Sep 17 00:00:00 2001 From: Ethan Henderson Date: Mon, 29 Jun 2026 10:11:15 -0600 Subject: [PATCH 04/11] fix: Squash CS0219 --- WrathCombo/AutoRotation/AutoRotationController.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/WrathCombo/AutoRotation/AutoRotationController.cs b/WrathCombo/AutoRotation/AutoRotationController.cs index 9a659bd297..1e15a9ab66 100644 --- a/WrathCombo/AutoRotation/AutoRotationController.cs +++ b/WrathCombo/AutoRotation/AutoRotationController.cs @@ -87,6 +87,11 @@ private void ScanForWarnings(Dalamud.Game.Chat.IHandleableChatMessage message) Paused = true; Svc.Framework.RunOnTick(() => Paused = false, TimeSpan.FromSeconds(UnpauseSeconds)); } + + if (raidwideWarningFound) + { + // + } } public void Dispose() From ec67a7c3d0f3acb0338838ad0cc6b4cbf8edd84e Mon Sep 17 00:00:00 2001 From: Ethan Henderson Date: Mon, 29 Jun 2026 10:11:35 -0600 Subject: [PATCH 05/11] fix: Squash CS0649 --- WrathCombo/AutoRotation/AutoRotationController.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/WrathCombo/AutoRotation/AutoRotationController.cs b/WrathCombo/AutoRotation/AutoRotationController.cs index 1e15a9ab66..f3bfd2bb56 100644 --- a/WrathCombo/AutoRotation/AutoRotationController.cs +++ b/WrathCombo/AutoRotation/AutoRotationController.cs @@ -49,7 +49,9 @@ internal unsafe class AutoRotationController public static bool WouldLikeToGroundTarget; public static bool Paused; +#pragma warning disable CS0649 public static int UnpauseSeconds; +#pragma warning restore CS0649 public static IGameObject? AutorotHealTarget; public static bool AutorotRaidwiding; From 02633c65f58fb495ede94e8f84eb69aa2886cb65 Mon Sep 17 00:00:00 2001 From: Ethan Henderson Date: Mon, 29 Jun 2026 10:12:09 -0600 Subject: [PATCH 06/11] fix: Squash CS0649 --- WrathCombo/Native/CustomActionManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WrathCombo/Native/CustomActionManager.cs b/WrathCombo/Native/CustomActionManager.cs index 7f55d763ca..b361fe7ce5 100644 --- a/WrathCombo/Native/CustomActionManager.cs +++ b/WrathCombo/Native/CustomActionManager.cs @@ -340,7 +340,7 @@ public sealed unsafe class CustomActionSetup : IDisposable public (int Hotbar, int Slot)? HoveredSlot = null; [EzHook("48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 48 89 7C 24 ?? 41 56 48 83 EC 20 48 8B 7C 24 ?? 48 8B D9", false)] - private EzHook? AddonActionBarBase_ReceiveEventHook; + private EzHook? AddonActionBarBase_ReceiveEventHook = null!; private unsafe void AddonActionBarBase_ReceiveEventDetour(AddonActionBarBase* thisPtr, AtkEventType eventType, int eventParam, AtkEvent* atkEvent, AtkEventData* atkEventData) { From f70d380fb78b8f9955100884d6cdb65ce8cebe53 Mon Sep 17 00:00:00 2001 From: Ethan Henderson Date: Mon, 29 Jun 2026 10:12:44 -0600 Subject: [PATCH 07/11] fix: Squash CS0169 --- WrathCombo/Data/ActionWatching.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/WrathCombo/Data/ActionWatching.cs b/WrathCombo/Data/ActionWatching.cs index 980be5074c..36a385f79b 100644 --- a/WrathCombo/Data/ActionWatching.cs +++ b/WrathCombo/Data/ActionWatching.cs @@ -77,7 +77,6 @@ public static class ActionWatching private static CancellationToken token; public static bool UpdatingActions; - private static bool _tainted; static unsafe ActionWatching() { From a277732f9a13a19d75cfa8e47c38ad3705c81220 Mon Sep 17 00:00:00 2001 From: Ethan Henderson Date: Mon, 29 Jun 2026 10:14:48 -0600 Subject: [PATCH 08/11] fix: Squash CS8618, by caching the Category Name field --- WrathCombo/Window/Functions/Setting.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/WrathCombo/Window/Functions/Setting.cs b/WrathCombo/Window/Functions/Setting.cs index 2a3d06b886..e64ba941f5 100644 --- a/WrathCombo/Window/Functions/Setting.cs +++ b/WrathCombo/Window/Functions/Setting.cs @@ -31,6 +31,7 @@ public Setting(string settingName) if (CachedSettings.TryGetValue(settingName, out var cachedSetting)) { Category = cachedSetting.Category; + CategoryName = cachedSetting.CategoryName; Name = cachedSetting.Name; HelpMark = cachedSetting.HelpMark; RecommendedValue = cachedSetting.RecommendedValue; From fd4a6fa3ae12e5b06db906085c66811d1293508b Mon Sep 17 00:00:00 2001 From: Ethan Henderson Date: Mon, 29 Jun 2026 10:15:40 -0600 Subject: [PATCH 09/11] fix: Squash CS0219 --- WrathCombo/Window/Functions/UserConfig.cs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/WrathCombo/Window/Functions/UserConfig.cs b/WrathCombo/Window/Functions/UserConfig.cs index 87ee61b4bc..0ed4c5ff1d 100644 --- a/WrathCombo/Window/Functions/UserConfig.cs +++ b/WrathCombo/Window/Functions/UserConfig.cs @@ -53,7 +53,6 @@ public static bool DrawSliderInt(int minValue, int maxValue, string config, stri IsSubBox = true, ContentsFunc = () => { - bool inputChanged = false; Vector2 currentPos = ImGui.GetCursorPos(); ImGui.SetCursorPosX(currentPos.X + itemWidth); ImGui.PushTextWrapPos(wrapPos); @@ -64,17 +63,10 @@ public static bool DrawSliderInt(int minValue, int maxValue, string config, stri Vector2 textLength = ImGui.CalcTextSize(sliderDescription); string newLines = ""; for (int i = 1; i < lines; i++) - { if (i % 2 == 0) - { newLines += "\n"; - } else - { newLines += "\n\n"; - } - - } if (hasAdditionalChoice) { From 6129733e128f831529737014eacf273e842f9653 Mon Sep 17 00:00:00 2001 From: Ethan Henderson Date: Mon, 29 Jun 2026 10:16:25 -0600 Subject: [PATCH 10/11] fix: Squash CS0219 --- WrathCombo/Services/IPC/Helper.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/WrathCombo/Services/IPC/Helper.cs b/WrathCombo/Services/IPC/Helper.cs index 82e7b80390..b14d802d31 100644 --- a/WrathCombo/Services/IPC/Helper.cs +++ b/WrathCombo/Services/IPC/Helper.cs @@ -79,7 +79,6 @@ internal bool CheckForBailConditionsAtSetTime /// The Opposite-mode preset. internal static Preset? GetOppositeModeCombo(Preset preset) { - const StringComparison lower = StringComparison.CurrentCultureIgnoreCase; var presetData = preset.Attributes(); // Bail if it is not one of the main combos From b7fb4754ae17aa8068898760209e528ee41090cb Mon Sep 17 00:00:00 2001 From: Ethan Henderson Date: Mon, 29 Jun 2026 10:22:04 -0600 Subject: [PATCH 11/11] fix: Squash CS8618 --- WrathCombo/Attributes/SettingAttributes.cs | 32 +++++++++++----------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/WrathCombo/Attributes/SettingAttributes.cs b/WrathCombo/Attributes/SettingAttributes.cs index 25c881d427..b30634d793 100644 --- a/WrathCombo/Attributes/SettingAttributes.cs +++ b/WrathCombo/Attributes/SettingAttributes.cs @@ -2,6 +2,7 @@ using System; using WrathCombo.Resources.Localization.UI.Settings; + // ReSharper disable ClassNeverInstantiated.Global #endregion @@ -29,11 +30,11 @@ public string LocalizedCategoryName { return TheCategory switch { - Category.Main_UI_Options => SettingsCfgUI.MainUIOptions_Category, + Category.Main_UI_Options => SettingsCfgUI.MainUIOptions_Category, Category.Rotation_Behavior_Options => SettingsCfgUI.RotationBehaviourOptions_Category, - Category.Targeting_Options => SettingsCfgUI.TargetingOptions_Category, - Category.Troubleshooting_Options => SettingsCfgUI.TroubleshootingOptions_Category, - _ => "UNKNOWN" + Category.Targeting_Options => SettingsCfgUI.TargetingOptions_Category, + Category.Troubleshooting_Options => SettingsCfgUI.TroubleshootingOptions_Category, + _ => "UNKNOWN" }; } } @@ -49,6 +50,7 @@ public class SettingGroup( internal string NameSpace { get; } = nameSpace; internal bool ShouldThisGroupGetDisabled { get; } = shouldThisGroupGetDisabled; } + [AttributeUsage(AttributeTargets.Field)] public class SettingCollapsibleGroup(string groupName) : Attribute { @@ -80,22 +82,20 @@ public enum Type Slider_Float, Stack, } - - internal string Name { get; } - internal string HelpMark { get; } - internal string RecommendedValue { get; } - internal string DefaultValue { get; } - internal string? UnitLabel { get; } + + // All text is now fetched when loaded from attribute from our localizations + internal Type TheType { get; } = type; - internal string? ExtraHelpMark { get; } - internal string? WarningMark { get; } - internal string? ExtraText { get; } - internal float? MinFloat { get; } = + + internal float? MinFloat { get; } = float.IsNaN(minFloat) ? null : minFloat; - internal float? MaxFloat { get; } = + + internal float? MaxFloat { get; } = float.IsNaN(maxFloat) ? null : maxFloat; + internal int? MinInt { get; } = minInt == int.MinValue ? null : minInt; + internal int? MaxInt { get; } = maxInt == int.MaxValue ? null : maxInt; @@ -115,4 +115,4 @@ public class SettingUI_Or : Attribute [AttributeUsage(AttributeTargets.Field)] public class SettingUI_RetargetIcon : Attribute { -} \ No newline at end of file +}