From 9ea82fcdb536136cbbc4300bca43102ffc629309 Mon Sep 17 00:00:00 2001 From: Xurkon Date: Wed, 10 Jun 2026 05:46:33 -0500 Subject: [PATCH] docs(changelog): document zone export, live import refresh, 200k cap Changelog entries for the import/export work landed in 2c695c4: Export Current Zone, live map+stats refresh after import (no reload), and the 200k-entry import guard. --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5719005..a38d85a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,8 @@ ### Features +- **[Database - Export Current Zone]** Added an "Export Current Zone" button (Database tab) alongside Export Current Server / Export All Servers, so players can share just the learned data for the zone they are standing in. `QuestieLearnerExport:ExportZone(zoneId)` (defaults to the player's current `areaId`) gathers the NPCs and objects that spawn in the zone, then pulls in the items those NPCs drop and the quests they start/finish, so the exported bundle stays referentially consistent. Uses the same `QxLD` string format as the full exports, so the existing Import flow accepts it unchanged. + - **[Map - Minimap Icon Range Cutoff Up To 1000]** Raised the maximum of the "Minimap Icon Range Cutoff" slider from 200 to 1000 (yards), for players who run fully zoomed-out minimaps where quest objective spawns can be far apart. Default and minimum are unchanged. - **[Map - Hide Repeatable/Callboard Quests Below Level 60]** (#10) Added "Hide repeatable quests below level 60" (Icons tab, off by default) which hides repeatable available `!` quests — such as the Ascension Callboard — from the map and minimap until the character reaches level 60, where they become relevant. Enforced both at draw time (`_DrawQuestIfAvailable`) and in `ShouldBeHidden`, so already-drawn pins are removed on the minimap too, and they reappear automatically on hitting 60. Only affects repeatable available quests and only when the option is enabled. @@ -34,6 +36,7 @@ ### Bug Fixes +- **[Learner - Import Updates Map & Stats Live (No Reload)]** After importing learned data, the Database tab's live entry counts now update immediately and the imported spawns appear on the map/minimap without a `/reload`. `MergeImport` now runs `QuestieQuest:SmoothReset()` (guarded) after `InjectLearnedData` so freshly merged NPC/object spawns are recalculated and redrawn, and the import dialog fires `AceConfigRegistry:NotifyChange("Questie")` so the "Total entries" stats refresh in place. Also hardened the import against pathological payloads — `ValidateImport` rejects strings claiming more than 200,000 entries before the synchronous merge runs — and the shared serialize/encode step is now wrapped defensively so a malformed sub-entry surfaces as a clean error instead of a Lua error. - **[Learner - Robust Safety Fallbacks For All Types]** Hardened the learner's data-ingestion paths against malformed/partial data for every learner type (NPC/object/item/quest). The spawn validator now checks object spawn coordinates (key `[4]`) in addition to NPC spawns (key `[7]`) — previously object coords were unvalidated. The incoming-data merge skips malformed zone keys and coordinates (non-number/out-of-range) per entry instead of erroring, and guards the item drop-list merge against non-number NPC ids. The live comms-merge flush now isolates each broadcast in a `pcall`, so a single malformed entry can't abort the batch or break the live-update loop, and the post-merge `InjectLearnedData` is likewise guarded. - **[Learner - Hardened Import/Merge For Multi-Player Data]** Importing learned data merged from several different players is now safe and clean. Fixed a prefix-validation bug in `ValidateImport` (`not str:sub(...) == x` parsed as `(not str:sub(...)) == x`, always false, so non-Questie strings were never rejected). `MergeImport` now: ensures the learner stores exist (so a fresh profile can import), merges each entry **synchronously and defensively** via `_ApplyIncomingNetworkMerge` (which validates key/coordinate structure and only adopts fields the local store is missing — never overwriting good local data), isolates every entry in a `pcall` so one corrupt entry is skipped/counted instead of aborting the import or corrupting the store, and reports accurate `merged / skipped / rejected` counts. Merging synchronously also fixes `InjectLearnedData` previously running before the queued merges landed. - **[Quest - Turn-In '?' Missing For Quests In The Log]** A quest in the player's log is active and not yet turned in, so its turn-in `?` finisher should always be drawable — but `AddFinisher` also required `not char.complete[questId]`, so a quest completed in a previous Ascension prestige (still flagged in `char.complete`) and then re-accepted had its finisher suppressed while standing at the turn-in NPC. `AddFinisher` now trusts the live quest log: if the quest is in `currentQuestlog` and not failed, the finisher draws regardless of the (possibly stale) completed flag. No quest-completion data is modified.