Module:Infobox Recipe: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
The Gaffer (talk | contribs) No edit summary |
m (Spaces to tabs) |
||
Line 2: | Line 2: | ||
function p._main(frame) |
function p._main(frame) |
||
local args = frame:getParent().args |
|||
local mw = require('mw') |
|||
local currency = require('Module:Currency').parse |
|||
local parse = require('Module:Param Parse') |
|||
local yn = require('Module:Yesno') |
|||
--If set to true, will check if any of the items passed as a rawmaterialparam are actually intermediate materials. Will then change the display order of the infobox. |
|||
local showFullRecipe = yn(args.showFull or 'no', false) |
|||
--Get each of the rawmatX parameters from params and store their values in a new table |
|||
local argsMaterials = p._extractRawMaterials(args) |
local argsMaterials = p._extractRawMaterials(args) |
||
--empty tables to hold materials |
--empty tables to hold materials |
||
local rawMaterials = {} |
local rawMaterials = {} |
||
local intermediateMaterials = {} |
local intermediateMaterials = {} |
||
--counter for total price of raw materials |
--counter for total price of raw materials |
||
local rawMaterialCost = 0 |
|||
--get the value for the output product |
--get the value for the output product |
||
local output1Value = args.output1 and mw.smw.ask('[[:+]][[' .. args.output1 .. ']]|?Value|limit=1') |
local output1Value = args.output1 and mw.smw.ask('[[:+]][[' .. args.output1 .. ']]|?Value|limit=1') |
||
Line 29: | Line 29: | ||
output1TotalValue = 0 |
output1TotalValue = 0 |
||
end |
end |
||
--Check if any of the raw mats provided are intermediate products, if they are, return their own raw materials |
--Check if any of the raw mats provided are intermediate products, if they are, return their own raw materials |
||
if showFullRecipe then |
if showFullRecipe then |
||
Line 45: | Line 45: | ||
local queryResult = mw.smw.ask('[[:+]][[Sold item::' .. material['name'] .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1') or 0 |
local queryResult = mw.smw.ask('[[:+]][[Sold item::' .. material['name'] .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1') or 0 |
||
if type(queryResult) == "table" and queryResult[1]['Shop buy price'] then |
if type(queryResult) == "table" and queryResult[1]['Shop buy price'] then |
||
return tonumber(queryResult[1]['Shop buy price']) or 0 |
|||
end |
|||
return 0 |
|||
end |
end |
||
Line 55: | Line 55: | ||
local pageName = '' |
local pageName = '' |
||
if result and result[1] and result[1]["Uses facility"] then |
if result and result[1] and result[1]["Uses facility"] then |
||
local usesFac = result[1]["Uses facility"] |
|||
pageName = usesFac:gsub("%[%[", ""):gsub("%]%]", ""):gsub("|.*", ""):gsub("^:", "") |
|||
end |
|||
return pageName |
|||
end |
end |
||
--Set SMW properties |
--Set SMW properties |
||
if args.rawmat1 then |
if args.rawmat1 then |
||
mw.smw.set({ |
|||
["Uses item"] = args.rawmat1, |
|||
}) |
|||
}) |
|||
end |
|||
if args.rawmat2 then |
|||
mw.smw.set({ |
|||
["Uses item"] = args.rawmat2, |
|||
}) |
|||
}) |
|||
end |
|||
if args.rawmat3 then |
|||
mw.smw.set({ |
|||
["Uses item"] = args.rawmat3, |
|||
}) |
|||
}) |
|||
end |
|||
if args.facility then |
|||
mw.smw.set({ |
mw.smw.set({ |
||
["Uses facility"] = args.facility |
["Uses facility"] = args.facility |
||
Line 89: | Line 89: | ||
local row = {} |
local row = {} |
||
table.insert(row, '| [[File:' .. item['name'] .. '.png|30px]]') |
table.insert(row, '| [[File:' .. item['name'] .. '.png|30px]]') |
||
table.insert(row, '| [[' .. item['name'] .. ']]') |
|||
table.insert(row, '| style="text-align: right;" | ' .. (quantity or 1)) |
|||
table.insert(row, '| style="text-align: right;" | ' .. currency(materialBuyPrice)) |
|||
table.insert(row, '|-') |
|||
return row |
|||
end |
end |
||
--Creates a row suitable for the intermediate materials section of the infobox. Quantity is optional, if no value is provided it will default to 1 |
--Creates a row suitable for the intermediate materials section of the infobox. Quantity is optional, if no value is provided it will default to 1 |
||
local function createIntermediateMaterialRow(item, quantity) |
local function createIntermediateMaterialRow(item, quantity) |
||
Line 101: | Line 101: | ||
local facility = getFacility(item) |
local facility = getFacility(item) |
||
table.insert(row, '| [[File:' .. item .. '.png|30px]]') |
table.insert(row, '| [[File:' .. item .. '.png|30px]]') |
||
table.insert(row, '| [[' .. item .. ']]') |
|||
table.insert(row, '| style="text-align: right;" | ' .. (quantity or 1)) |
|||
table.insert(row, '| style="text-align: right;" | [[File:' .. facility .. '.png|30px]] [[' .. facility .. ']]') |
|||
table.insert(row, '|-') |
|||
return row |
|||
end |
|||
-- Recipe Table Head |
-- Recipe Table Head |
||
local out = {} |
|||
table.insert(out, '{| class="wikitable"') |
|||
table.insert(out, '! colspan="4" | Requirements') |
|||
table.insert(out, '|-') |
|||
table.insert(out, '! colspan="2" | Facility') |
|||
table.insert(out, '| colspan="2" | ' .. (args.facility and '[[' .. args.facility .. ']]' or 'Unknown')) |
|||
table.insert(out, '|-') |
|||
table.insert(out, '! colspan="2" | Profession') |
|||
table.insert(out, '! Level') |
|||
table.insert(out, '! XP') |
|||
table.insert(out, '|-') |
|||
table.insert(out, '| colspan="2" style="text-align:center;" | ' .. (args.profession and '[[' .. args.profession .. ']]' or 'Unknown')) |
|||
table.insert(out, '| style="text-align: center;" | ' .. (args.level or 'Unknown')) |
|||
table.insert(out, '| style="text-align: center;" | ' .. (args.exp or 'Unknown')) |
|||
table.insert(out, '|-') |
|||
-- Add raw materials |
-- Add raw materials |
||
-- Headers |
|||
table.insert(out, '! colspan="2" | Raw Ingredient') |
|||
table.insert(out, '! Quantity') |
|||
table.insert(out, '! Cost') |
|||
table.insert(out, '|-') |
|||
-- Values |
|||
for _, material in ipairs(rawMaterials) do |
|||
local row = createRawMaterialRow(material) |
|||
for _, value in ipairs(row) do |
|||
table.insert(out, value) |
|||
end |
|||
end |
|||
-- Add total raw cost |
-- Add total raw cost |
||
table.insert(out, '! colspan="3" | Total Raw cost') |
|||
table.insert(out, '| style="text-align: right;" | ' .. currency(rawMaterialCost)) |
|||
table.insert(out, '|-') |
|||
-- Add Intermediate steps if required |
-- Add Intermediate steps if required |
||
-- Headers |
-- Headers |
||
if next(intermediateMaterials) ~= nil then |
|||
-- Headers |
|||
table.insert(out, '! colspan="2" | Intermediate Ingredient') |
|||
table.insert(out, '! Quantity') |
|||
table.insert(out, '! Facility') |
|||
table.insert(out, '|-') |
|||
-- Values |
|||
for _, material in ipairs(intermediateMaterials) do |
|||
local row = createIntermediateMaterialRow(material['name']) |
|||
for _, value in ipairs(row) do |
|||
table.insert(out, value) |
|||
end |
|||
end |
|||
end |
|||
-- Add output data |
-- Add output data |
||
-- Headers |
|||
table.insert(out, '! colspan="2" | Output') |
|||
table.insert(out, '! Quantity') |
|||
table.insert(out, '! Value') |
|||
table.insert(out, '|-') |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
end |
end |
||
function p._extractRawMaterials(args) |
function p._extractRawMaterials(args) |
||
local rawMaterials = {} |
|||
for i = 1, 9 do |
|||
local materialKey = "rawmat" .. i |
|||
local quantityKey = "rawmat" .. i .. "qty" |
|||
local materialValue = args[materialKey] |
|||
if materialValue and materialValue ~= "" then |
|||
local quantityValue = tonumber(args[quantityKey]) or 1 |
|||
table.insert(rawMaterials, { name = materialValue, quantity = quantityValue }) |
|||
end |
|||
end |
|||
return rawMaterials |
|||
end |
end |
||
function p._getTrueRawMaterials(argsMaterials) |
function p._getTrueRawMaterials(argsMaterials) |
||
local queryResult = {} |
|||
for _, item in pairs(argsMaterials) do |
|||
if item["name"] then |
|||
local result = mw.smw.ask('[[:+]][[' .. item["name"] .. ']]|?Uses item') |
|||
⚫ | |||
local usesItems = result[1]["Uses item"] |
|||
⚫ | |||
⚫ | |||
local usesItems = result[1]["Uses item"] |
|||
⚫ | |||
⚫ | |||
⚫ | |||
if type(usesItems) == "table" then |
|||
⚫ | |||
⚫ | |||
end |
|||
⚫ | |||
else |
|||
⚫ | |||
⚫ | |||
end |
|||
⚫ | |||
else |
|||
⚫ | |||
⚫ | |||
end |
|||
⚫ | |||
end |
|||
⚫ | |||
end |
|||
end |
|||
end |
|||
⚫ | |||
end |
|||
end |
|||
⚫ | |||
end |
end |
||