Module:RandomItemSequence: Difference between revisions

No edit summary
No edit summary
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}
local Random = require('Module:Random')
local Random = require('Module:Random')
-- Seed once per page parse
Random.seed(os.time())


-- Fisher–Yates shuffle
-- Fisher–Yates shuffle
Line 13: Line 10:
end
end


-- render function
function p.render(frame)
function p.render(frame)
     local args = frame:getParent().args
     local args = frame:getParent().args
Line 19: Line 15:
     local tooltip = args.tooltip or ""
     local tooltip = args.tooltip or ""
     local link = args.link or ""
     local link = args.link or ""
    -- Only reseed if the editor provided a valid numeric seed
    local seed = tonumber(args.reseed)
    if seed then
        Random.seed(seed)
    end


     local items = {}
     local items = {}
     for item in string.gmatch(itemsParam, '([^;]+)') do
     for item in string.gmatch(itemsParam, '([^;]+)') do
         item = item:gsub("^%s*(.-)%s*$", "%1")
         item = item:gsub("^%s*(.-)%s*$", "%1") -- trim spaces
         table.insert(items, item)
         table.insert(items, item)
     end
     end
Line 32: Line 34:
     shuffle(items)
     shuffle(items)


     -- Generate wikitext directly instead of expandTemplate
     return frame:expandTemplate{
    local output = {}
        title = "ItemSlot",
    for _, item in ipairs(items) do
        args = {
        table.insert(output, string.format("{{ItemSlot|item=%s|tooltip=%s|link=%s}}", item, tooltip, link))
            item = table.concat(items, "; "),
    end
            tooltip = tooltip,
 
            link = link
     return table.concat(output, "\n")
        }
     }
end
end


return p
return p

Latest revision as of 19:01, 28 December 2025

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

local p = {}
local Random = require('Module:Random')

-- Fisher–Yates shuffle
local function shuffle(t)
    for i = #t, 2, -1 do
        local j = Random.random(i)
        t[i], t[j] = t[j], t[i]
    end
end

function p.render(frame)
    local args = frame:getParent().args
    local itemsParam = args.items or ""
    local tooltip = args.tooltip or ""
    local link = args.link or ""

    -- Only reseed if the editor provided a valid numeric seed
    local seed = tonumber(args.reseed)
    if seed then
        Random.seed(seed)
    end

    local items = {}
    for item in string.gmatch(itemsParam, '([^;]+)') do
        item = item:gsub("^%s*(.-)%s*$", "%1") -- trim spaces
        table.insert(items, item)
    end

    if #items == 0 then
        return ""
    end

    shuffle(items)

    return frame:expandTemplate{
        title = "ItemSlot",
        args = {
            item = table.concat(items, "; "),
            tooltip = tooltip,
            link = link
        }
    }
end

return p