Module:属性信息框

来自缺氧 Wiki
跳转到导航 跳转到搜索

用于模板:Template:属性信息框



-- Module:属性信息框
local p = {}
local fstr = mw.ustring.format -- shortcut for formattig a string
local po = require([[Module:Po]]).po
local getArgs = require('Dev:Arguments').getArgs

-- test by: mw.logObject(p._getList("*123\n*456\n"))
function p._getList(s)
    if s == nil then return {} end
    out = {}
    local xs = mw.text.split(s, "\n+")
    for _, e in ipairs(xs) do
        local m = mw.ustring.match(e, "^%s*%*%s*(.+)%s*$")
        if m ~= nil then table.insert(out, m) end
    end
    return out
end

-- test by: = p.name({"Construction"})
function p.name(args)
    args = getArgs(args)
    local key = args[1]
    return po(fstr("STRINGS.DUPLICANTS.ATTRIBUTES.%s.NAME", key:upper()))
end

-- test by: = p.desc({"Construction"})
function p.desc(args)
    args = getArgs(args)
    local key = args[1]
    local desc = po(fstr("STRINGS.DUPLICANTS.ATTRIBUTES.%s.DESC", key:upper()))
    return fstr("'''%s'''%s", p.name(args), desc)
end

-- test by: = p.effects({"*123\n*456\n"})
function p.effects(args)
    args = getArgs(args)
    local es = p._getList(args[1])
    local out = {}
    local suffix = "<br>"
    for _, e in ipairs(es) do
        table.insert(out, e .. "(每点属性)" .. suffix)
    end
    return table.concat(out, "")
end

-- test by: = p.trained({"* 进行[[建造]][[工作]]。"})
function p.trained(args)
    args = getArgs(args)
    local out = {}
    local ts = p._getList(args[1])
    local suffix = "<br>"

    for _, t in ipairs(ts) do table.insert(out, t .. suffix) end
    return table.concat(out, "")
end

-- test by: = p.skills({"* 改良建造 I, +2\n* 改良建造 II, +2\n* 改良建造 III, +2\n* 应用科学研究, +2"})
function p.skills(args)
    args = getArgs(args)
    local out = {}
    local ss = p._getList(args[1])
    local suffix = "<br>"

    for _, s in ipairs(ss) do
        local skill = mw.text.split(s, ",%s*")
        local name = skill[1]
        local bonus = skill[2]
        local nameWithHat = mw.title.new(fstr("File:%s帽子.png", name)).exists
        local hatImg = nameWithHat and (name .. "帽子") or name
        local expandedImg = mw.getCurrentFrame():expandTemplate{
            title = "物品",
            args = {fstr("技能/%s", name), name, img = hatImg, notext = 1}
        }

        table.insert(out,
                     fstr(
                         "<span style='font-size:2em;'>%s</span> [[%s]](%s)%s",
                         expandedImg, name, bonus, suffix))
    end
    return table.concat(out, "")
end

-- test by: = p.traits({"\n* 早起鸟, -5\n* 夜猫子, -5"})
function p.traits(args)
    args = getArgs(args)
    local out = {}
    local ts = p._getList(args[1])
    local suffix = "<br>"

    for _, t in ipairs(ts) do
        local trait = mw.text.split(t, ",%s*")
        local name = trait[1]
        local bonus = trait[2]
        table.insert(out, fstr("%s(%s)%s", name, bonus, suffix))
    end
    return table.concat(out, "")
end

-- test by: = p.other({"\n* 中暑, -5\n* 低温症, -5"})
function p.other(args)
    args = getArgs(args)
    local out = {}
    local os = p._getList(args[1])
    local suffix = "<br>"

    for _, o in ipairs(os) do
        local trait = mw.text.split(o, ",%s*")
        local name = trait[1]
        local bonus = trait[2]
        table.insert(out, fstr("%s(%s)%s", name, bonus, suffix))
    end
    return table.concat(out, "")
end

return p