From c9b50f8f72fb0d639d0e81b6a8ce98ae09ca9b1a Mon Sep 17 00:00:00 2001 From: Knack117 Date: Thu, 26 Feb 2026 22:40:34 -0500 Subject: [PATCH] v1.0.0.5: Fix crash when map texture path is invalid (ArgumentOutOfRangeException in Lumina GetFileHash) Made-with: Cursor --- Mappy/MapRenderer/MapRenderer.Core.cs | 22 ++++++++++++++++------ Mappy/Mappy.csproj | 2 +- Mappy/pluginmaster.json | 2 +- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/Mappy/MapRenderer/MapRenderer.Core.cs b/Mappy/MapRenderer/MapRenderer.Core.cs index 940804b..6b9726b 100644 --- a/Mappy/MapRenderer/MapRenderer.Core.cs +++ b/Mappy/MapRenderer/MapRenderer.Core.cs @@ -214,7 +214,7 @@ public unsafe partial class MapRenderer : IDisposable // Markers are drawn from whatever the game has already populated (e.g. after opening the map once). // When the game has the current map loaded (area map open or just closed), update our cache for this map. - if (agent->SelectedMapId == currentMapId && agent->SelectedMapPath.Length > 0) { + if (agent->SelectedMapId == currentMapId && agent->SelectedMapPath.Length > 0 && agent->SelectedMapBgPath.Length > 0) { var bgPath = $"{agent->SelectedMapBgPath}.tex"; var fgPath = $"{agent->SelectedMapPath}.tex"; var pathKey = bgPath + "|" + fgPath; @@ -346,13 +346,23 @@ public unsafe partial class MapRenderer : IDisposable private static TexFile? GetTexFile(string rawPath) { - var path = Service.TextureSubstitutionProvider.GetSubstitutedPath(rawPath); - - if (Path.IsPathRooted(path)) { - return Service.DataManager.GameData.GetFileFromDisk(path); + if (string.IsNullOrWhiteSpace(rawPath)) return null; + string path; + try { + path = Service.TextureSubstitutionProvider.GetSubstitutedPath(rawPath); + } catch { + return null; } + if (string.IsNullOrWhiteSpace(path)) return null; - return Service.DataManager.GetFile(path); + try { + if (Path.IsPathRooted(path)) { + return Service.DataManager.GameData.GetFileFromDisk(path); + } + return Service.DataManager.GetFile(path); + } catch { + return null; + } } private void DrawMapMarkers() diff --git a/Mappy/Mappy.csproj b/Mappy/Mappy.csproj index 4b75754..beb2775 100644 --- a/Mappy/Mappy.csproj +++ b/Mappy/Mappy.csproj @@ -4,7 +4,7 @@ HSMappy HSMappy Knack117 - 1.0.0.4 + 1.0.0.5 A more versatile in-game map. Replaces the in-game map with an ImGui implementation with several additional features. Fork with minimap improvements, quest radius on minimap, and more. http://brassnet.ddns.net:33983/KnackAtNite/HSMappy diff --git a/Mappy/pluginmaster.json b/Mappy/pluginmaster.json index f7ea522..376cabc 100644 --- a/Mappy/pluginmaster.json +++ b/Mappy/pluginmaster.json @@ -1 +1 @@ -[{"Author":"Knack117","Name":"HSMappy","Punchline":"A more versatile in-game map.","Description":"Replaces the in-game map with an ImGui implementation with several additional features. Fork with minimap improvements, quest radius on minimap, white gradient player cone, and more.","Changelog":"1.0.0.4: Temp marker circle refreshes when quest objective is progressed. 1.0.0.3: Fix marker cache refresh after quest turn-in; invalidate temp cache so old markers don't persist. 1.0.0.2: Red direction arrow on minimap pointing to player flag. 1.0.0.1: Duty List quest click keeps Area Map open; player flags show on minimap. 1.0.0.0: Initial HSMappy release. Minimap: quest radius circle (orange, transparent), tooltip; cone drawn under markers; white gradient cone; /hsmappy commands.","InternalName":"HSMappy","AssemblyVersion":"1.0.0.4","RepoUrl":"http://brassnet.ddns.net:33983/KnackAtNite/HSMappy","ApplicableVersion":"any","Tags":["map","mapping","overlay","utility"],"CategoryTags":["jobs"],"DalamudApiLevel":14,"DownloadLinkInstall":"http://brassnet.ddns.net:33983/KnackAtNite/HSMappy/releases/download/v1.0.0.4/latest.zip","IsHide":false,"IsTestingExclusive":false,"DownloadLinkTesting":"http://brassnet.ddns.net:33983/KnackAtNite/HSMappy/releases/download/v1.0.0.4/latest.zip","DownloadLinkUpdate":"http://brassnet.ddns.net:33983/KnackAtNite/HSMappy/releases/download/v1.0.0.4/latest.zip","LastUpdate":"1772145010"}] +[{"Author":"Knack117","Name":"HSMappy","Punchline":"A more versatile in-game map.","Description":"Replaces the in-game map with an ImGui implementation with several additional features. Fork with minimap improvements, quest radius on minimap, white gradient player cone, and more.","Changelog":"1.0.0.5: Fix crash when map texture path is invalid (ArgumentOutOfRangeException in Lumina GetFileHash). 1.0.0.4: Temp marker circle refreshes when quest objective is progressed. 1.0.0.3: Fix marker cache refresh after quest turn-in; invalidate temp cache so old markers don't persist. 1.0.0.2: Red direction arrow on minimap pointing to player flag. 1.0.0.1: Duty List quest click keeps Area Map open; player flags show on minimap. 1.0.0.0: Initial HSMappy release. Minimap: quest radius circle (orange, transparent), tooltip; cone drawn under markers; white gradient cone; /hsmappy commands.","InternalName":"HSMappy","AssemblyVersion":"1.0.0.5","RepoUrl":"http://brassnet.ddns.net:33983/KnackAtNite/HSMappy","ApplicableVersion":"any","Tags":["map","mapping","overlay","utility"],"CategoryTags":["jobs"],"DalamudApiLevel":14,"DownloadLinkInstall":"http://brassnet.ddns.net:33983/KnackAtNite/HSMappy/releases/download/v1.0.0.5/latest.zip","IsHide":false,"IsTestingExclusive":false,"DownloadLinkTesting":"http://brassnet.ddns.net:33983/KnackAtNite/HSMappy/releases/download/v1.0.0.5/latest.zip","DownloadLinkUpdate":"http://brassnet.ddns.net:33983/KnackAtNite/HSMappy/releases/download/v1.0.0.5/latest.zip","LastUpdate":"1772146500"}]