Module:Sandbox/User:The Gaffer/Modules/Infobox Recipe: Difference between revisions

From Brighter Shores Wiki
Jump to navigation Jump to search
Content added Content deleted
No edit summary
No edit summary
 
(21 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}


function p.main(frame)
function p._main(frame)
local args = frame:getParent().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"')
local debugMessagearg1 = 'Debug Info:<br>' ..
table.insert(out, '! colspan="4" | Requirements')
'facility: ' .. (args.facility) .. '<br>' ..
table.insert(out, '|-')
'profession: ' .. (args.profession) .. '<br>' ..
table.insert(out, '! colspan="2" | Facility')
'level: ' .. (args.level) .. '<br>' ..
'exp: ' .. (args.exp) .. '<br>' ..
table.insert(out, '| colspan="2" | ' .. (args.facility and '[[' .. args.facility .. ']]' or 'Unknown'))
table.insert(out, '|-')
'rawmat1: ' .. (args.rawmat1) .. '<br>' ..
table.insert(out, '! colspan="2" | Profession')
'rawmat1qty: ' .. (args.rawmat1qty) .. '<br>' ..
table.insert(out, '! Level')
'rawmat2: ' .. (args.rawmat2) .. '<br>' ..
table.insert(out, '! XP')
'rawmat2qty: ' .. (args.rawmat2qty) .. '<br>' ..
table.insert(out, '|-')
'rawmat3: ' .. (args.rawmat3) .. '<br>' ..
table.insert(out, '| colspan="2" style="text-align:center;" | ' .. (args.profession and '[[' .. args.profession .. ']]' or 'Unknown'))
'rawmat3qty: ' .. (args.rawmat3qty) .. '<br>' ..
'preparedmat1: ' .. (args.preparedmat1) .. '<br>' ..
table.insert(out, '| style="text-align: center;" | ' .. (args.level or 'Unknown'))
'preparedmat1qty: ' .. (args.preparedmat1qty) .. '<br>' ..
table.insert(out, '| style="text-align: center;" | ' .. (args.exp or 'Unknown'))
table.insert(out, '|-')
'preparedmat1fac: ' .. (args.preparedmat1fac) .. '<br>' ..
'output1: ' .. (args.output1) .. '<br>' ..
-- Add raw materials
'output1qty: ' .. (args.output1qty)
-- Headers
table.insert(out, debugMessage)
table.insert(out, '! colspan="2" | Raw Ingredient')
table.insert(out, '! Quantity')
return table.concat(out, '\n')
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
end



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