Module:Sandbox/User:The Gaffer/Modules/Infobox Recipe: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
The Gaffer (talk | contribs) No edit summary |
The Gaffer (talk | contribs) No edit summary |
||
Line 2: | Line 2: | ||
local p = {} |
local p = {} |
||
function p. |
function p.main(frame) |
||
local args = frame.args |
local args = frame.args |
||
local mw = require('mw') |
local mw = require('mw') |
||
Line 15: | Line 15: | ||
local rawmat1cost = args.rawmat1 and mw.smw.ask('[[:+]][[Sold item::' .. args.rawmat1 .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1') or "0" |
local rawmat1cost = args.rawmat1 and mw.smw.ask('[[:+]][[Sold item::' .. args.rawmat1 .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1') or "0" |
||
mw.logObject(rawmat1cost) |
|||
local rawmat2cost = args.rawmat2 and mw.smw.ask('[[:+]][[Sold item::' .. args.rawmat2 .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1') or "0" |
local rawmat2cost = args.rawmat2 and mw.smw.ask('[[:+]][[Sold item::' .. args.rawmat2 .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1') or "0" |
||
local rawmat3cost = args.rawmat3 and mw.smw.ask('[[:+]][[Sold item::' .. args.rawmat3 .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1') or "0" |
local rawmat3cost = args.rawmat3 and mw.smw.ask('[[:+]][[Sold item::' .. args.rawmat3 .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1') or "0" |
||
Line 90: | Line 89: | ||
table.insert(out, '| style="text-align: right;" | ' .. profit) |
table.insert(out, '| style="text-align: right;" | ' .. profit) |
||
table.insert(out, '|}') |
table.insert(out, '|}') |
||
-- Add debug information to the output using mw.messageBox |
|||
local debugMessage = 'Debug Info:\n' .. |
|||
'rawmat1query: ' .. (rawmat1query or 'nil') .. '\n' .. |
|||
'rawmat1cost: ' .. tostring(rawmat1cost) .. '\n' .. |
|||
'rawmat2query: ' .. (rawmat2query or 'nil') .. '\n' .. |
|||
'rawmat2cost: ' .. tostring(rawmat2cost) .. '\n' .. |
|||
'rawmat3query: ' .. (rawmat3query or 'nil') .. '\n' .. |
|||
'rawmat3cost: ' .. tostring(rawmat3cost) .. '\n' .. |
|||
'totalCost: ' .. tostring(totalCost) .. '\n' .. |
|||
'output1query: ' .. (output1query or 'nil') .. '\n' .. |
|||
'output1cost: ' .. tostring(output1cost) .. '\n' .. |
|||
'output1costTotal: ' .. tostring(output1costTotal) .. '\n' .. |
|||
'profit: ' .. tostring(profit) |
|||
table.insert(out, frame:preprocess('{{#invoke:Message box|mbox|text=' .. debugMessage .. '}}')) |
|||
return table.concat(out, '\n') |
return table.concat(out, '\n') |
Revision as of 17:08, 14 November 2024
Documentation for this module may be created at Module:Sandbox/User:The Gaffer/Modules/Infobox Recipe/doc
-- Lua module to replicate the functionality of the Infobox Recipe template
local p = {}
function p.main(frame)
local args = frame.args
local mw = require('mw')
-- Define raw material costs based on Semantic MediaWiki queries
local function getCost(queryResult)
if type(queryResult) == "table" and queryResult[1] then
return tonumber(queryResult[1]) or 0
end
return 0
end
local rawmat1cost = args.rawmat1 and mw.smw.ask('[[:+]][[Sold item::' .. args.rawmat1 .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1') or "0"
local rawmat2cost = args.rawmat2 and mw.smw.ask('[[:+]][[Sold item::' .. args.rawmat2 .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1') or "0"
local rawmat3cost = args.rawmat3 and mw.smw.ask('[[:+]][[Sold item::' .. args.rawmat3 .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1') or "0"
-- Calculate total cost and output cost
local totalCost = (tonumber(rawmat1cost) or 0) * (tonumber(args.rawmat1qty) or 1) +
(tonumber(rawmat2cost) or 0) * (tonumber(args.rawmat2qty) or 1) +
(tonumber(rawmat3cost) or 0) * (tonumber(args.rawmat3qty) or 1)
local output1cost = args.output1 and mw.smw.ask('[[:+]][[' .. args.output1 .. ']]|?Value|limit=1') or "0"
-- Calculate output cost total and profit
local output1costTotal = (tonumber(output1cost) or 0) * (tonumber(args.output1qty) or 1)
local profit = output1costTotal - totalCost
-- Generate the output table
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" | ' .. (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, '|-')
table.insert(out, '! colspan="2" | Raw Ingredient')
table.insert(out, '! Quantity')
table.insert(out, '! Cost')
table.insert(out, '|-')
-- Add each raw material to the table
if args.rawmat1 then
table.insert(out, '| [[File:' .. args.rawmat1 .. '.png|30px]]')
table.insert(out, '| [[' .. args.rawmat1 .. ']]')
table.insert(out, '| style="text-align: right;" | ' .. (args.rawmat1qty or 1))
table.insert(out, '| style="text-align: right;" | ' .. rawmat1cost)
table.insert(out, '|-')
end
if args.rawmat2 then
table.insert(out, '| [[File:' .. args.rawmat2 .. '.png|30px]]')
table.insert(out, '| [[' .. args.rawmat2 .. ']]')
table.insert(out, '| style="text-align: right;" | ' .. (args.rawmat2qty or 1))
table.insert(out, '| style="text-align: right;" | ' .. rawmat2cost)
table.insert(out, '|-')
end
if args.rawmat3 then
table.insert(out, '| [[File:' .. args.rawmat3 .. '.png|30px]]')
table.insert(out, '| [[' .. args.rawmat3 .. ']]')
table.insert(out, '| style="text-align: right;" | ' .. (args.rawmat3qty or 1))
table.insert(out, '| style="text-align: right;" | ' .. rawmat3cost)
table.insert(out, '|-')
end
-- Add total raw cost
table.insert(out, '! colspan="3" | Total Raw cost')
table.insert(out, '| style="text-align: right;" | ' .. totalCost)
table.insert(out, '|-')
-- Add output data and profit
table.insert(out, '! colspan="2" | Output')
table.insert(out, '! Quantity')
table.insert(out, '! Value')
table.insert(out, '|-')
table.insert(out, '| ' .. (args.output1 and '[[' .. args.output1 .. ']]' or 'Unknown'))
table.insert(out, '| style="text-align: right;" | ' .. (args.output1qty or 1))
table.insert(out, '| style="text-align: right;" | ' .. output1costTotal)
table.insert(out, '|-')
table.insert(out, '! colspan="3" | Profit')
table.insert(out, '| style="text-align: right;" | ' .. profit)
table.insert(out, '|}')
-- Add debug information to the output using mw.messageBox
local debugMessage = 'Debug Info:\n' ..
'rawmat1query: ' .. (rawmat1query or 'nil') .. '\n' ..
'rawmat1cost: ' .. tostring(rawmat1cost) .. '\n' ..
'rawmat2query: ' .. (rawmat2query or 'nil') .. '\n' ..
'rawmat2cost: ' .. tostring(rawmat2cost) .. '\n' ..
'rawmat3query: ' .. (rawmat3query or 'nil') .. '\n' ..
'rawmat3cost: ' .. tostring(rawmat3cost) .. '\n' ..
'totalCost: ' .. tostring(totalCost) .. '\n' ..
'output1query: ' .. (output1query or 'nil') .. '\n' ..
'output1cost: ' .. tostring(output1cost) .. '\n' ..
'output1costTotal: ' .. tostring(output1costTotal) .. '\n' ..
'profit: ' .. tostring(profit)
table.insert(out, frame:preprocess('{{#invoke:Message box|mbox|text=' .. debugMessage .. '}}'))
return table.concat(out, '\n')
end
return p