v1.6.1: Fix map icon completion persistence after objective fulfillment
- SetObjectivesDirty: Add missing loop to reset isUpdated on SpecialObjectives - PopulateObjective: Add completion guard for objectives without Update fn - Bump version to 1.6.1 across TOC and changelogs
This commit is contained in:
@@ -1,5 +1,13 @@
|
||||
# Changelog
|
||||
|
||||
## v1.6.1 (2026-05-04)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- **[Fix — Map Icon Completion]** Resolved a bug where quest objective icons (map pins and minimap markers) persisted on the world map and minimap after objectives were fulfilled, only disappearing after speaking to the quest giver to complete the quest.
|
||||
- **SpecialObjectives Dirty Flag**: Added a missing loop in `SetObjectivesDirty` to reset `isUpdated = false` on `quest.SpecialObjectives` alongside the existing `quest.Objectives` loop. Previously, special objectives (e.g. demonic runestones, portal-closing mechanics) would skip the `ObjectiveUpdate` early-exit guard because their `isUpdated` flag was never cleared, preventing `objective.Completed` from being set to `true` and leaving map icons on-screen indefinitely.
|
||||
- **Completion Guard in PopulateObjective**: Added a defensive check in `PopulateObjective` so that objectives without an `Update` function still unload their spawned icons if `objective.Completed` or `quest.isComplete` is already `true` from a prior update cycle.
|
||||
|
||||
## Session 34 (2026-05-02)
|
||||
|
||||
### Maintenance
|
||||
|
||||
@@ -802,6 +802,15 @@ function QuestieQuest:SetObjectivesDirty(questId)
|
||||
objective.isUpdated = false
|
||||
objKey, objective = next(quest.Objectives, objKey)
|
||||
end
|
||||
-- Also dirty SpecialObjectives (e.g. demonic runestones, portal-closing mechanics).
|
||||
-- Without this, ObjectiveUpdate's isUpdated early-exit prevents objective.Completed
|
||||
-- from being set to true, so _UnloadAlreadySpawnedIcons is never reached and icons
|
||||
-- linger on the map/minimap after the objectives are fulfilled.
|
||||
local soKey, sObjective = next(quest.SpecialObjectives or {})
|
||||
while soKey do
|
||||
sObjective.isUpdated = false
|
||||
soKey, sObjective = next(quest.SpecialObjectives, soKey)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1336,7 +1345,14 @@ function QuestieQuest:PopulateObjective(quest, objectiveIndex, objective, blockI
|
||||
Questie:Debug(Questie.DEBUG_INFO, "[QuestieQuest:PopulateObjective]", objective.Description)
|
||||
|
||||
if (not objective.Update) then
|
||||
Questie:Debug(Questie.DEBUG_INFO, "[QuestieQuest:PopulateObjective] - Quest is already updated. --> Exiting!")
|
||||
-- No Update function means static/pre-populated objective.
|
||||
-- Still check completion state so icons are removed if this objective was
|
||||
-- already marked complete from a previous update cycle.
|
||||
if objective.Completed or quest.isComplete then
|
||||
Questie:Debug(Questie.DEBUG_INFO,
|
||||
"[QuestieQuest:PopulateObjective] - No Update fn but objective is complete, unloading icons.")
|
||||
_UnloadAlreadySpawnedIcons(objective)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@
|
||||
## Notes-esES: Ayundante de misión
|
||||
## Notes-ptBR: Ajudante de missão
|
||||
## Notes-frFR: Assistant de quête
|
||||
## Version: 1.6.0
|
||||
## Version: 1.6.1
|
||||
## OptionalDeps: Ace3, CallbackHandler-1.0, HereBeDragons, LibDataBroker-1.1, LibDBIcon-1.0, LibSharedMedia-3.0, LibStub, LibUIDropDownMenu, Questie-X-WotLKDB, Questie-X-ClassicDB, Questie-X-TBCDB, Questie-X-TurtleDB, Questie-X-AscensionDB, Questie-X-EbonholdDB
|
||||
## SavedVariables: QuestieConfig, QuestieLearnerDB, QuestieCacheDB, QuestieJourneyDB
|
||||
## SavedVariablesPerCharacter: QuestieConfigCharacter
|
||||
|
||||
+13
-1
@@ -169,13 +169,25 @@
|
||||
<h1>Questie-X Documentation</h1>
|
||||
<p class="subtitle">Complete history of changes, fixes, and additions.</p>
|
||||
<div style="display: flex; justify-content: center; gap: 10px;">
|
||||
<code>Version: v1.6.0</code>
|
||||
<code>Version: v1.6.1</code>
|
||||
<a href="index.html"
|
||||
style="background: var(--bg-tertiary); color: var(--accent-blue); text-decoration: none; padding: 2px 6px; border-radius: 4px; font-size: 0.9em; border: 1px solid var(--border-color);">← Back to Documentation</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<h2 id="v161">v1.6.1 — Map Icon Completion Fix</h2>
|
||||
<ul>
|
||||
<li><strong>[Fix — Map Icon Completion]</strong> Resolved a bug where quest objective icons (map pins and minimap markers) persisted on the world map and minimap after objectives were fulfilled, only disappearing after speaking to the quest giver to complete the quest.
|
||||
<ul>
|
||||
<li><strong>SpecialObjectives Dirty Flag</strong>: Added a missing loop in <code>SetObjectivesDirty</code> to reset <code>isUpdated = false</code> on <code>quest.SpecialObjectives</code> alongside the existing <code>quest.Objectives</code> loop. Previously, special objectives (e.g. demonic runestones, portal-closing mechanics) would skip the <code>ObjectiveUpdate</code> early-exit guard because their <code>isUpdated</code> flag was never cleared, preventing <code>objective.Completed</code> from being set to <code>true</code> and leaving map icons on-screen indefinitely.</li>
|
||||
<li><strong>Completion Guard in PopulateObjective</strong>: Added a defensive check in <code>PopulateObjective</code> so that objectives without an <code>Update</code> function still unload their spawned icons if <code>objective.Completed</code> or <code>quest.isComplete</code> is already <code>true</code> from a prior update cycle.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2 id="v160">v1.6.0 — Map Search & Data Integrity</h2>
|
||||
<ul>
|
||||
<li><strong>[Fix — Map Search DB]</strong> Resolved a critical database issue where objects and NPCs searched via Advanced Search failed to display all available spawn locations.
|
||||
|
||||
Reference in New Issue
Block a user