Documentation for this module may be created at Module:Scavenge/doc
local p = {}
function p.gui( f )
local function getTemplateArgs( str )
local result = {}
for v in mw.text.gsplit(str, "+", true) do
local pair = mw.text.split(v, "=", true)
if table.getn(pair) == 2 then
result[pair[1]] = pair[2]
else
table.insert(result, v)
end
end
return result
end
local args = f.args or f
if f == mw.getCurrentFrame() and args[1] == nil then
args = f:getParent().args
else
f = mw.getCurrentFrame()
end
-- mw.logObject(args)
local tool = args[1] or ''
local block = args[2] or ''
local output = {}
local total = 0
-- Iterate through the Scavenge inventory slots and gathers valid cells.
-- Format should be a Grid Cell template with the weight = number
for i=3,38 do
local drop = {}
if args[i] ~= nil then
drop.cell = getTemplateArgs(args[i])
drop.weight = tonumber(drop.cell.weight)
-- mw.logObject(drop)
if drop.cell ~= nil and drop.weight ~= nil then
table.insert(output, drop)
total = total + drop.weight
end
end
end
local result = {tool, block}
for i,drop in ipairs(output) do
local cell = drop.cell
cell.weight = nil
cell.desc = "&7" .. (drop.weight/total*100) .. "% Chance"
local title = cell[1]
if not (cell[1] == "O" or cell[1] == "Gc") then
title = "Gc"
else
-- Note: Slow operation but table is small enough
table.remove(cell, 1) -- Shift down args to support the templates
end
local gc = f:expandTemplate{title = title, args = cell}
table.insert(result, gc)
end
local grid = f:expandTemplate{title = "Cg/Scavenge", args = result}
-- mw.log(grid)
return grid
end
return p