fix: dedupe missing quest lookup logs

This commit is contained in:
Xurkon
2026-06-06 13:33:11 -05:00
parent 3264794a7d
commit 31bd1e7d9b
2 changed files with 88 additions and 4 deletions
+20 -4
View File
@@ -129,6 +129,10 @@ end
QuestieDB.private.GetLearnerSpawnTable = GetSpawnTable
QuestieDB.private.NormalizeLearnerSpawnEntry = NormalizeLearnerSpawnEntry
QuestieDB.private.missingQuestLog = QuestieDB.private.missingQuestLog or {}
QuestieDB.private.missingNpcLog = QuestieDB.private.missingNpcLog or {}
QuestieDB.private.missingObjectLog = QuestieDB.private.missingObjectLog or {}
QuestieDB.private.missingItemLog = QuestieDB.private.missingItemLog or {}
local function _MergeOverride(result, override, rawdata, keyMap)
for stringKey, intKey in pairs(keyMap) do
@@ -680,7 +684,10 @@ function QuestieDB:GetObject(objectId)
end
if not rawdata and not override then
Questie:Debug(Questie.DEBUG_CRITICAL, "[QuestieDB:GetObject] data not found for objectID:", objectId)
if not QuestieDB.private.missingObjectLog[objectId] then
QuestieDB.private.missingObjectLog[objectId] = true
Questie:Debug(Questie.DEBUG_INFO, "[QuestieDB:GetObject] data not found for objectID:", objectId)
end
return nil
end
@@ -740,7 +747,10 @@ function QuestieDB:GetItem(itemId)
end
if not rawdata and not override then
Questie:Debug(Questie.DEBUG_CRITICAL, "[QuestieDB:GetItem] data not found for itemID:", itemId)
if not QuestieDB.private.missingItemLog[itemId] then
QuestieDB.private.missingItemLog[itemId] = true
Questie:Debug(Questie.DEBUG_INFO, "[QuestieDB:GetItem] data not found for itemID:", itemId)
end
return nil
end
@@ -1628,7 +1638,10 @@ function QuestieDB.GetQuest(questId, ...) -- /dump QuestieDB.GetQuest(867)
if (not rawdata) then
rawdata = overrideData
if (not rawdata) then
Questie:Debug(Questie.DEBUG_CRITICAL, "[QuestieDB.GetQuest] rawdata is nil for questID:", questId)
if not QuestieDB.private.missingQuestLog[questId] then
QuestieDB.private.missingQuestLog[questId] = true
Questie:Debug(Questie.DEBUG_INFO, "[QuestieDB.GetQuest] rawdata is nil for questID:", questId)
end
if questId == 0 then
Questie:Error("[QuestieDB.GetQuest] rawdata is nil for questID:", questId)
end
@@ -2243,7 +2256,10 @@ function QuestieDB:GetNPC(npcId)
end
if not rawdata and not override then
Questie:Debug(Questie.DEBUG_CRITICAL, "[QuestieDB:GetNPC] data not found for npcID:", npcId)
if not QuestieDB.private.missingNpcLog[npcId] then
QuestieDB.private.missingNpcLog[npcId] = true
Questie:Debug(Questie.DEBUG_INFO, "[QuestieDB:GetNPC] data not found for npcID:", npcId)
end
return nil
end
@@ -242,6 +242,74 @@ describe("QuestieDB quest build guards missing objective tables", function()
end)
end)
describe("QuestieDB missing quest logs are deduplicated", function()
local originalImport
local originalDebug
local originalQueryQuest
before_each(function()
dofile("Tests/wow_api_mock.lua")
local questieLib = {
GetTbcLevel = function()
return 1, 1
end,
}
local questieCorrections = {
hiddenQuests = {},
killCreditObjectiveFirst = {},
}
originalImport = QuestieLoader.ImportModule
QuestieLoader.ImportModule = function(self, name)
if name == "QuestieLib" then
return questieLib
end
if name == "QuestieCorrections" then
return questieCorrections
end
return originalImport(self, name)
end
dofile("Database/QuestieDB.lua")
dofile("Database/questDB.lua")
QuestieDB.private.questCache = {}
QuestieDB.private.missingQuestLog = {}
originalDebug = Questie.Debug
Questie.Debug = function(self, level, ...)
_G._questie_debug_calls = (_G._questie_debug_calls or 0) + 1
end
originalQueryQuest = QuestieDB.QueryQuest
QuestieDB.QueryQuest = function()
return nil
end
end)
after_each(function()
if originalQueryQuest then
QuestieDB.QueryQuest = originalQueryQuest
end
if originalDebug then
Questie.Debug = originalDebug
end
if originalImport then
QuestieLoader.ImportModule = originalImport
end
_G._questie_debug_calls = nil
end)
it("logs a missing quest only once per quest id", function()
local questId = 900002
assert.is_nil(QuestieDB:GetQuest(questId))
assert.is_nil(QuestieDB:GetQuest(questId))
assert.equals(1, _G._questie_debug_calls)
end)
end)
describe("QuestieLearner quest accept resolution", function()
local QuestieLearner
local originalGetNumQuestLogEntries