Commit Graph

78 Commits

Author SHA1 Message Date
Xurkon da5546fde0 fix(learner): restore persisted NPC spawns into override on load
InjectLearnedData stripped each learned NPC's spawn field [7] when injecting
into npcDataOverrides (CopyWithoutField(data,7) / k~=7), deferring to
_MergeSpawnEvidence. That promoter only runs on live kill evidence, so spawns
learned in a prior session never returned to the queryable DB on /reload, and
a freshly accepted quest (8325 -> Mana Wyrm 15274 on Sunstrider) had no pins
until the mob was re-killed.

Re-merge the saved [7] spawns into the override at injection time, normalized
to the canonical uiMapId via NormalizeSpawnZoneKey (so an areaId left by the
uiMapId->areaId migration, e.g. 3431/3430, maps back to 1241 for the renderer/
HBD), deep-merged with InsertIfNewBucket, and gated by IsAscensionProtected so
curated AscensionDB coords are never overwritten (always restored in learner
mode; in auto mode only non-curated NPCs). Regression from 7ce0cdc.
2026-06-08 16:51:58 -05:00
Xurkon d92ae93870 fix(learner): seed objective pins on accept; handle monster objectives
OnQuestAccepted now seeds objective pins directly from the SavedVariables
learner payload (objIndex) on accept in learner mode, instead of waiting
for quest-log text sync — so quests like 8325 spawn pins immediately when
the objective mapping already exists. The accept-time ID lookup is widened
from killcredit to also cover monster objectives, and falls back to
objData.Id when no IdList is present.
2026-06-08 08:00:15 -05:00
Xurkon 5b576911d7 fix: tooltip flicker, learner quest field mapping, secondary tooltip style
- QuestieLib.GetColoredQuestName now nil-guards QuestieDB.GetQuest() before reading .isComplete
- TooltipHandler.AddItemDataToTooltip re-keyed on itemId only (was firing on every ElvUI refresh)
- Removed unconditional ResizeTooltip call from item tooltip path (caused first-hover pop)
- OnQuestDetail no longer writes objectives text to data[6] or quest body to data[17] or zoneId to data[8]
- OnQuestAccepted documents why requiredLevel/requiredRaces/requiredClasses are intentionally not captured
- Reused logIdx from data build pass instead of redeclaring it for the objective scan
- Secondary learner tooltip now matches GameTooltip style with or without ElvUI (defers to ElvUI when loaded, replicates its Transparent template otherwise)
- Combined-tooltip learner stats now framed by invisible spacer lines for visual separation
2026-06-07 08:38:12 -05:00
Xurkon 1ca426ee9f feat: expand learner tooltip controls 2026-06-06 14:30:07 -05:00
Xurkon 1f3de0e02e feat: add learner tooltip controls 2026-06-06 13:59:31 -05:00
Xurkon 84fefc1c20 fix: validate quest turn in learning 2026-06-06 13:16:51 -05:00
Xurkon a1c6a181fc fix: refresh learner settings live 2026-06-06 12:19:23 -05:00
Xurkon 287751a071 fix: let learner turn-ins drive arrow spawns 2026-06-06 11:48:11 -05:00
Xurkon 4e95418594 fix: gate object learning to quest-related data 2026-06-06 10:35:46 -05:00
Xurkon ccdfa525cf fix: gate learner item learning to quest items 2026-06-06 10:21:36 -05:00
Xurkon ada40add8b fix: invalidate caches after learner updates 2026-06-06 10:07:28 -05:00
Xurkon b0f2088ab7 fix: prefer loot source for item drops 2026-06-06 09:44:51 -05:00
Xurkon 36668338f5 fix: restore learner questgiver and item drop learning 2026-06-06 07:56:29 -05:00
Xurkon cccfa1e81b fix: preserve explicit learner spawn data 2026-06-06 07:44:17 -05:00
Xurkon adb99c68c1 feat: heal learned npc coordinates from repeated kills 2026-06-06 07:21:03 -05:00
Xurkon 85d4a7a1e4 fix: suppress duplicate combat log npc learns 2026-06-06 07:15:05 -05:00
Xurkon 3f105e5782 fix: harden learner compatibility shims 2026-06-06 07:03:16 -05:00
Xurkon bed1e31a2f fix: quiet learner debug and harden vanilla guids 2026-06-06 07:00:30 -05:00
Xurkon 8c593a1cfd fix: correct learner npc and item learning ids 2026-06-06 06:53:38 -05:00
Xurkon 82b5aa86dd fix: harden learner quest accept resolution 2026-06-06 06:38:47 -05:00
Xurkon 6597d20b7d feat: refine learner data source and pin rendering 2026-06-06 00:04:50 -05:00
Xurkon 5e3d1b4fd3 fix: learn object quest objectives 2026-06-05 21:32:10 -05:00
Xurkon 0f20ea8aad fix: learn more combat kills 2026-06-05 21:22:14 -05:00
Xurkon 11b78cf3ce fix: route learner diagnostics to learner debug 2026-06-05 21:12:13 -05:00
Xurkon 15023b4a3a fix: learn credited unit died kills 2026-06-05 21:01:56 -05:00
Xurkon 64d5fb2f10 fix: keep learner mode live 2026-06-05 20:51:42 -05:00
Xurkon 9d02c8a231 fix: fully clear learned data buckets 2026-06-05 20:37:34 -05:00
Xurkon 3eda8d01ed fix: force learner on when base db is missing 2026-06-05 20:23:29 -05:00
Xurkon a0409eef8c feat: add learner/static data source mode 2026-06-05 20:15:26 -05:00
Xurkon 3f87e04c75 fix: learn gameobjects from used events 2026-06-05 19:19:11 -05:00
Xurkon fa8b204a8f fix: trace loot source gameobjects 2026-06-05 19:13:16 -05:00
Xurkon ad8f85bf63 fix: trace learner object captures 2026-06-05 19:06:13 -05:00
Xurkon cd01a537f3 Merge branch 'tooltip-ascensiondb-precedence' into questie-learner-comms-improvements 2026-06-05 18:22:12 -05:00
Xurkon 9fcb1988da fix: preserve learner party kill updates 2026-06-05 14:19:42 -05:00
Xurkon 1f6b6b14dc perf: align learner debounce defaults 2026-06-05 14:10:58 -05:00
Xurkon d1f79fd73e fix: prefer ascension tooltip data 2026-06-04 22:36:42 -05:00
Xurkon 5e3ac7cdd1 fix: synchronize learner performance options 2026-06-04 16:59:37 -05:00
Xurkon 8e90d43b6c perf: ignore bystander deaths for learner refreshes 2026-06-04 16:43:33 -05:00
Xurkon f160570a95 perf: add learner performance controls 2026-06-04 16:37:03 -05:00
Xurkon 305e918525 perf: batch learner pin refreshes 2026-06-04 16:23:43 -05:00
Xurkon 1ae4a21212 refactor: drop redundant learner private assignment 2026-06-04 10:03:26 -05:00
Xurkon 851a0ad6ea fix: capture learner event payload 2026-06-04 08:00:06 -05:00
Xurkon 45357263c1 perf: batch learner merges and guard debug scans 2026-06-04 07:00:38 -05:00
Xurkon 51561b97d8 perf: batch learner updates and remove Turtle support 2026-06-04 06:47:45 -05:00
Xurkon 31864a467e fix: harden learner spawn suppression 2026-06-03 06:41:23 -05:00
Xurkon 7ce0cdcf99 fix(learner): correct spawn iteration, gate AscensionDB overrides, clean fallback pollution
Real bug fixes (no behavior additions that risk regressions):

- LearnNPC: require both spawnX/spawnY AND x/y before accepting a spawn
  entry. Previously quest-giver/finisher dialog polluted spawn lists
  with the player's current position.
- _MergeSpawnEvidence: respect IsAscensionProtected ownership gate
  unconditionally. The 'test mode' comment-out is removed; AscensionDB
  curated spawn data is now protected from learner overwrite (fixes
  the Sunstrider Mana Wyrm pin regression).
- _PruneSpawnOutliers and PruneLearnedSpawnOutliers: fix broken
  next() iteration. The old code used 'coord = next(spawnTable); while
  coord do ... coord = next(spawnTable, coord)' which treated the
  KEY as the value. For numeric spawn arrays this returned indices
  (1, 2, ...) but the code did coord[1] and coord[2] on those indices,
  which are nil. The outlier pruning was effectively dead code. Now
  iterates with 'coordKey, coord = next(spawnTable)' correctly, sorts
  toRemove keys descending for safe table.remove, and compacts numeric
  arrays.
- InjectLearnedData: early-exit when learner disabled, strip [7] on
  initial npcDataOverrides creation (only _MergeSpawnEvidence should
  populate spawns), versioned cleanup that retroactively clears
  singleton-position spawn entries (≤1 unique position) from pollution
  caused by the prior LearnNPC bug.

Supporting utilities added: CopyWithoutField, CountUniqueSpawnPositions,
NormalizeCoordPair reuse (replaces inline floor(x*100+0.5)/100).
2026-06-01 18:35:39 -05:00
Xurkon 164584ca87 fix: Sunstrider pin regression, ghost pins, and learner zone normalization
- Fix: isSunstrider block in _MergeSpawnEvidence now checks IsAscensionProtected
  before writing learner data to npcDataOverrides. Without this guard, each Mana
  Wyrm kill overwrote AscensionDB's z1241=5 data with learner z3431 coords.

- Fix: Clustering disabled for zone 1241 (Sunstrider Isle) in _DrawObjectiveIcons
  so all 5 AscensionDB spawn pins display individually instead of collapsing to 2.

- Fix: Ghost pin loop in AvailableQuests.lua -- 'while frames[i]' was iterating a
  string-keyed table with a numeric index (never iterated). Changed to pairs().

- Fix: NormalizeSpawnZoneKey now uses ZoneDB.areaIdToUiMapId for all zones so
  learner evidence is stored under map IDs (e.g. 1241) not area IDs (e.g. 3431),
  matching AscensionDB's key space. Applied in LearnNPC and _StoreGuidSpawnEvidence.

- Fix: isSunstrider detection in _MergeSpawnEvidence updated from hardcoded
  zoneId==3431 check to IsSunstriderNativeZone() since zone IDs are now normalized
  to map IDs at storage time.
2026-05-25 19:02:56 -05:00
Xurkon 598f7d3652 feat(learner): Phase 5 — comms data validation 2026-05-24 00:37:27 -05:00
Xurkon c5d8c5ffe5 feat(learner): Phase 4 — real-time tooltip for learned spawns 2026-05-24 00:36:19 -05:00
Xurkon 021d1b942b feat(learner): Phase 3 — weighted spawn merge 2026-05-24 00:33:09 -05:00