diff --git a/Mappy/Controllers/IntegrationsController.cs b/Mappy/Controllers/IntegrationsController.cs
index d3aadb2..fd6cdf9 100644
--- a/Mappy/Controllers/IntegrationsController.cs
+++ b/Mappy/Controllers/IntegrationsController.cs
@@ -33,6 +33,8 @@ public unsafe class IntegrationsController : IDisposable
private bool _requestRefreshOnLoad = true;
/// Frames to wait before moving the map off-screen after a silent refresh so the game has time to populate markers.
private int _silentRefreshHideFramesRemaining;
+ /// Frames to skip quest/temp-marker-triggered silent refresh after user opened map via Duty List (quest/gathering/flag/teleport).
+ private int _suppressSilentRefreshFramesRemaining;
/// True while we're doing a silent refresh; OnAreaMapPreShow should not open the MapWindow.
public static bool SilentRefreshInProgress { get; private set; }
@@ -135,20 +137,29 @@ public unsafe class IntegrationsController : IDisposable
}
// Quest turned in, quest accepted, or objectives updated: refresh so markers stay in sync
+ // Skip these triggers when user just opened map via Duty List (quest/gathering/flag/teleport)
+ // so we don't close the map they intentionally opened.
+ if (_suppressSilentRefreshFramesRemaining > 0) {
+ _suppressSilentRefreshFramesRemaining--;
+ }
+ var skipQuestTempRefresh = _suppressSilentRefreshFramesRemaining > 0;
+
var questCount = GetActiveQuestCount();
var tempCount = -1;
try { tempCount = (int)AgentMap.Instance()->TempMapMarkerCount; } catch { }
- if (_lastQuestCount >= 0 && questCount < _lastQuestCount)
- RequestSilentRefresh(); // quest turned in
- if (_lastQuestCount >= 0 && questCount > _lastQuestCount)
- RequestSilentRefresh(); // quest accepted
- if (_lastTempMarkerCount >= 0 && tempCount >= 0 && tempCount < _lastTempMarkerCount)
- RequestSilentRefresh(); // objectives decreased
- if (_lastTempMarkerCount >= 0 && tempCount >= 0 && tempCount > _lastTempMarkerCount)
- RequestSilentRefresh(); // objectives added (e.g. new quest)
var sequenceSnapshot = GetQuestSequenceSnapshot();
- if (_lastQuestSequenceSnapshot.Length > 0 && sequenceSnapshot != _lastQuestSequenceSnapshot)
- RequestSilentRefresh(); // quest step advanced (multi-step objective)
+ if (!skipQuestTempRefresh) {
+ if (_lastQuestCount >= 0 && questCount < _lastQuestCount)
+ RequestSilentRefresh(); // quest turned in
+ if (_lastQuestCount >= 0 && questCount > _lastQuestCount)
+ RequestSilentRefresh(); // quest accepted
+ if (_lastTempMarkerCount >= 0 && tempCount >= 0 && tempCount < _lastTempMarkerCount)
+ RequestSilentRefresh(); // objectives decreased
+ if (_lastTempMarkerCount >= 0 && tempCount >= 0 && tempCount > _lastTempMarkerCount)
+ RequestSilentRefresh(); // objectives added (e.g. new quest)
+ if (_lastQuestSequenceSnapshot.Length > 0 && sequenceSnapshot != _lastQuestSequenceSnapshot)
+ RequestSilentRefresh(); // quest step advanced (multi-step objective)
+ }
_lastQuestCount = questCount;
_lastTempMarkerCount = tempCount;
_lastQuestSequenceSnapshot = sequenceSnapshot;
@@ -173,6 +184,12 @@ public unsafe class IntegrationsController : IDisposable
}
}
+ /// Call when user opens map via Duty List (quest/gathering/flag/teleport). Suppresses quest/temp-marker-triggered silent refresh for ~1s so we don't close the map.
+ private void SuppressSilentRefreshForUserMapOpen()
+ {
+ _suppressSilentRefreshFramesRemaining = 30; // ~1 second at typical framerate
+ }
+
/// Request a silent map refresh; opens the map, waits a few frames for the game to populate markers (and caches), then Hide().
private void RequestSilentRefresh()
{
@@ -348,10 +365,11 @@ public unsafe class IntegrationsController : IDisposable
Service.Log.Debug($"[OpenMap] Centering Map on X = {targetMarker.X}, Y = {targetMarker.Y}");
}
+ SuppressSilentRefreshForUserMapOpen();
System.MapWindow.ProcessingCommand = true;
}
- private static void ProcessGatheringLink(AgentMap* agent)
+ private void ProcessGatheringLink(AgentMap* agent)
{
Service.Log.Debug("[OpenMap] Processing GatheringLog Event");
@@ -363,10 +381,11 @@ public unsafe class IntegrationsController : IDisposable
Service.Log.Debug($"[OpenMap] Centering Map on X = {targetMarker.X}, Y = {targetMarker.Y}");
}
+ SuppressSilentRefreshForUserMapOpen();
System.MapWindow.ProcessingCommand = true;
}
- private static void ProcessFlagLink(AgentMap* agent)
+ private void ProcessFlagLink(AgentMap* agent)
{
Service.Log.Debug("[OpenMap] Processing FlagMarker Event");
@@ -378,10 +397,11 @@ public unsafe class IntegrationsController : IDisposable
Service.Log.Debug($"[OpenMap] Centering Map on X = {targetMarker.X}, Y = {targetMarker.Y}");
}
+ SuppressSilentRefreshForUserMapOpen();
System.MapWindow.ProcessingCommand = true;
}
- private static void ProcessForayLink(AgentMap* agent, OpenMapInfo* mapInfo)
+ private void ProcessForayLink(AgentMap* agent, OpenMapInfo* mapInfo)
{
Service.Log.Debug("[OpenMap] Processing Bozja Event");
@@ -392,6 +412,7 @@ public unsafe class IntegrationsController : IDisposable
CenterOnMarker(eventMarker.Value);
}
+ SuppressSilentRefreshForUserMapOpen();
System.MapWindow.ProcessingCommand = true;
}
@@ -407,12 +428,14 @@ public unsafe class IntegrationsController : IDisposable
OpenMap(mapInfo->MapId);
+ SuppressSilentRefreshForUserMapOpen();
System.MapWindow.ProcessingCommand = true;
return;
}
Service.Log.Debug($"[OpenMap] Already in MapId: {targetMapId}, aborting.");
+ SuppressSilentRefreshForUserMapOpen();
System.MapWindow.ProcessingCommand = true;
}
diff --git a/Mappy/MapRenderer/MapRenderer.MinimapMarkers.cs b/Mappy/MapRenderer/MapRenderer.MinimapMarkers.cs
index 75b4ba6..da1b86c 100644
--- a/Mappy/MapRenderer/MapRenderer.MinimapMarkers.cs
+++ b/Mappy/MapRenderer/MapRenderer.MinimapMarkers.cs
@@ -674,7 +674,8 @@ public partial class MapRenderer
var agent = AgentMap.Instance();
if (agent->FlagMarkerCount is 0) return;
ref var flag = ref agent->FlagMapMarkers[0];
- if (flag.TerritoryId != agent->CurrentMapId) return;
+ // Match territory (zone) and map (sub-area); flag stores TerritoryId and MapId from SetFlagMapMarker
+ if (flag.TerritoryId != agent->CurrentTerritoryId || flag.MapId != agent->CurrentMapId) return;
if (System.IconConfig.IconSettingMap.TryGetValue(flag.MapMarker.IconId, out var setting) && setting.Hide) return;
diff --git a/Mappy/Mappy.csproj b/Mappy/Mappy.csproj
index 4a15ab4..bd80f85 100644
--- a/Mappy/Mappy.csproj
+++ b/Mappy/Mappy.csproj
@@ -4,7 +4,7 @@
HSMappy
HSMappy
Knack117
- 1.0.0.0
+ 1.0.0.1
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 33de98a..f0db4b5 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.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.0","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.0/latest.zip","IsHide":false,"IsTestingExclusive":false,"DownloadLinkTesting":"http://brassnet.ddns.net:33983/KnackAtNite/HSMappy/releases/download/v1.0.0.0/latest.zip","DownloadLinkUpdate":"http://brassnet.ddns.net:33983/KnackAtNite/HSMappy/releases/download/v1.0.0.0/latest.zip","LastUpdate":"1761700000"}]
+[{"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.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.1","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.1/latest.zip","IsHide":false,"IsTestingExclusive":false,"DownloadLinkTesting":"http://brassnet.ddns.net:33983/KnackAtNite/HSMappy/releases/download/v1.0.0.1/latest.zip","DownloadLinkUpdate":"http://brassnet.ddns.net:33983/KnackAtNite/HSMappy/releases/download/v1.0.0.1/latest.zip","LastUpdate":"1772140521"}]