Commit Graph

563 Commits

Author SHA1 Message Date
Narcasung b4e0894c3f fix(map): remove redundant scale-mismatched icon cull on world map
The manual overflow cull in HandleWorldMapPin compared icon:GetCenter()
against WorldMapScrollFrame's bounds without normalizing effective scale.
Magnify's zoom drags the icon's effective scale via WorldMapDetailFrame,
while the scroll frame's stays constant, so at high zoom ratios the
comparison failed for every icon and hid the whole map. Native
WorldMapScrollFrame:SetScrollChild() clipping (now reachable on all 4
edges since SetDrawOrder correctly detects bundled Magnify) already
handles this without the buggy manual math.
2026-07-15 17:34:38 +02:00
Narcasung 8089b5f08c fix(tracker): show (Complete) and correct level for DB-less custom quests
Quests with no static DB entry (e.g. Ascension custom quest 175206) made
GetColoredQuestName bail out early on a nil name lookup, before it ever
reached the (Complete)/(Failed) suffix logic. The tracker's existing
fallback for that case never added the suffix either, and it computed
level via QuestieLib.GetTbcLevel (static-DB-only), which silently defaults
to level 1 and then gets scaled from that wrong base by Ascension's level
scaling. Since these quests also auto-collapse once complete (hiding the
tracker's other "Quest Complete!" indicator line), the title was the only
place that could show completion status, and it was silently swallowing it.

- QuestieTracker.lua: the "no DB name" fallback branch now appends
  (Complete) under the same collapseCompletedQuests/isMinimizable rule as
  the normal path, and uses the live quest object's own level instead of
  the static-only lookup.
- QuestieQuest.lua (PopulateQuestLogInfo): re-syncs quest.level from a live
  GetQuestLogTitle scan every update, since QuestieDB.GetQuest caches quest
  objects permanently and QuestLogCache never tracked level at all.
- TrackerUtils.lua (GetCompletionText): guards the Description[1] fallback
  against quests that have no top-level Description array, which was
  throwing and aborting that quest's tracker render entirely.
2026-07-15 17:20:42 +02:00
Narcasung 75bebafaa9 fix(quest-tag): prefer live quest log tag over static QuestTag.lua data
Ascension sometimes reuses a Blizzard questId for custom content whose
group/tag status differs from the original (e.g. 253 "Bride of the
Embalmer" is a real group quest here but zeroed by QuestTag.lua for
TBC+/WotLK clients). Once a quest is accepted, QuestieDB.GetQuestTagInfo
now checks the live questLog entry's questTag before falling back to
questTagCorrections and the static QuestTag.lua table. Compat.lua gains
QuestTagNameToId, a reverse lookup built from questTagToName.
2026-07-15 16:20:51 +02:00
Narcasung 6fad92244c docs: tighten README wording and quest-tag fix summary 2026-07-15 15:57:35 +02:00
Narcasung 62956abb8e fix(map): keep world-map icons inside Magnify's native scroll clip
SetDrawOrder only recognized a standalone "Magnify-WotLK" addon, but this
setup bundles Magnify inside LootCollector (no separate .toc), so the check
always failed and every icon got reparented onto WorldMapFrame -- outside
WorldMapScrollFrame's clipped subtree -- and strata-forced to WorldMapFrame
instead of WorldMapButton, regardless of HBD's earlier correct parenting.
Detect the bundled Magnify via the _G.LootCollectorMagnify global and match
WorldMapButton's strata instead, mirroring LootCollector's own pins. Fixes
icon culling on all 4 edges during both zoom and pan, in normal and
objective-panel map modes.
2026-07-15 13:42:34 +02:00
Narcasung 13cddced16 Tidy README title and force line breaks between credit links
Markdown collapses single newlines into the same line; add explicit
<br> tags so each credit renders on its own line.
2026-07-15 01:16:20 +02:00
Narcasung 93c5e56c1d Replace upstream README with short fork summary and credits
Personal private fork, so the upstream marketing README (badges,
Patreon/PayPal, docs links) isn't relevant here. Keep just the list
of local fixes and credit the fork chain: aron-w/Questie-X,
Xurkon/Questie-X, and the original Questie.
2026-07-15 01:14:20 +02:00
Narcasung c09d30b832 Apply local fixes on top of upstream: tracker desync/drag/title, map icon zoom offset
- Compat/HBD.lua: fix world map pin offset math to account for zoom addons
  (e.g. Magnify) rescaling an ancestor frame instead of WorldMapButton itself;
  cull pins that fall outside the scroll frame's viewport when zoomed
- Compat/Compat.lua: add a short TTL to the chat-parsed objective progress
  cache so a stale entry can't be reapplied to an unrelated quest
- Modules/QuestieLearner.lua: re-point QuestiePlayer.currentQuestlog at the
  rebuilt quest table after invalidating QuestieDB's quest cache, fixing
  Tracker freezing on stale objective progress
- Modules/Tracker/QuestieTracker.lua: fall back to a formatted quest name
  when QuestieDB has no title for a quest (e.g. custom server quests)
- Modules/Tracker/TrackerBaseFrame.lua: force baseFrame movability on drag
  start instead of trusting the async-refreshed IsMovable() state
- Modules/Tracker/TrackerHeaderFrame.lua: wire up drag on the tracker icon
- Modules/Quest/QuestEventHandler.lua: force a full quest log reconciliation
  when the native quest log is opened

Squashed from prior commit-by-commit history to rebuild this working copy
on a clean fork of aron-w/Questie-X (restores the native GitHub fork link).
Per-fix rationale is preserved in project memory
(project_tracker_fixes.md, project_map_icon_offset.md).
2026-07-15 01:02:15 +02:00
Aron 9df64114df fix(quest-links): handle missing quest names 2026-07-11 12:29:21 +02:00
Aron d3795f9ae5 fix(init): persist compiled database metadata in cache 2026-07-05 16:32:11 +02:00
Aron 1f3d5fbb61 perf(init): skip redundant database compilation 2026-07-05 16:26:12 +02:00
Aron 558aeb3888 fix(tracker): update quest progress from unit log events 2026-07-05 16:23:06 +02:00
Xurkon 51fe8bbf5a fix: dedupe waypoint quest giver icons 2026-06-13 10:45:32 -05:00
Xurkon ff906c6f32 chore: remove ignored regression test file 2026-06-13 08:40:03 -05:00
Xurkon 8898dcf96a fix: harden quest poi filtering and objective refresh 2026-06-13 08:30:41 -05:00
Xurkon 12b30cd566 fix: purge lingering completed quest icons 2026-06-13 07:49:04 -05:00
Xurkon 3ebcedb362 fix: allow instant quest text toggle 2026-06-12 23:23:00 -05:00
Xurkon fb3c78351f fix: show learner secondary tooltips without spawns 2026-06-12 23:17:56 -05:00
Xurkon 2ef44eca15 fix: prefer static spawns in auto mode 2026-06-12 22:57:58 -05:00
Xurkon 1b0f145c87 perf(l10n): cache literal (no-arg) translations
Add a locale-keyed cache for no-argument translation lookups so repeated
literal keys resolve without redoing the lookup chain. Reset on locale change
and on locale override application.

Ported from phase3-measured-perf (cherry-pick -x 970dd88), adapted to current
main (hoisted the per-locale cache-table creation; excludes the branch's audit
doc and gitignored test).
2026-06-12 22:54:06 -05:00
Xurkon fb22cd5b2d docs(changelog): note learner tooltips now show in auto mode 2026-06-12 22:46:46 -05:00
Xurkon e96c47a739 fix: show learner tooltips in auto mode 2026-06-12 22:43:10 -05:00
Xurkon 72bff01724 docs(changelog): correct POI entry to match duplicate-suppression approach
The 1.6.4 changelog described an earlier SyncBlizzardObjectivePOIs helper that
was superseded by the per-quest duplicate-POI suppression in QuestieCompat
(commit 70a9934). Update both CHANGELOG.md and the HTML changelog to describe
the actual shipped behavior.
2026-06-12 22:41:13 -05:00
Xurkon 70a99346e6 fix: suppress duplicate native quest POIs 2026-06-12 22:32:24 -05:00
Xurkon a7de3eccb4 docs(changelog): finalize 1.6.4 — Lua 5.0 stage 1, POI sync, cache/prestige fixes
Update the 1.6.4 entry to reflect the consolidated main: add the Lua 5.0
compatibility items (modulo->math.mod, Options {...} typo) and the native
objective POI sync, prestige cache reset, and quest completion cache fixes.
Fix the stale perf-refactor note that referenced the now-removed
phase2-lua50-sweep branch; remaining measured perf work is on
phase3-measured-perf and being cherry-picked one at a time. Mirror into the
HTML changelog and bump its version badge to v1.6.4.
2026-06-12 22:31:52 -05:00
Xurkon 71e172c4d0 fix: sync native objective POIs with Questie icons 2026-06-12 22:20:09 -05:00
Xurkon 9a9002a92e fix: reset player cache on prestige 2026-06-12 21:51:56 -05:00
Xurkon 9fa0164318 fix: clear quest completion cache on refresh 2026-06-12 21:40:23 -05:00
Xurkon 60ed76598a fix: gate felendren behind aggression 2026-06-12 20:54:06 -05:00
Xurkon 0aaffce1e9 compat(lua50): fix Options tab tables {...} typo to {}
QuestieOptions.tabs.{auto,dbm,icons,nameplate} were initialized with {...}
instead of {}. At file scope in Lua 5.1 this silently captures the addon
varargs into the table; in Lua 5.0 it is a parse error. All sibling tabs use
{}. No behavioral change (Initialize repopulates the table).
2026-06-12 18:36:59 -05:00
Xurkon 9dce126735 compat(lua50): replace % modulo operator with math.mod shim
Lua 5.0 (Vanilla 1.12) has no % operator outside string formatting; it is a
parse error. Route the 9 arithmetic modulo sites through the existing math.mod
shim (Compat/Compat.lua) so the addon parses on 5.0 through Retail.

Sites: QuestieDB daily/weekly flag tests, QuestieEvent DMF cycle math,
QuestieLearner GUID/flag math, QuestiePlayer race/class flag tests.
2026-06-12 18:35:31 -05:00
Xurkon 76d4e6e4c8 docs: move recommendations to minimap icon sliders 2026-06-12 18:15:21 -05:00
Xurkon f6b8662884 docs: add tooltip performance recommendations 2026-06-12 18:05:03 -05:00
Xurkon 803904d6ba fix: prevent minimap fade from hiding icons 2026-06-12 18:00:25 -05:00
Xurkon 5c7c63bc18 fix: restore learner spawn and tooltip test coverage 2026-06-12 17:37:00 -05:00
Xurkon e706fa1130 fix: reduce questie fps stutter hot paths 2026-06-12 17:30:48 -05:00
Xurkon 90f1f31474 fix: refresh map tooltip objective progress 2026-06-12 17:23:10 -05:00
Xurkon 493545a4d4 docs(readme): update notice to reflect v1.6.4 maintenance release; bump badge to 1.6.4 2026-06-12 06:51:54 -05:00
Xurkon 568cd44af8 fix: port Phase 1 perf/correctness audit fixes onto main
Brings the still-needed changes from questie-phase1perf that main lacked.
Main already had the Lua 5.0 shims (QuestieLoader bit/strsplit, QuestieStream
and QuestieSerializer math.mod sweep), so those are omitted.

- QuestieNameplate: skip missing entries instead of return-aborting the whole
  activeGUIDs loop (one bad unit no longer stalls every nameplate update)
- QuestieQuest.ClearAllNotes: skip DB-missing quests instead of aborting, so
  remaining quests' notes still get cleared
- QuestieOptionsTracker: fix fadeTickerValue:Cancel -> fadeTicker:Cancel (3x);
  fadeTickerValue is a number, the ticker handle is fadeTicker
- QuestieCommsData: nil-guard GetNPC/GetObject before reading .name
- QuestieAnnounce: bound the alreadySentBandaid dedup cache (reset at 1000)
- QuestieDB.IsComplete: hoist GetQuest into expectedQuest (one call, not two)
- QuestieFramePool/QuestieFrame: drop the dead BaseOnUpdate ticker branch
  (BaseOnUpdate was never defined; behavior was always OnUpdate=nil)
- QuestieLib: document unused questId arg on Ascension_IsScalingEnabled
- Database/Corrections x3: strip stray UTF-8 BOM
- Questie-X.toc: remove duplicate QuestieSlash.lua load line
2026-06-12 06:48:53 -05:00
Xurkon 1f8fa20e00 fix(learner): stop recording bystander kills as your own
Uncredited kills (mobs other players killed that you never engaged)
passed px,py=nil to LearnNPC, whose GetPlayerCoords fallback stored YOUR
position as the mob's spawn and incremented the kill count. Gate spawn
recording (LearnNPC + _StoreGuidSpawnEvidence) on a captured position, so
only credited kills with a real position store a spawn. Bystander kills
no longer pollute coordinates or inflate counts.
2026-06-12 01:30:37 -05:00
Xurkon 152e823c04 fix(quest): skip stale frames in Show/HideQuestIcons instead of crashing
ShowQuestIcons/HideQuestIcons indexed icon (=_G[frameName]) when it can
be nil for a registry entry whose frame was already reset, crashing the
fade pass (attempt to index local 'icon'). Guard icon/icon.data/
icon.data.QuestData and skip stale frames; ShowQuestIcons no longer
error()s on the desync.
2026-06-12 00:57:18 -05:00
Xurkon 49774336cc fix(tooltip): define _TooltipHasLeftLine before its callers
The dedupe helper was a local function defined after
AddUnitDataToTooltip, so that function resolved it as a nil global and
every unit tooltip errored (attempt to call global '_TooltipHasLeftLine').
Moved it above all Add*DataToTooltip functions.
2026-06-12 00:56:37 -05:00
Xurkon 150c59fa77 fix(tooltip): robust NPC/object ID resolution via learner GUID parsers
Expose QuestieLearner:GetIdAndTypeFromGUID / GetObjectIdFromGUID /
GetNpcIdFromGUID (they handle modern dash GUIDs AND legacy 0x hex /
GameObject GUIDs). Tooltips now fall back to these when strsplit('-',guid)
can't parse the GUID, so NPC IDs no longer silently fail to write on
hex-GUID units; the Object ID line resolves from the object's GUID when
its name isn't in the lookup. IDs deduped per tooltip.
2026-06-11 17:53:36 -05:00
Xurkon 5abeff2768 fix(tooltip): keep Item/NPC ID lines from vanishing on re-hover
The ID lines were gated by lastItemId/lastGuid (only added when the
hovered item/unit changed). WoW clears and re-fires OnTooltipSetItem/
OnTooltipSetUnit for the same item/unit and rebuilds the tooltip, so the
gate skipped re-adding the line on the rebuilt tooltip and the ID
disappeared. Add the ID line on every render instead, deduped per
tooltip via _TooltipHasLeftLine so it shows exactly once.
2026-06-11 16:37:40 -05:00
Xurkon 7bd14b80fc feat(learner): exclude critters; fix Sunstrider object mis-keyed to areaId 3430
- Critters are never quest-relevant. Added a static CRITTER_NPC_SET (common
  classic critters) plus runtime detection via UnitCreatureType on
  mouseover/target (covers Ascension custom critters). LearnNPC and the kill
  handler skip critters; InjectLearnedData purges already-recorded ones; and
  critters are purged on sight when a unit token is available.
- Object/NPC spawns mis-stored under Eversong parent areaId 3430 (e.g. object
  180516 'Shrine of Dath'Remar' on Sunstrider) now migrate to uiMapId 1241,
  along with the [9]/[5] home-zone field. Legit Eversong data is keyed 1941,
  so any 3430 key is mis-stored Sunstrider data.

Verified in Tests/QuestieLearnerCritterPurge_spec.lua.
2026-06-11 16:29:41 -05:00
Xurkon 32c538de15 fix(learner): stop InjectLearnedData from corrupting saved spawns
Two bugs made saved learner spawns collapse to one pin on every login:

1. The spawn zone-key migration was inverted: it ran
   GetAreaIdByUiMapId(1241) -> Eversong parent areaId 3430 and moved
   Sunstrider coords there (wrong map / NE corner), deduping distinct
   coords via InsertIfNewBucket along the way. Now it converts only
   legacy areaId keys FORWARD to the canonical uiMapId and leaves uiMapId
   keys untouched. Same for the [9]/[5] home-zone fields.

2. Sanitize de-duplicated coords with the flat COORD_GRID (2.0) instead
   of the per-zone grid, collapsing Sunstrider's tightly-packed spawns
   (grid 0.5). Now uses GetCoordGridForZone(zoneId).

Both rewrote learned.npcs in place, persisting the damage to
SavedVariables. Regression test in QuestieLearnerMultiSpawn_spec.lua.
2026-06-11 15:49:29 -05:00
Xurkon 6355545890 fix(learner): show every learned pin on Sunstrider, not a clustered dot
A prior change (dd630fd) kept clustering enabled on Sunstrider Isle in
learner mode to avoid pin fan-out, but that collapsed several distinct
learned coordinates (e.g. 7 Arcane Wraith spots) into a single pin --
breaking the DB-building workflow where every learned spawn must be
visible. The SavedVariables data was correct the whole time; this was a
display regression. Sunstrider (1241) now shows every distinct pin by
default in all data-source modes; consolidation only happens when the
player explicitly raises the Dense Pin Clustering Aggressiveness knob.
2026-06-11 15:34:04 -05:00
Xurkon 900ff4a4e4 fix(map): extend minimap fade range slider 2026-06-11 15:17:18 -05:00
Xurkon eebd26cad8 fix(learner): restore incomplete learner spawn lookups 2026-06-11 15:13:35 -05:00
Xurkon 82c2e41400 fix(learner): preserve quest giver spawn overrides 2026-06-11 11:58:34 -05:00