Module:Item as quest reward
Jump to navigation
Jump to search
local argsUtil = require("Module:ArgsUtil")
local cargoUtil = require("Module:CargoUtil")
local iconListModule = require("Module:Icon list")
local p = {}
function p.main(frame)
local args = argsUtil.merge(frame.args, frame:getParent().args)
local itemName = args[1] or mw.title.getCurrentTitle().text
-- Manually escape single quotes by doubling them
local escapedItemName = itemName:gsub("'", "''")
-- Construct the SQL WHERE clause manually
local whereClause = "`cargo__missionRewards`.`rewards`='" .. escapedItemName .. "'"
.. " OR `cargo__missionRewards`.`rewards`='" .. escapedItemName .. " recipe'"
.. " OR `cargo__missionRewards`.`rewards`='" .. escapedItemName .. " data'"
.. " OR `cargo__missionRewards`.`rewards`='" .. escapedItemName .. " schematic'"
local queryOptions = {
tables = "Missions, missionNPCs, missionRequirements, missionRewards, missionRewards=mr2",
fields = "Missions._pageTitle, Missions.name, Missions.objective, GROUP_CONCAT(DISTINCT CONCAT(missionRequirements.requirements, '*', COALESCE(missionRequirements.quantity, 1), '/', COALESCE(missionRequirements.quality, 0)))=requirements, GROUP_CONCAT(DISTINCT CONCAT(mr2.rewards, '*', COALESCE(mr2.quantity, 1)))=rewards",
join = "Missions.missionID=missionNPCs.missionID, Missions.missionID=missionRequirements.missionID, Missions.missionID=mr2.missionID, Missions.missionID=missionRewards.missionID",
where = whereClause,
groupBy = "Missions.missionID",
limit = 100,
orderBy = ""
}
local results = cargoUtil.queryData(queryOptions)
-- Debugging: Log the raw results
mw.logObject(results)
-- Check if results are empty
if not results or #results == 0 then
return "No missions reward '''" .. itemName .. "''' when they are completed."
end
-- Build the result table
local html = mw.html.create('table')
:addClass('lkg-table tablelarge tdt3 td20wid3 tdt4 td20wid4')
:tag('tr')
:tag('th'):wikitext('Mission Name'):done()
:tag('th'):wikitext('Mission Objective'):done()
:tag('th'):wikitext('Mission Requirements'):done()
:tag('th'):wikitext('Mission Rewards'):done()
:done()
for _, row in ipairs(results) do
-- Debugging: Log each row's data to check its structure
mw.log("Row data:", row)
-- Retrieve and log specific fields
local pagename = row["Missions._pageTitle"]
local questName = row["Missions.name"]
local objective = row["Missions.objective"]
local requirements = row["requirements"]
local rewards = row["rewards"]
mw.log("Page Name:", pagename, "Quest Name:", questName, "Objective:", objective, "Requirements:", requirements, "Rewards:", rewards)
-- Pass the requirements and rewards to the Icon list module
local reqList = tostring(iconListModule._main{ requirements, delim = ',' })
local rewardsList = tostring(iconListModule._main{ rewards, delim = ',' })
-- Build the table row with retrieved data
html:tag('tr')
:tag('td'):wikitext("[[" .. pagename .. "|" .. (questName or 'N/A') .. "]]"):done()
:tag('td'):wikitext(objective or 'N/A'):done()
:tag('td'):wikitext(reqList or 'N/A'):done()
:tag('td'):wikitext(rewardsList or 'N/A'):done()
:done()
end
return tostring(html)
end
return p