打开/关闭菜单
331
1.7K
131
11.8K
星露谷物语扩展百科
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

模块:Items

来自星露谷物语扩展百科
Sizau留言 | 贡献2025年10月13日 (一) 20:05的版本

[ 创建 | 刷新 ]文档页面
当前模块文档缺失,需要扩充。
local utils = require("Module:Utils")

local zh = {
    nameById = mw.loadData("Module:Items/zh/ids/name"),
    idByName = mw.loadData("Module:Items/zh/name/ids"),
    descById = mw.loadData("Module:Items/zh/id/desc"),
    descByName = mw.loadData("Module:Items/zh/name/desc")
}

local en = {
    nameById = mw.loadData("Module:Items/en/ids/name"),
    idByName = mw.loadData("Module:Items/en/name/ids")
}

local overrides = {
    name = mw.loadData("Module:Items/overrides/name"),
    desc = mw.loadData("Module:Items/overrides/description")
}

local p = {}

function p.getEnglishName(input)
    local text = utils.normalizeKey(utils.getArg(input))
    if not text then return "" end
    if overrides.name[text] then return overrides.name[text] end
    local id = zh.idByName[text]
    return id and en.nameById[id] or ""
end

function p.getChineseName(input)
    local text = utils.normalizeKey(utils.getArg(input))
    if not text then return "" end
    local id = en.idByName[text]
    return id and zh.nameById[id] or ""
end

function p.getDescription(input)
    local text = utils.normalizeKey(utils.getArg(input))
    if not text then return "" end
    if overrides.desc[text] then return overrides.desc[text] end
    if zh.descByName[text] then return zh.descByName[text] end
    local id = en.idByName[text]
    if id then
        local chineseName = zh.nameById[id]
        if chineseName and zh.descByName[chineseName] then
            return zh.descByName[chineseName]
        end
    end
    if zh.descById[text] then return zh.descById[text] end
    return ""
end

function p.renderName(frame)
    local args = frame.args
    if frame == mw.getCurrentFrame() then
        args = require('Module:Arguments').getArgs(frame,
                                                   {wrappers = 'Template:Name'})
    end

    local inputName = args[1] or ""
    local description = args[2] or ""
    local size = args.size or "24"
    local link = args.link
    local alt = args.alt
    local class = args.class

    local imageName = inputName
    if not utils.fileExists(inputName .. ".png") then
        local englishName = p.getEnglishName(inputName)
        if englishName and englishName ~= "" and
            utils.fileExists(englishName .. ".png") then
            imageName = englishName
        else
            imageName = "Blank icon"
        end
    end

    local linkText
    if link then
        linkText = "[[" .. link .. "]]"
    elseif alt then
        linkText = "[[" .. alt .. "]]"
    else
        local chineseName = getChineseName(inputName)
        if chineseName and chineseName ~= "" then
            linkText = "[[" .. chineseName .. "]]"
        else
            linkText = "[[" .. inputName .. "]]"
        end
    end

    local cssClass = "nametemplate"
    if class == "inline" then cssClass = cssClass .. "inline" end

    local result = string.format(
                       '<span class="%s">[[File:%s.png|%spx|link=]] %s%s</span>',
                       cssClass, imageName, size, linkText,
                       description ~= "" and "(" .. description .. ")" or "")

    return result
end

function p.renderDescription(frame)
    local args = frame.args
    if frame == mw.getCurrentFrame() then
        args = require('Module:Arguments').getArgs(frame, {
            wrappers = 'Template:Description'
        })
    end

    local itemType = args[1] or ""
    local itemName = args[2] or ""

    local itemTypeLower = itemType:lower()

    local specialDescriptions = {
        recipe = "一个用于制作" .. itemName .. "的配方",
        ["食谱"] = "一个用于制作" .. itemName .. "的配方",
        ["配方"] = "一个用于制作" .. itemName .. "的配方",
        blueprint = "用于制造" .. itemName .. "的设计图",
        ["图纸"] = "用于制造" .. itemName .. "的设计图"
    }

    return specialDescriptions[itemTypeLower] or p.getDescription(itemType)
end

return p