Files
Questie-X/Research/QuestieLearner-Verification.md
T
Xurkon bf2a7969df docs: v1.2.7 changelog + Research folder with verification guide and session summary
- CHANGELOG.md: added v1.2.7 entry covering WotLKDB stats fix, kill tracking
  filter, and WotLKDB Loader.lua stats population
- Research/QuestieLearner-Verification.md: 12-step in-game test guide for all
  QuestieLearner subsystems (mouseover, quest accept/turn-in, kills, loot,
  objects, export/import, plugin stats, peer sharing, quick diagnostic snippet)
- Research/SessionSummary-2026-03-16.md: full developer session log from
  plugin architecture overhaul through QuestieLearner rewrite
2026-03-16 21:18:02 -05:00

8.3 KiB
Raw Blame History

QuestieLearner — In-Game Verification Guide

This guide walks you through verifying every subsystem of QuestieLearner is working correctly after the v1.2.6 rewrite. Run each test in order and check expected outputs.


Prerequisites

Enable Develop Debug Output

In chat before starting any test:

/script Questie.db.profile.debugLevel = Questie.DEBUG_DEVELOP

Or enable Develop in Questie Options → Advanced → Debug Level.

You do NOT need Critical enabled separately — Develop includes Critical-tier output.


Test 1 — Initialization

After /reload, look for this in chat:

[QuestieLearner] Events registered
[QuestieLearner] Initialized

If you also had previously learned data, you should see:

[QuestieLearner] Injected learned data: N NPCs, N quests, N items, N objects

Failure: If you see nothing, check that QuestieLearner.lua and QuestieLearnerComms.lua are in the TOC and loading without errors.


Test 2 — Mouseover Filter (Quest Giver ONLY)

2a — Quest Giver NPC

Walk up to an NPC with a yellow ! above its head (not yet accepted), or a yellow ? (turn-in).

Expected output:

[QuestieLearner] Cached mouseover NPC: <id> <NpcName> guid: 0x...
[QuestieLearner] Learned NPC: <id> <NpcName>

2b — Random Mob (Should Be Ignored)

Mouseover a wolf, enemy soldier, random creature — anything without a quest icon.

Expected output: Nothing. No [QuestieLearner] line should print.

Why This Matters

Before v1.2.6, every single NPC moused over was recorded, flooding learnedData.npcs with useless entries. Now only UnitNPCFlags bit 0x02 (QUESTGIVER) or already-known DB quest NPCs are recorded.


Test 3 — Quest Accept

Pick up any quest from an NPC. Look for:

[QuestieLearner] Learned Quest: <id> <QuestName>
[QuestieLearner] Learned NPC: <id> <GiverName>    ← or "Learned Object" if quest giver is a chest/object

Verify data was stored:

/script local q=Questie.db.global.learnedData.quests; local n=0; for _ in pairs(q) do n=n+1 end; print("Learned quests:", n)

Inspect a specific quest (replace <questId> with the ID you just accepted):

/script local q=Questie.db.global.learnedData.quests[<questId>]; if q then print("name:", q[1], "level:", q[5], "reqLvl:", q[4], "zone:", q[8]) end

Expected: name: <quest name> level: <number> zone: <mapId>


Test 4 — Quest Turn-In

Complete and turn in a quest. Look for:

[QuestieLearner] Learned Quest: <id> <QuestName>
[QuestieLearner] Learned NPC: <id> <FinisherName>

Verify both starter and finisher are recorded:

/script local q=Questie.db.global.learnedData.quests[<questId>]; if q then print("starters:", tostring(q[2]), "finishers:", tostring(q[3])) end

Expected: Both q[2] and q[3] should be tables, not nil.

  • q[2][1] = list of NPC IDs that start the quest
  • q[3][1] = list of NPC IDs that finish the quest

Test 5 — Kill Coordinate Recording

5a — Quest Objective Kill (Should Record)

Have an active kill quest in your quest log (e.g., "Kill 10 Wolves"). Kill one of the objective mobs.

Expected output:

[QuestieLearner] UNIT_DIED: recording kill NPC <id> <MobName>
[QuestieLearner] Learned NPC: <id> <MobName>

Verify coordinates were stored:

/script local n=Questie.db.global.learnedData.npcs[<npcId>]; if n and n[7] then for z,c in pairs(n[7]) do print("zone "..z.." has "..#c.." coord clusters") end end

Kill the same mob type multiple times in the same area. The cluster count should NOT increase for every single kill — only when you move to a meaningfully different location (>2% of zone width away).

5b — Non-Quest Mob (Should Be Ignored)

Kill a mob that is NOT a quest objective and is NOT in QuestieDB.

Expected output: Nothing. [QuestieLearner] UNIT_DIED should NOT appear.


Test 6 — Item Loot Recording

Loot a mob or chest that drops a quest item (purple/green bag icon in loot window, or any item that appears in the loot frame).

Expected output (immediate, if item was already cached):

[QuestieLearner] Learned Item: <id> <ItemName>

Expected output (delayed by ~1 second if item was never seen before):

[QuestieLearner] Learned Item: <id> <ItemName>

This fires when GET_ITEM_INFO_RECEIVED resolves the async GetItemInfo call.

Verify:

/script local i=Questie.db.global.learnedData.items; local n=0; for _ in pairs(i) do n=n+1 end; print("Learned items:", n)

Test 7 — Object Recording

Interact with a clickable quest object (a chest, a crate, a brazier, a scroll — any game object that starts or is part of a quest).

Expected output:

[QuestieLearner] Learned Object: <id> <ObjectName>

Verify:

/script local o=Questie.db.global.learnedData.objects; local n=0; for _ in pairs(o) do n=n+1 end; print("Learned objects:", n)

Test 8 — Overall Stats Check

Run this anytime to see a full summary of what has been learned this session:

/script local QL=QuestieLoader:ImportModule("QuestieLearner"); local n,q,i,o=QL:GetStats(); print("NPCs:"..n.." Quests:"..q.." Items:"..i.." Objects:"..o)

Test 9 — Export

/script local E=QuestieLoader:ImportModule("QuestieLearnerExport"); local s,stats=E:Export(); if stats then print("Export OK | total:", stats.total, "| len:", string.len(s)) else print("Export FAILED:", tostring(stats)) end

Expected: Export OK | total: N | len: XXXX

The export string starts with QxLD:1!. Copy it from the Database tab → Export box in Questie Options.


Test 10 — Import (Round-Trip)

  1. Export your data (Test 9).
  2. Run /script QuestieLoader:ImportModule("QuestieLearner"):ClearAllData() to wipe learned data.
  3. Open Questie Options → Database → paste the export string into the Import box → click Import.

Expected in chat:

Import complete: merged N entries, skipped 0 (already known).
[QuestieLearner] Injected learned data: N NPCs, N quests, N items, N objects

Verify stats match original count (Test 8).


Test 11 — Plugin Panel Stats (WotLKDB)

Open Questie Options → Advanced and scroll to Loaded Questie-X Plugins.

Expected for WotLKDB:

[Questie-WotLKDB]   Quests: 9086   NPCs: XXXX   Objects: XXXX   Items: XXXX

If you see all zeros, the QuestieX_WotLKDB_Counts global was not set before the Loader.lua read it. Check that QuestieInit:LoadBaseDB() is running before PLAYER_LOGIN completes.


Test 12 — Peer Sharing (Requires Two Clients)

On Client 1, learn a new NPC (walk up to a quest giver not previously recorded).

On Client 2, run:

/script print(type(Questie.db.global.learnedData.npcs[<npcId>]))

Expected: table (the NPC data arrived via the hidden questiecomm channel or AceComm guild broadcast).

Note: Both clients must be in the same guild OR on the same server (for the hidden channel). Allow up to 10 seconds for the token-bucket throttle to release the message.


Quick Diagnostic — All At Once

Paste this block into chat for a full snapshot:

/script local QL=QuestieLoader:ImportModule("QuestieLearner"); local n,q,i,o=QL:GetStats(); print("=== QuestieLearner Stats ==="); print("NPCs:"..n.."  Quests:"..q.."  Items:"..i.."  Objects:"..o); local ld=Questie.db.global.learnedData; print("Enabled:", tostring(ld.settings.enabled)); print("Learn NPCs:", tostring(ld.settings.learnNpcs)); print("Learn Quests:", tostring(ld.settings.learnQuests)); print("Learn Items:", tostring(ld.settings.learnItems)); print("Learn Objects:", tostring(ld.settings.learnObjects))

Common Issues

Symptom Cause Fix
Nothing prints at all Debug level not set to DEVELOP /script Questie.db.profile.debugLevel = Questie.DEBUG_DEVELOP
Random mobs being recorded Old QuestieLearner.lua still loaded Confirm v1.2.6+ is deployed, /reload
Kill coords not recording NPC not in QuestieDB and not explicitly targeted/hovered before kill Target the mob before killing it, or ensure your DB plugin is loaded
Export returns nil learnedData is empty Run Tests 27 first to accumulate data
WotLKDB shows 0s in plugin panel QuestieX_WotLKDB_Counts not set Verify QuestieInit:LoadBaseDB() has the count-before-pull logic
Item not recorded after loot GetItemInfo async — item never seen before Wait 12 seconds; if still missing, the item may not be a quest item