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

模块:Items

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

[ 创建 | 刷新 ]文档页面
当前模块文档缺失,需要扩充。
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.getArg(input)
    if not text then return "" end
    text = text:lower():gsub("_", " ")
    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.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.getArg(input)
    if not text then return "" end
    local text = text:lower():gsub("_", " ")
    local tmp = overrides.desc[text]
    if tmp then return tmp end
    if zh.descByName[text] then
        return zh.descByName[text]
    end
    local id = en.idByName[text]
    if id then
        local tmp = zh.nameById[id]
        if tmp and zh.descByName[tmp] then
            return zh.descByName[tmp]
        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 = '' -- reserved placeholder
        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()
    
    if itemTypeLower == "recipe" or itemTypeLower == "食谱" or itemTypeLower == "配方" then
        return "一个用于制作" .. itemName .. "的配方"
    end
    
    if itemTypeLower == "blueprint" or itemTypeLower == "图纸" then
        return "用于制造" .. itemName .. "的设计图"
    end
    
    return p.getDescription(itemType)
end

return p