- SmoothReset now accepts { skipCacheTest = true } to short-circuit the game cache wait and draw-queue drain
- ClusterRedraw passes the flag so icon-cluster and dense-pin-clustering sliders redraw immediately
- QuestieOptionsAdvanced wires the spawn-pin-dedup-radius slider directly to ClusterRedraw instead of the delayed SmoothReset path
Error: attempt to index field '?' (a number value) at line 1932.
waypoints[1] was a bare number instead of a coordinate pair {x,y}.
Added type(waypoints[1]) ~= 'table' guard alongside existing type(waypoints)
check. Also simplified firstWaypoint access since the guard ensures it's a table.
The underlying data issue (flat numbers vs coordinate pairs) is in the DB
and should be tracked separately — this fix prevents the crash only.
- Fix: isSunstrider block in _MergeSpawnEvidence now checks IsAscensionProtected
before writing learner data to npcDataOverrides. Without this guard, each Mana
Wyrm kill overwrote AscensionDB's z1241=5 data with learner z3431 coords.
- Fix: Clustering disabled for zone 1241 (Sunstrider Isle) in _DrawObjectiveIcons
so all 5 AscensionDB spawn pins display individually instead of collapsing to 2.
- Fix: Ghost pin loop in AvailableQuests.lua -- 'while frames[i]' was iterating a
string-keyed table with a numeric index (never iterated). Changed to pairs().
- Fix: NormalizeSpawnZoneKey now uses ZoneDB.areaIdToUiMapId for all zones so
learner evidence is stored under map IDs (e.g. 1241) not area IDs (e.g. 3431),
matching AscensionDB's key space. Applied in LearnNPC and _StoreGuidSpawnEvidence.
- Fix: isSunstrider detection in _MergeSpawnEvidence updated from hardcoded
zoneId==3431 check to IsSunstriderNativeZone() since zone IDs are now normalized
to map IDs at storage time.
AlreadySpawned kept stale entries after UnloadQuestFrames ran.
The draw path for incomplete objectives never cleared it — only
completed objectives called _UnloadAlreadySpawnedIcons. Added
clear at the start of the spawnList draw path so _DetermineIconsToDraw
sees an empty AlreadySpawned and recreates icons each update cycle.
- 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
QuestieArrow._CollectQuestTargets checks quest.isComplete (the quest
object field) to decide whether to collect finisher spawns or objective
spawns. Without setting this field, the arrow fell through to objective
collection and picked up the stale Cold Iron Key fake objective
(CheckQuestSourceItem) which resolves to NPC 29323 at 39.8, 72.7.
Now when QuestieDB.IsComplete returns 1, set quest.isComplete = true
and quest.WasComplete = true before PopulateObjectiveNotes, so the
arrow correctly routes to the finisher (Gretchen Fizzlespark) instead.
_RegisterObjectiveTooltips was only silently skipping objectives
with Type == 'event'. Quest 50150 'Storm Peak Orders' uses a
server-tracked zone-completion trigger objective which has no spawnList
and no Id -- the server sends it with a type like 'monster' not 'event'.
Broaden the guard: any objective with no spawnList AND no Id has nothing
for Questie to draw. Mark hasRegisteredTooltips = true and return
silently. Objectives with no spawnList but a valid Id still error
so missing data is reported.
GetAllQuestIds called CheckQuestSourceItem(questId, true) for all
non-failed quests. When a consumable key is used and leaves the bag,
this created a fake 'get the item' objective pointing to the drop NPC
even when the quest was already complete (complete == 1).
Guard the call: only run CheckQuestSourceItem when complete != 1.
Complete quests route through PopulateObjectiveNotes which correctly
shows the finisher instead.
Event-type objectives (triggerEnd with no coordinates) silently skip.
All other objective types with missing spawnList keep Questie:Error
so players can see and report missing spawn data.
_RegisterObjectiveTooltips: silently return for Type='event' objectives
with no spawnList (e.g. triggerEnd with nil coordinates). These have no
tooltip to register, so mark hasRegisteredTooltips=true and bail out.
For other types, demote from Error to Debug.