fix: skip malformed item objectives in cache
This commit is contained in:
@@ -427,19 +427,25 @@ function QuestieLib:CacheItemNames(questId)
|
|||||||
if (quest and quest.ObjectiveData) then
|
if (quest and quest.ObjectiveData) then
|
||||||
for _, objectiveDB in pairs(quest.ObjectiveData) do
|
for _, objectiveDB in pairs(quest.ObjectiveData) do
|
||||||
if objectiveDB.Type == "item" then
|
if objectiveDB.Type == "item" then
|
||||||
if not ((QuestieDB.ItemPointers or QuestieDB.itemData)[objectiveDB.Id]) then
|
local itemId = objectiveDB.Id
|
||||||
Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieLib:CacheItemNames] Requesting item information for missing itemId:", objectiveDB.Id)
|
if not itemId then
|
||||||
local item = Item:CreateFromItemID(objectiveDB.Id)
|
Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieLib:CacheItemNames] Skipping item objective without itemId for quest:", questId)
|
||||||
|
elseif not ((QuestieDB.ItemPointers or QuestieDB.itemData)[itemId]) then
|
||||||
|
Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieLib:CacheItemNames] Requesting item information for missing itemId:", itemId)
|
||||||
|
local item = Item:CreateFromItemID(itemId)
|
||||||
item:ContinueOnItemLoad(
|
item:ContinueOnItemLoad(
|
||||||
function()
|
function()
|
||||||
local itemName = item:GetItemName()
|
local itemName = item:GetItemName()
|
||||||
if not QuestieDB.itemDataOverrides[objectiveDB.Id] then
|
if not itemId then
|
||||||
QuestieDB.itemDataOverrides[objectiveDB.Id] = { itemName, { questId }, {}, {} }
|
return
|
||||||
|
end
|
||||||
|
if not QuestieDB.itemDataOverrides[itemId] then
|
||||||
|
QuestieDB.itemDataOverrides[itemId] = { itemName, { questId }, {}, {} }
|
||||||
else
|
else
|
||||||
QuestieDB.itemDataOverrides[objectiveDB.Id][1] = itemName
|
QuestieDB.itemDataOverrides[itemId][1] = itemName
|
||||||
end
|
end
|
||||||
Questie:Debug(Questie.DEBUG_DEVELOP,
|
Questie:Debug(Questie.DEBUG_DEVELOP,
|
||||||
"[QuestieLib:CacheItemNames] Created item information for item:", itemName, ":", objectiveDB.Id)
|
"[QuestieLib:CacheItemNames] Created item information for item:", itemName, ":", itemId)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,4 +1,11 @@
|
|||||||
describe("Questie item name safety", function()
|
describe("Questie item name safety", function()
|
||||||
|
local function read(path)
|
||||||
|
local f = assert(io.open(path, "r"), "cannot open " .. path)
|
||||||
|
local c = f:read("*a")
|
||||||
|
f:close()
|
||||||
|
return c
|
||||||
|
end
|
||||||
|
|
||||||
before_each(function()
|
before_each(function()
|
||||||
dofile("Tests/wow_api_mock.lua")
|
dofile("Tests/wow_api_mock.lua")
|
||||||
GetItemInfo = function()
|
GetItemInfo = function()
|
||||||
@@ -16,4 +23,11 @@ describe("Questie item name safety", function()
|
|||||||
local item = Item:CreateFromItemID("bad-id")
|
local item = Item:CreateFromItemID("bad-id")
|
||||||
assert.equals("item:bad-id", item:GetItemName())
|
assert.equals("item:bad-id", item:GetItemName())
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it("skips malformed item objectives without an item id", function()
|
||||||
|
local lib = read("Modules/Libs/QuestieLib.lua")
|
||||||
|
assert.is_true(string.find(lib, "local itemId = objectiveDB.Id", 1, true) ~= nil)
|
||||||
|
assert.is_true(string.find(lib, "if not itemId then", 1, true) ~= nil)
|
||||||
|
assert.is_true(string.find(lib, "QuestieDB.itemDataOverrides[itemId]", 1, true) ~= nil)
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|||||||
Reference in New Issue
Block a user