Commit Graph

25 Commits

Author SHA1 Message Date
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 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 a9f4a97979 cleanup: Remove debug prints and duplicate spacer 2026-04-02 19:45:17 -05:00
Xurkon 2efbc0e799 fix: Use SharedMedia:Fetch to get actual font object 2026-04-02 19:42:15 -05:00
Xurkon 11cc0e9a79 debug: Add print to UpdateFont 2026-04-02 19:36:52 -05:00
Xurkon 57f6cc4471 feat: Add arrow font settings; Add Apply to All font options to Tracker 2026-04-02 19:27:05 -05:00
Xurkon 882cd01628 debug: Add prints to UpdateSettings 2026-04-02 19:17:52 -05:00
Xurkon 1decb399b3 fix: Remove duplicate arrow_alpha and debug prints 2026-04-02 19:14:08 -05:00
Xurkon fb8c4292c9 debug: Add prints to trace scale update 2026-04-02 19:06:56 -05:00
Xurkon a1f273bba5 fix: Add UpdateSettings function to apply scale/alpha without touching visibility 2026-04-02 19:04:20 -05:00
Xurkon 4df787419a fix: Apply scale and alpha immediately via dedicated functions 2026-04-02 18:53:55 -05:00
Xurkon a5c5560c21 fix: Apply scale and position immediately when settings change 2026-04-02 18:28:08 -05:00
Xurkon 6a67189a4c fix: Arrow scale and position reset not working 2026-04-02 18:25:44 -05:00
Xurkon 67255ca5fb feat: Add Arrow options tab with scale, transparency, and debug settings; Fix zone filter bug that broke auto-tracking; Update .gitattributes and .gitignore to properly hide dev files from releases 2026-04-02 18:21:30 -05:00
Xurkon 751c9974b4 fix: QuestieArrow.lua syntax error - remove leftover inner closure bodies
The previous patch hoisted _CollectFinisherSpawns and _CollectObjective to
module level but failed to remove the original inner function bodies from
_CollectQuestTargets, leaving 100+ lines of orphaned code and a phantom
bare 'end' that caused '<eof> expected near end' on load.

_CollectQuestTargets is now clean: calls the hoisted module-level functions
directly, no inner local function declarations.
2026-03-29 16:46:37 -05:00
Xurkon 05ea31bc53 perf: reduce CPU hotspots identified in profiler
- HBD.lua: Cache GetPlayerWorldPosition/GetPlayerZonePosition at 50ms
  intervals instead of hammering GetPlayerMapPosition() every frame.
  Invalidate cache on PLAYER_ENTERING_WORLD and ZONE_CHANGED_* events.
  Expected ~97% reduction in C API position calls (45,570 -> ~1,200 / 10min).

- zoneDB.lua: Replace O(n) linear scan in GetAreaIdByUiMapId with an
  O(1) reverse lookup cache (uiMapIdToAreaIdCache) built at Initialize().
  Cache is kept in sync by ApplyCustomZones and name-match fallback now
  caches its result so subsequent calls are also O(1).

- Tooltip.lua: Throttle GameTooltip OnUpdate hook to 100ms intervals
  (was firing every frame at 60-144 Hz). Added _tooltipLastText cache
  to avoid redundant GetText() + CountTooltip() calls when nothing changed.

- QuestieArrow.lua: Hoist _HasMissingCompletedFlag, _GetCompleteIconType,
  _CollectFinisherSpawns, and _CollectObjective out of _CollectQuestTargets
  to module-level functions. These were re-created as closures on every
  UpdateNearestTargets call (1 Hz). Shared per-cycle context is published
  via _arrow_* module upvalues to avoid closure capture overhead.

- QuestieLearnerComms.lua: Four micro-optimizations:
  (1) Reduce ProcessQueues ticker 0.2s -> 0.5s (still 7x faster than
      minChatInterval of 3.5s).
  (2) Cache hidden channel ID at init; lazy refresh on disconnect.
  (3) Drop LibDeflate compress level 9 -> 1 (fraction of CPU cost).
  (4) O(1) messageCacheCount counter replaces O(n) pairs() size scan.
2026-03-29 16:42:43 -05:00
Xurkon 33ced25e63 fix: check playerUiMapId for custom zones in arrow target selection 2026-03-29 00:02:23 -05:00
Xurkon 8616765eed Update custom DB quests and bump version to 9.8.5 2026-02-24 20:52:12 -06:00
Xurkon c42945a1f8 Release v9.7.10 2026-02-21 22:52:51 -06:00
Xurkon 52c13b98aa Add debug print to Arrow to see evaluation values 2026-02-21 12:46:19 -06:00
Xurkon 7aaf4d3495 Fix Arrow failing to detect quest completion fallback
When QuestLogCache parses incomplete tracker data upon reload,
it leaves quest.isComplete undefined or false. This allows the
Arrow to process SpecialObjectives (like required source item drops)
which do not have Completed/Needed/Collected stats on them, bypassing
our recent arrow logic fix.

Added an explicit check for QuestieDB.IsComplete(quest.Id) == 1
at the very top of the track loop to guarantee the Arrow immediately
stops processing objectives and exclusively targets the finisher.
2026-02-21 12:32:36 -06:00
Xurkon 1248d7a1f6 Fix Arrow pointing to completed objectives instead of finisher
QuestieArrow._CollectObjective was only checking objective.Completed
to determine if it should skip an objective. In WotLK, the server often
doesn't send the completed flag until turn-in time.

This caused the arrow to still pick up the kill/interaction spawns (like
the 5/5 Goblin Prisoners) because their Completed flag hadn't been
set, overpowering the finisher spawn.

Added a fallback check: if objective.Collected >= objective.Needed,
skip the objective.
2026-02-21 12:07:07 -06:00
Xurkon dd6329de97 Docs: Update Changelog with new Ascension quests 2026-02-18 22:49:11 -06:00
Xurkon a113070b7d Release v9.7.3 2026-02-15 09:08:51 -06:00
Xurkon 6ef85d4e2d v9.7.2: Ebonhold Database integration and core logic refinements 2026-02-14 21:13:44 -06:00