From 3a990b77f05a6084a0f27b2ef7027c90cdc70be6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Valli=C3=A8re?= <6031413+AlexValliere@users.noreply.github.com> Date: Wed, 12 Mar 2025 22:51:33 +0100 Subject: [PATCH 1/3] feat: handle UNC paths in FileDialog (#2191) --- .../Interface/ImGuiFileDialog/FileDialog.Files.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Dalamud/Interface/ImGuiFileDialog/FileDialog.Files.cs b/Dalamud/Interface/ImGuiFileDialog/FileDialog.Files.cs index 121ec8890..705c0f100 100644 --- a/Dalamud/Interface/ImGuiFileDialog/FileDialog.Files.cs +++ b/Dalamud/Interface/ImGuiFileDialog/FileDialog.Files.cs @@ -36,6 +36,20 @@ public partial class FileDialog private static string ComposeNewPath(List decomp) { + // Handle UNC paths (network paths) + if (decomp.Count >= 2 && string.IsNullOrEmpty(decomp[0]) && string.IsNullOrEmpty(decomp[1])) + { + var pathParts = new List(decomp); + pathParts.RemoveRange(0, 2); + // Can not access server level or UNC root + if (pathParts.Count <= 1) + { + return string.Empty; + } + + return $"\\\\{string.Join('\\', pathParts)}"; + } + if (decomp.Count == 1) { var drivePath = decomp[0]; From e47b8164957aceddaa09f62e7be7c3093aa2e471 Mon Sep 17 00:00:00 2001 From: Blair Date: Thu, 13 Mar 2025 08:26:37 +1000 Subject: [PATCH 2/3] Remove command from assembly map when removed from command map (#2183) --- Dalamud/Game/Command/CommandManager.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Dalamud/Game/Command/CommandManager.cs b/Dalamud/Game/Command/CommandManager.cs index 078ce8c50..fdaa5833b 100644 --- a/Dalamud/Game/Command/CommandManager.cs +++ b/Dalamud/Game/Command/CommandManager.cs @@ -10,6 +10,7 @@ using Dalamud.IoC.Internal; using Dalamud.Logging.Internal; using Dalamud.Plugin.Internal.Types; using Dalamud.Plugin.Services; +using Dalamud.Utility; using FFXIVClientStructs.FFXIV.Client.System.String; using FFXIVClientStructs.FFXIV.Client.UI; @@ -149,6 +150,11 @@ internal sealed unsafe class CommandManager : IInternalDisposableService, IComma /// public bool RemoveHandler(string command) { + if (this.commandAssemblyNameMap.FindFirst(c => c.Key.Item1 == command, out var assemblyKeyValuePair)) + { + this.commandAssemblyNameMap.TryRemove(assemblyKeyValuePair.Key, out _); + } + return this.commandMap.Remove(command, out _); } From 2f0c31d024e8a3e82b7cbc12c6c1fc4e6fd0dee0 Mon Sep 17 00:00:00 2001 From: KazWolfe Date: Thu, 13 Mar 2025 12:34:13 -0700 Subject: [PATCH 3/3] fix: Use builtin method for target management (#2194) - Properly validate target preconditions --- Dalamud/Game/ClientState/Objects/TargetManager.cs | 12 ++++++------ lib/FFXIVClientStructs | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Dalamud/Game/ClientState/Objects/TargetManager.cs b/Dalamud/Game/ClientState/Objects/TargetManager.cs index 5d7ae8945..f81154693 100644 --- a/Dalamud/Game/ClientState/Objects/TargetManager.cs +++ b/Dalamud/Game/ClientState/Objects/TargetManager.cs @@ -20,7 +20,7 @@ internal sealed unsafe class TargetManager : IServiceType, ITargetManager { [ServiceManager.ServiceDependency] private readonly ObjectTable objectTable = Service.Get(); - + [ServiceManager.ServiceConstructor] private TargetManager() { @@ -29,8 +29,8 @@ internal sealed unsafe class TargetManager : IServiceType, ITargetManager /// public IGameObject? Target { - get => this.objectTable.CreateObjectReference((IntPtr)Struct->Target); - set => Struct->Target = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address; + get => this.objectTable.CreateObjectReference((IntPtr)Struct->GetHardTarget()); + set => Struct->SetHardTarget((FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address); } /// @@ -57,8 +57,8 @@ internal sealed unsafe class TargetManager : IServiceType, ITargetManager /// public IGameObject? SoftTarget { - get => this.objectTable.CreateObjectReference((IntPtr)Struct->SoftTarget); - set => Struct->SoftTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address; + get => this.objectTable.CreateObjectReference((IntPtr)Struct->GetSoftTarget()); + set => Struct->SetSoftTarget((FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address); } /// @@ -67,7 +67,7 @@ internal sealed unsafe class TargetManager : IServiceType, ITargetManager get => this.objectTable.CreateObjectReference((IntPtr)Struct->GPoseTarget); set => Struct->GPoseTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address; } - + /// public IGameObject? MouseOverNameplateTarget { diff --git a/lib/FFXIVClientStructs b/lib/FFXIVClientStructs index 484b1b588..2c3e84640 160000 --- a/lib/FFXIVClientStructs +++ b/lib/FFXIVClientStructs @@ -1 +1 @@ -Subproject commit 484b1b588be5e685855392f090ec9e3eea7b3a71 +Subproject commit 2c3e84640af5220b78b944a06fdca79c52144075