Module:Mmgtable2: Difference between revisions

From Roat Pkz
Jump to navigation Jump to search
No edit summary
No edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}


local MAX_INPUTS = 10
local function getItemValue(name)
local MAX_OUTPUTS = 10
     -- Use mw.loadData if needed, or fetch values another way
 
    return tonumber(mw.ext.VariablesLua.var{name}) or 0
local function calculateTotal(args, prefix, max)
     local total = 0
    for i = 1, max do
        local num = tonumber(args[prefix .. i .. 'num']) or 0
        local value = tonumber(args[prefix .. i .. 'value']) or 0
        total = total + (num * value)
    end
    return total
end
end


function p.profit(frame)
function p.main(frame)
     local args = frame:getParent().args
     local args = frame:getParent().args
     local frameArgs = frame.args
     local totalInput = 0
    local totalOutput = 0


     -- Merge frame.args into args in case of direct #invoke
     -- Loop inputs
     for k, v in pairs(frameArgs) do
     for i = 1, 20 do
         if v ~= '' then
        local name = args["Input" .. i]
             args[k] = v
        local num = tonumber(args["Input" .. i .. "num"]) or 0
        local isPerHour = args["Input" .. i .. "isph"] == "y"
         if name then
            local value = getItemValue(name)
            if isPerHour then
                num = num / (tonumber(args.kph) or 1)
            end
             totalInput = totalInput + (value * num)
         end
         end
     end
     end


     local inputs = calculateTotal(args, 'Input', MAX_INPUTS)
     -- Loop outputs
    local outputs = calculateTotal(args, 'Output', MAX_OUTPUTS)
    for i = 1, 30 do
        local name = args["Output" .. i]
        local num = tonumber(args["Output" .. i .. "num"]) or 0
        if name then
            local value = getItemValue(name)
            totalOutput = totalOutput + (value * num)
        end
    end


     local profit = outputs - inputs
     local profit = totalOutput - totalInput
     return tostring(profit)
     return math.floor(profit + 0.5) -- Rounded profit
end
end


return p
return p

Latest revision as of 11:01, 5 May 2025

Documentation for this module may be created at Module:Mmgtable2/doc

local p = {}

local function getItemValue(name)
    -- Use mw.loadData if needed, or fetch values another way
    return tonumber(mw.ext.VariablesLua.var{name}) or 0
end

function p.main(frame)
    local args = frame:getParent().args
    local totalInput = 0
    local totalOutput = 0

    -- Loop inputs
    for i = 1, 20 do
        local name = args["Input" .. i]
        local num = tonumber(args["Input" .. i .. "num"]) or 0
        local isPerHour = args["Input" .. i .. "isph"] == "y"
        if name then
            local value = getItemValue(name)
            if isPerHour then
                num = num / (tonumber(args.kph) or 1)
            end
            totalInput = totalInput + (value * num)
        end
    end

    -- Loop outputs
    for i = 1, 30 do
        local name = args["Output" .. i]
        local num = tonumber(args["Output" .. i .. "num"]) or 0
        if name then
            local value = getItemValue(name)
            totalOutput = totalOutput + (value * num)
        end
    end

    local profit = totalOutput - totalInput
    return math.floor(profit + 0.5) -- Rounded profit
end

return p