Commit Graph

10 Commits

Author SHA1 Message Date
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