v1.0.0.1: Duty List quest click keeps Area Map open; player flags show on minimap
Made-with: Cursor
This commit is contained in:
@@ -33,6 +33,8 @@ public unsafe class IntegrationsController : IDisposable
|
||||
private bool _requestRefreshOnLoad = true;
|
||||
/// <summary>Frames to wait before moving the map off-screen after a silent refresh so the game has time to populate markers.</summary>
|
||||
private int _silentRefreshHideFramesRemaining;
|
||||
/// <summary>Frames to skip quest/temp-marker-triggered silent refresh after user opened map via Duty List (quest/gathering/flag/teleport).</summary>
|
||||
private int _suppressSilentRefreshFramesRemaining;
|
||||
|
||||
/// <summary>True while we're doing a silent refresh; OnAreaMapPreShow should not open the MapWindow.</summary>
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>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.</summary>
|
||||
private void SuppressSilentRefreshForUserMapOpen()
|
||||
{
|
||||
_suppressSilentRefreshFramesRemaining = 30; // ~1 second at typical framerate
|
||||
}
|
||||
|
||||
/// <summary>Request a silent map refresh; opens the map, waits a few frames for the game to populate markers (and caches), then Hide().</summary>
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user