Commit Graph

305 Commits

Author SHA1 Message Date
Xurkon d3bcb6da49 fix: empty override tables no longer wipe base DB spawns; real-time pin refresh on NPC learn
Two fixes for QuestieLearner real-time pin rendering:

1. _MergeOverride now skips empty tables (IsEmptyTable guard).
   QuestieLearner stores spawns={} before any coords are captured.
   Previously _MergeOverride treated {} as valid data and replaced the
   base DB's real spawn coordinates with an empty table, breaking pins
   for all NPCs that had been seen but not killed (mouseovers, etc.).

2. _InvalidateSpawnListsForNPC triggers after LearnNPC adds new spawn data.
   The quest objective system caches spawnList once per objective.
   When a kill adds new coordinates, the cached list is stale.
   The new helper:
   - Scans all active quest objectives for references to the NPC
   - Clears objective.spawnList and objective.AlreadySpawned
   - Calls QuestieQuest:UpdateQuest to rebuild pins with fresh data
   This makes learned pins appear in real-time without /reload.
2026-05-16 08:36:47 -05:00
Xurkon 3fff65b66f gitignore: remove Makefile from tracking 2026-05-16 07:59:57 -05:00
Xurkon d0d000cf3f gitignore: re-add dev test files and tooling configs
Tests/, .busted, selene.toml, and wow_classic.yml are dev-only
files — not part of the release artifact.
2026-05-16 07:54:19 -05:00
Xurkon db91ec9fd4 docs: add QuestieLearner in-game testing macros
7 macros for manual in-game testing: stats, target/mouseover dump,
zone info, debug toggle, force learn, and data re-injection.
Each fits within WoW's 255-char macro limit.
2026-05-16 07:33:51 -05:00
Xurkon bf6ecaedbe v1.6.3-unreleased: Sunstrider zone fixes, QuestieLearner icon preservation, migration, and Busted test suite
Code changes (13 files, +916/-171):
- ZoneDB integration: GetZoneId() converts uiMapId→areaId via ZoneDB reverse lookup
- MIN_CONFIDENCE_PINS reduced to 1 for Ascension (incomplete NPC DBs)
- QuestieLearner icon preservation: objective Icon passed to RegisterObjectiveTooltip
- InjectLearnedData zone migration: converts old uiMapId spawn keys to areaId
- areaId passed through all LearnNPC call sites (OnMouseoverUnit, OnQuestDetail,
  OnQuestComplete, OnQuestAccepted, OnQuestTurnedIn, OnGossipShow)
- Compat/Compat.lua: C_Map.GetPlayerMapPosition UiMapData support
- Compat/HBD.lua: Sunstrider mapData aliases and fallback loading
- Sunstrider arrow fix (QuestieArrow.lua), resolved pin rendering (QuestieMap.lua)
- _MergeOverride helper for string/numeric key compatibility
- Northshire Valley UiMapData registration

Testing infrastructure:
- .busted config pointing to tests/ directory
- Tests/wow_api_mock.lua: WoW API mocks (ZoneDB, C_Map, QuestLogCache, etc.)
- Tests/QuestieLearner_spec.lua: 12 tests covering coordinate scaling, spell cast
  learning, zone migration (NPC/objects), icon preservation, settings defaults,
  and LearnNPC spawn zone tracking
- selene.toml + wow_classic.yml: linter configuration

Documentation:
- Makefile with test/lint/ci targets
- sunstrider-coordinate-collection.md: coordinate data reference
- sunstrider-pin-fix.md: root cause analysis and fix documentation
2026-05-16 07:32:47 -05:00
Xurkon 306fb2ac89 Fix learned tooltip quest-start schema in Stormwind 2026-05-13 21:54:09 -05:00
Xurkon a5e3d545a6 Add areaIdToUiMapId[3430]=1241 for Sunstrider Isle reverse mapping 2026-05-10 13:08:26 -05:00
Xurkon 99d090ad2b Remove [946]=668 from UiMapIdOverrides - both Sunstrider and Northshire use 946 as ghost map, cache handles per-zone resolution 2026-05-10 13:03:45 -05:00
Xurkon 151b2ac679 Fix Sunstrider Isle areaId override for GetAreaIdByUiMapId
When UpdateNearestTargets uses ZoneDB:GetAreaIdByUiMapId(946) to verify
player zone, it returns 668 (Northshire) instead of 3430 (Sunstrider).
UiMapIdOverrides[946] was set to 668 for Northshire, so 946 always
resolves to Northshire's areaId even on Sunstrider Isle.

Added direct cache entries for both 1241→3430 and 946→3430 in the
uiMapIdToAreaIdCache (the fast-path lookup table) so GetAreaIdByUiMapId
returns the correct Sunstrider Isle areaId regardless of which map ID
the game returns.
2026-05-10 12:56:45 -05:00
Xurkon b6f4e08880 Revert Tooltip.lua to v1.6.1 (3f8563c) - fixing nameplate icon regression 2026-05-10 10:19:30 -05:00
Xurkon a885faa364 area lookup fixes 2026-05-09 23:53:44 -05:00
Xurkon 9caef46c2b Update docs: MapIconTooltip _GetLevelString guard added to CHANGELOG.md, changelog.html, README.md 2026-05-09 08:26:12 -05:00
Xurkon 01b7f07c41 Fix MapIconTooltip _GetLevelString nil level crash
Root cause: creatureLevels entry for 'Uneasy Citizen' was {} (empty table)
instead of {minLevel, maxLevel, rank}, so creatureLevels[name][1] was nil.
Added early-return guard in _GetLevelString: if creatureLevels[name] is
falsy or has no numeric level at index [1], return name unchanged.

Also updated CHANGELOG.md [Unreleased] section with this fix.
2026-05-09 08:23:54 -05:00
Xurkon 5d56944907 Update version to v1.6.2, document Sunstrider Isle arrow, Tooltip guard, QuestData string safety fixes
[Unreleased] section added to CHANGELOG.md covering:
- Tooltip NPC/Object type guard crash fix (Tooltip.lua)
- InsertMissingQuestIds string guard for questData (tbcQuestFixes.lua, wotlkQuestFixes.lua)
- Sunstrider Isle arrow / UiMapId 946 override fix (zoneDB.lua, QuestieArrow.lua)

README.md:
- Bumped shield to v1.6.2
- Added Sunstrider Isle arrow fix to Quest Arrow section
- Added tooltip crash fix to Tooltips section

docs/changelog.html:
- Added [Unreleased] section at top of changelog

docs/index.html:
- Bumped version badge to v1.6.2
2026-05-09 07:12:37 -05:00
Xurkon 6738027e4d Fix Sunstrider Isle arrow, Tooltip type guard, mapId 946 override
- zoneDB.lua: Add [946] = 3430 to UiMapIdOverrides so GetCurrentZoneId()
  returns 3430 (Sunstrider Isle areaId) even when the game returns uiMapId 946
  (ghost/loading map). Previously 946 had no override, causing zone lookups to
  fall through and return 946 instead of the real zone, breaking arrow distance
  calculation and target filtering.

- QuestieArrow.lua: UpdateNearestTargets uses QuestiePlayer:GetCurrentUiMapId()
  (backed by C_Map.GetBestMapForUnit) for player position. When that returns an
  invalid/ghost map (946/947/0), fall back to ZoneDB lookup via the actual
  zoneId. This ensures the arrow gets real world coordinates regardless of
  whether the world map is open or closed.

  Also includes per-frame debug output when debugArrow profile is enabled.

- Tooltip.lua: Add type guard 'if type(objList) ~= table then break end'
  before iterating learnedNpc[10] and learnedObj[10] in both m_/NPC and o_/object
  paths. Prevents 'attempt to index field questData (a string value)' error
  when the questData field is unexpectedly a string instead of a table.

  The original loop used 'for questId, objList in next, learnedNpc[10]' which
  iterates key-value pairs in insertion order. The _AddToArray helper stores
  values as sequential array elements (tbl[key]=value via table.insert), but
  the iteration was treating it as a questId->objList map. Fixed to use
  ipairs-style iteration with a type check for robustness.
2026-05-09 06:48:59 -05:00
Xurkon 98b4010352 fix: silence QuestLogCache error spam in normal chat
Demote GetQuest/GetQuestObjectives 'quest doesn't exist in QuestLogCache'
messages from Questie:Error to Questie:Debug(DEBUG_DEVELOP). These were
firing repeatedly in chat for quest IDs like 595, 959, 254048 during normal
play. Messages are now only visible when developer debug mode is active.
2026-05-04 21:14:22 -05:00
Xurkon 79e7ee94cc Remove remaining dev files from git and add comprehensive export-ignore
- Remove .claude/skills/hindsight-docs from tracking
- Remove skills/hindsight-docs (hindsight symlink) from tracking
- Add to .gitignore + export-ignore: skills/, scratch/, workflow/, Tests/, Tools/, .claude/skills/
- Add skills/, scratch/, workflow/, Tests/, Tools/, .claude/skills/ to export-ignore
2026-05-04 20:11:52 -05:00
Xurkon eb067e43db docs: add Session 34 Turtle WoW cleanup to changelog 2026-05-04 20:07:38 -05:00
Xurkon 57c790e4ca Remove Turtle WoW TOC, skills-lock, and .luarc.json from tracking
- Remove Questie-X-Turtle.toc (Turtle WoW shut down)
- Remove skills-lock.json (dev lock file)
- Remove .luarc.json (Lua LSP config)
- Add all three to export-ignore in .gitattributes
- Add all three to .gitignore
- Remove Questie-X-TurtleDB from OptionalDeps in Questie-X.toc
2026-05-04 20:05:33 -05:00
Xurkon a0f3a1e020 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
2026-05-04 19:57:43 -05:00
Xurkon 7d658de3b1 Update install instructions: show AscensionDB/EbonholdDB folder structure alongside WotLKDB 2026-05-03 15:49:37 -05:00
Xurkon ccbe9d0de7 Revert "Session 35: Housekeeping - dependency maintenance and code cleanup"
This reverts commit 3e65cd5a128e2c7d729727e35259e862ed6ef5f3.
2026-05-03 15:37:38 -05:00
Xurkon 6558ffd4a0 Session 35: Housekeeping - dependency maintenance and code cleanup 2026-05-03 15:36:05 -05:00
Xurkon bc14ade192 Changelog: Discord relay housekeeping (Session 35) 2026-05-03 15:23:52 -05:00
Xurkon 6b52b9065b Add LICENSE.md to export-ignore patterns 2026-05-03 15:02:34 -05:00
Xurkon 3320012cf2 Add .claude/ and skills-lock.json to export-ignore 2026-05-03 14:58:35 -05:00
Xurkon 3b6c679da4 Clarify that server plugins require Questie-X-WotLKDB as base layer 2026-05-03 14:55:21 -05:00
Xurkon 543fbefd23 Session 34: Remove Turtle WoW references, clarify install instructions 2026-05-02 23:39:50 -05:00
Xurkon 93ec7cc454 Bump version badge to v1.6.0
- Update README.md shields.io badge
- Update docs/index.html version label
2026-05-02 09:24:03 -05:00
Xurkon f4c5e54e67 relay end-to-end test 2026-05-02 08:07:41 -05:00
Xurkon ab187444f1 test: webhook push 2026-05-01 23:54:07 -05:00
Xurkon d2861561e2 test: trigger webhook 2026-05-01 23:51:38 -05:00
Xurkon 1ab3adc444 docs: clarify two-addon install requirement upfront for new users 2026-05-01 23:50:47 -05:00
Xurkon def947bec1 Fix LSM30:Fetch guards - also check LSM30.Fetch exists before calling
Previous guard only checked LSM30 ~= nil; if Fetch method is absent on
the stub object the call still crashes. Now uses full 3-part check:
  (LSM30 and LSM30.Fetch and LSM30:Fetch(...)) or fallback
Matches the pattern already used in QuestieArrow.lua.
2026-04-24 04:36:25 -05:00
Xurkon a2a325c8ab Guard all LibSharedMedia-3.0 usages against nil LSM - OptionalDep may not load
- Use LibStub(..., true) silent flag on all LSM acquisition sites
- Guard HashTable() calls in Options files (returns nil if no font type registered)
- Guard all Fetch() call sites with inline 'LSM30 and LSM30:Fetch() or fallback'
- Make font values lazy functions in options dropdowns so LSM has time to register
- Affects: QuestieOptionsTracker, QuestieOptionsArrow, QuestieArrow, QuestieTracker,
  TrackerHeaderFrame, TrackerLinePool, TrackerQuestTimers
2026-04-24 04:24:38 -05:00
Xurkon 97c8f60a28 QuestieOptionsArrow: guard LibSharedMedia HashTable call - LSM is OptionalDep, may not be present or have font type registered at load time 2026-04-24 03:59:33 -05:00
Xurkon 822b6a5c3f chore: Remove redundant TOC files - Questie-X.toc now handles all versions 2026-04-12 01:20:28 -05:00
Xurkon b8741ad89b Delete lint_results.txt 2026-04-12 00:47:30 -05:00
Xurkon ce440847ec Delete version_audit.txt 2026-04-12 00:47:18 -05:00
Xurkon f670f818a9 Delete lint_output.txt 2026-04-12 00:46:57 -05:00
Xurkon 0d1e5d008d Delete link_lint.txt 2026-04-12 00:46:38 -05:00
Xurkon 08eace3115 fix: Blood of Heroes object rendering and QuestieQuest runtime crash fixes 2026-04-12 00:45:50 -05:00
Xurkon 98b45c804d docs: Add *.txt and .luarc.json to export-ignore 2026-04-08 17:49:35 -05:00
Xurkon 0660a0d42a docs: Update v1.6.0 changelog with detailed fix for object rendering 2026-04-08 17:43:02 -05:00
Xurkon 24bdaa3180 fix(176213): Move Blood of Heroes to objectDataOverrides via LoadFactionFixes
Root cause: _LoadCorrections writes to QuestieDB.objectData (binary DB companion) but GetObject reads from QueryObject binary handle + objectDataOverrides. Items in Load() path are patching the binary DB so never reach GetObject's override check. Moving 176213 to LoadFactionFixes puts it directly in objectDataOverrides, the path GetObject actually reads.
2026-04-08 17:40:52 -05:00
Xurkon 49477da2d0 v1.6.0: Stable Map Search & Blood of Heroes Data Fix 2026-04-08 17:34:15 -05:00
Xurkon 4ef2b9f661 hotfix: Resolved critical QuestieQuest runtime crash and hardened error handler 2026-04-08 03:48:46 -05:00
Xurkon 199ed47868 Hotfix: Resolve syntax error in ChatFilter.lua and stabilize nil guards 2026-04-08 03:21:05 -05:00
Xurkon 26dd06cf9d Fix critical LUA crash in QuestLinks due to nil concatenation and invalid chat link matching 2026-04-07 17:46:06 -05:00
Xurkon d5db15ce7c docs: clarify install instructions and remove duplicate plugin section 2026-04-05 06:51:01 -05:00