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.
This commit is contained in:
Xurkon
2026-06-12 01:30:37 -05:00
parent 152e823c04
commit 1f8fa20e00
2 changed files with 17 additions and 10 deletions
+16 -10
View File
@@ -4401,17 +4401,23 @@ function QuestieLearner:OnCombatLogEvent(timestamp, eventType, srcGUID, srcName,
-- Questie:Debug(Questie.DEBUG_LEARNER, "[QuestieLearner] Kill cached for correlation:", npcId, dstName, "@", tostring(px), tostring(py), "zone", tostring(zoneId))
end
-- Unconditionally map the spawn position for Ascension DB building.
-- Only announce the first time we learn a unique NPC ID; repeated kills
-- still update evidence but should not spam "learned" debug output.
local npcWasKnown = Questie.dbLearner.global.npcs[npcId] ~= nil
self:LearnNPC(npcId, name, nil, nil, nil, nil, px, py, zoneId)
if not npcWasKnown then
Questie:Debug(Questie.DEBUG_LEARNER, "[QuestieLearner] Combat-log learned NPC:", eventType, npcId, name or "?")
end
-- Only record a SPAWN for kills we can actually position: our own / credited kills with
-- a captured player position (px,py). Bystander kills — other players killing nearby mobs
-- we never engaged — have no usable position; recording them would store OUR location as
-- the mob's spawn and inflate the kill count (the "recording nearby player kills as my
-- own" bug). For those we skip the spawn entirely; the NPC's name/quest data is still
-- learned via mouseover/target. LearnNPC must NOT be called with nil px,py here, because
-- its GetPlayerCoords fallback would re-introduce exactly that pollution.
if px and py then
local npcWasKnown = Questie.dbLearner.global.npcs[npcId] ~= nil
self:LearnNPC(npcId, name, nil, nil, nil, nil, px, py, zoneId)
if not npcWasKnown then
Questie:Debug(Questie.DEBUG_LEARNER, "[QuestieLearner] Combat-log learned NPC:", eventType, npcId, name or "?")
end
-- Phase 2: store per-GUID spawn evidence for weighted merge
self:_StoreGuidSpawnEvidence(npcId, dstGUID, zoneId, px, py)
-- Phase 2: store per-GUID spawn evidence for weighted merge
self:_StoreGuidSpawnEvidence(npcId, dstGUID, zoneId, px, py)
end
local guidSpawnsAfterStore = Questie.dbLearner.global.npcs[npcId]
and Questie.dbLearner.global.npcs[npcId][8]
if guidSpawnsAfterStore then