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 |
||
(31 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
local p = {} |
local p = {} |
||
function p. |
function p._main(frame) |
||
local args = frame.args |
local args = frame:getParent().args |
||
local mw = require('mw') |
local mw = require('mw') |
||
local currency = require('Module:Currency').parse |
|||
-- get the buy price from the query result |
|||
local function getCost(queryResult) |
|||
if type(queryResult) == "table" and queryResult[1]['Shop buy price'] then |
|||
return tonumber(queryResult[1]['Shop buy price']) or 0 |
|||
end |
|||
return 0 |
|||
end |
|||
-- Get buy prices of raw materials |
|||
local rawmat1cost = args.rawmat1 and getCost(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 getCost(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 getCost(mw.smw.ask('[[:+]][[Sold item::' .. args.rawmat3 .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1')) or 0 |
|||
-- Calculate total cost |
|||
local totalCost = (rawmat1cost * (tonumber(args.rawmat1qty) or 1)) + |
|||
(rawmat2cost * (tonumber(args.rawmat2qty) or 1)) + |
|||
(rawmat3cost * (tonumber(args.rawmat3qty) or 1)) |
|||
-- Calculate output cost total and profit |
|||
local output1cost = args.output1 and mw.smw.ask('[[:+]][[' .. args.output1 .. ']]|?Value|limit=1') |
|||
local output1costTotal = output1cost[1]['Value'] * (tonumber(args.output1qty) or 1) |
|||
local profit = output1costTotal - totalCost |
|||
-- Recipe Table Head |
|||
local out = {} |
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 |
|||
-- Headers |
|||
table.insert(out, '! colspan="2" | Raw Ingredient') |
|||
table.insert(out, '! Quantity') |
|||
table.insert(out, '! Cost') |
|||
table.insert(out, '|-') |
|||
-- Values |
|||
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;" | ' .. currency(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;" | ' .. currency(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;" | ' .. currency(rawmat3cost)) |
|||
table.insert(out, '|-') |
|||
end |
|||
-- Add total raw cost |
|||
table.insert(out, '! colspan="3" | Total Raw cost') |
|||
table.insert(out, '| style="text-align: right;" | ' .. currency(totalCost)) |
|||
table.insert(out, '|-') |
|||
-- Add Intermediate steps if required |
|||
-- Headers |
|||
table.insert(out, '! colspan="2" | Intermediate Ingredient') |
|||
table.insert(out, '! Quantity') |
|||
table.insert(out, '! Facility') |
|||
table.insert(out, '|-') |
|||
-- Values |
|||
if args.preparedmat1 then |
|||
table.insert(out, '| [[File:' .. args.preparedmat1 .. '.png|30px]]') |
|||
table.insert(out, '| [[' .. args.preparedmat1 .. ']]') |
|||
table.insert(out, '| style="text-align: right;" | ' .. (args.preparedmat1qty or 1)) |
|||
table.insert(out, '| style="text-align: right;" | [[File:' .. args.preparedmat1fac .. '.png|30px]] [[' .. args.preparedmat1fac .. ']]') |
|||
table.insert(out, '|-') |
|||
end |
|||
if args.preparedmat2 then |
|||
table.insert(out, '| [[File:' .. args.preparedmat2 .. '.png|30px]]') |
|||
table.insert(out, '| [[' .. args.preparedmat2 .. ']]') |
|||
table.insert(out, '| style="text-align: right;" | ' .. (args.preparedmat2qty or 1)) |
|||
table.insert(out, '| style="text-align: right;" | [[File:' .. args.preparedmat2fac .. '.png|30px]] [[' .. args.preparedmat2fac .. ']]') |
|||
table.insert(out, '|-') |
|||
end |
|||
if args.preparedmat3 then |
|||
table.insert(out, '| [[File:' .. args.preparedmat3 .. '.png|30px]]') |
|||
table.insert(out, '| [[' .. args.preparedmat3 .. ']]') |
|||
table.insert(out, '| style="text-align: right;" | ' .. (args.preparedmat3qty or 1)) |
|||
table.insert(out, '| style="text-align: right;" | [[File:' .. args.preparedmat3fac .. '.png|30px]] [[' .. args.preparedmat3fac .. ']]') |
|||
table.insert(out, '|-') |
|||
end |
|||
-- Add output data |
|||
-- Headers |
|||
table.insert(out, '! colspan="2" | Output') |
|||
table.insert(out, '! Quantity') |
|||
table.insert(out, '! Value') |
|||
table.insert(out, '|-') |
|||
-- Values |
|||
table.insert(out, '| [[File:' .. args.output1 .. '.png|30px]]') |
|||
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;" | ' .. currency(output1costTotal)) |
|||
table.insert(out, '|-') |
|||
-- Add profit data |
|||
local debugMessage = 'Debug Info:<br>' .. |
|||
table.insert(out, '! colspan="3" | Profit') |
|||
'facility: ' .. (args.facility) .. '<br>' .. |
|||
table.insert(out, '| style="text-align: right;" | ' .. currency(profit)) |
|||
'profession: ' .. (args.profession) .. '<br>' .. |
|||
table.insert(out, '|}') |
|||
'level: ' .. (args.level) .. '<br>' .. |
|||
'exp: ' .. (args.exp) .. '<br>' .. |
|||
'rawmat1: ' .. (args.rawmat1) .. '<br>' .. |
|||
'rawmat1qty: ' .. (args.rawmat1qty) .. '<br>' .. |
|||
'rawmat2: ' .. (args.rawmat2) .. '<br>' .. |
|||
'rawmat2qty: ' .. (args.rawmat3qty) .. '<br>' .. |
|||
'rawmat3: ' .. (args.rawmat3) .. '<br>' .. |
|||
'rawmat3qty: ' .. (args.rawmat3qty) .. '<br>' .. |
|||
'preparedmat1: ' .. (args.preparedmat1) .. '<br>' .. |
|||
'preparedmat1qty: ' .. (args.preparedmat1qty) .. '<br>' .. |
|||
'preparedmat1fac: ' .. (args.preparedmat1fac) .. '<br>' .. |
|||
'output1: ' .. (args.output1) .. '<br>' .. |
|||
'output1qty: ' .. (args.output1qty) .. '<br>' .. |
|||
table.insert(out, debugMessage) |
|||
return table.concat(out, '\n') |
return table.concat(out, '\n') |
Latest revision as of 14:51, 15 November 2024
Documentation for this module may be created at Module:Sandbox/User:The Gaffer/Modules/Infobox Recipe/doc
local p = {}
function p._main(frame)
local args = frame:getParent().args
local mw = require('mw')
local currency = require('Module:Currency').parse
-- get the buy price from the query result
local function getCost(queryResult)
if type(queryResult) == "table" and queryResult[1]['Shop buy price'] then
return tonumber(queryResult[1]['Shop buy price']) or 0
end
return 0
end
-- Get buy prices of raw materials
local rawmat1cost = args.rawmat1 and getCost(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 getCost(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 getCost(mw.smw.ask('[[:+]][[Sold item::' .. args.rawmat3 .. ']]|?Shop buy price|sort=Shop buy price|order=asc|limit=1')) or 0
-- Calculate total cost
local totalCost = (rawmat1cost * (tonumber(args.rawmat1qty) or 1)) +
(rawmat2cost * (tonumber(args.rawmat2qty) or 1)) +
(rawmat3cost * (tonumber(args.rawmat3qty) or 1))
-- Calculate output cost total and profit
local output1cost = args.output1 and mw.smw.ask('[[:+]][[' .. args.output1 .. ']]|?Value|limit=1')
local output1costTotal = output1cost[1]['Value'] * (tonumber(args.output1qty) or 1)
local profit = output1costTotal - totalCost
-- 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
-- Headers
table.insert(out, '! colspan="2" | Raw Ingredient')
table.insert(out, '! Quantity')
table.insert(out, '! Cost')
table.insert(out, '|-')
-- Values
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;" | ' .. currency(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;" | ' .. currency(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;" | ' .. currency(rawmat3cost))
table.insert(out, '|-')
end
-- Add total raw cost
table.insert(out, '! colspan="3" | Total Raw cost')
table.insert(out, '| style="text-align: right;" | ' .. currency(totalCost))
table.insert(out, '|-')
-- Add Intermediate steps if required
-- Headers
table.insert(out, '! colspan="2" | Intermediate Ingredient')
table.insert(out, '! Quantity')
table.insert(out, '! Facility')
table.insert(out, '|-')
-- Values
if args.preparedmat1 then
table.insert(out, '| [[File:' .. args.preparedmat1 .. '.png|30px]]')
table.insert(out, '| [[' .. args.preparedmat1 .. ']]')
table.insert(out, '| style="text-align: right;" | ' .. (args.preparedmat1qty or 1))
table.insert(out, '| style="text-align: right;" | [[File:' .. args.preparedmat1fac .. '.png|30px]] [[' .. args.preparedmat1fac .. ']]')
table.insert(out, '|-')
end
if args.preparedmat2 then
table.insert(out, '| [[File:' .. args.preparedmat2 .. '.png|30px]]')
table.insert(out, '| [[' .. args.preparedmat2 .. ']]')
table.insert(out, '| style="text-align: right;" | ' .. (args.preparedmat2qty or 1))
table.insert(out, '| style="text-align: right;" | [[File:' .. args.preparedmat2fac .. '.png|30px]] [[' .. args.preparedmat2fac .. ']]')
table.insert(out, '|-')
end
if args.preparedmat3 then
table.insert(out, '| [[File:' .. args.preparedmat3 .. '.png|30px]]')
table.insert(out, '| [[' .. args.preparedmat3 .. ']]')
table.insert(out, '| style="text-align: right;" | ' .. (args.preparedmat3qty or 1))
table.insert(out, '| style="text-align: right;" | [[File:' .. args.preparedmat3fac .. '.png|30px]] [[' .. args.preparedmat3fac .. ']]')
table.insert(out, '|-')
end
-- Add output data
-- Headers
table.insert(out, '! colspan="2" | Output')
table.insert(out, '! Quantity')
table.insert(out, '! Value')
table.insert(out, '|-')
-- Values
table.insert(out, '| [[File:' .. args.output1 .. '.png|30px]]')
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;" | ' .. currency(output1costTotal))
table.insert(out, '|-')
-- Add profit data
table.insert(out, '! colspan="3" | Profit')
table.insert(out, '| style="text-align: right;" | ' .. currency(profit))
table.insert(out, '|}')
return table.concat(out, '\n')
end
return p