缺氧 wiki 编辑团队提示:注册账号并登录后体验更佳,且可通过参数设置定制优化您的浏览体验!

该站点为镜像站点,如果你想帮助这个由玩家志愿编辑的 wiki 站点,请前往原站点参与编辑,
同时欢迎加入编辑讨论群 851803695 与其他编辑者一起参与建设!

全站通知:

模块:表格/配方

来自缺氧WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块的文档可以在模块:表格/配方/doc创建

-- Module:表格/配方
local p = {}
local utils = require([[Module:Utils]])
local getEntry = utils.getEntry
local fstr = mw.ustring.format -- shortcut for formattig a string
local po = require([[Module:Po]]).po
local getArgs = require('Module:Dev/Arguments').getArgs
local tb = require([[Module:表格]])

local i18ndb = require([[Module:I18n]]).loadMessages([[Module:i18n/Buildings]])
local buData = mw.loadData([[Module:Data/Buildings]])

local function isDefaultT(s, t) return ("<" .. s .. ">") == t end

-- return {buCode}
local function getBuCode(pagename)
    local buCode = i18ndb:msgRev({
        key = pagename,
        args = {
            prefix = "STRINGS.BUILDINGS.PREFABS."
        }
    } or "")
    if buCode == nil or isDefaultT(pagename, buCode) then
        error(fstr("找不到建筑物 '%s',请使用参数1或检查 [[%s]]。",pagename, [[Module:Data/Buildings]]))
    else
        return buCode
    end
    return nil
end

-- test by : = p.main(require("Module:debug").frame({},{debug=1, pagename="燃气灶"}))
function p.main(frame)
    local args = getArgs(frame)
    local builds = {}
    local pagename = nil
    if args.debug then mw.logObject(args, "args") end
    if args.pagename then pagename = args.pagename end
	local buCode = getBuCode(pagename)
    local buId = buCode:match("([%u%d]+).NAME$")
    table.insert(builds, {
        id = buId,
        code = buCode
    })
	
    -- 组装信息
    local datas = {}
    for _, building in ipairs(builds) do
        for k, v in pairs(buData) do
            if k:upper() == building.id:upper() then
                if v.recipes then
                	for _, recipe in ipairs(v.recipes) do
                		local infos = {}
                		local timeSlice = fstr(" %s 秒", recipe.workTime)
                		local inputs = {}
                		local outputs = {}
                		local rec = {}
						for _, input in ipairs(recipe.input) do
							table.insert(inputs, fstr("{{物品|%s}} %s", getEntry(input.element), utils.kg2str(input.amount, 2)))
						end
						for _, output in ipairs(recipe.output) do
							table.insert(outputs, fstr("{{物品|%s}} %s", getEntry(output.element),  utils.kg2str(output.amount, 2)))
							table.insert(rec, fstr("{{图|40|%s}}<br/> [[%s]]", getEntry(output.element), getEntry(output.element)))
						end
						if #rec > 0 then table.insert(infos, rec[1]) end
						table.insert(infos,timeSlice)
						if #inputs > 0 then table.insert(infos, table.concat(inputs, " <br/>")) end
						if #outputs > 0 then table.insert(infos, table.concat(outputs, " <br/>")) end
						table.insert(datas,infos)
					end
                end
            end
        end
    end
    local out = {}
    for _, v in ipairs(datas) do
		if args.input then
			if  mw.ustring.match(v[3],args.input) then
				table.insert(out,v)
				break
			end
		elseif args.result then
			if mw.ustring.match(v[4],args.result) then
				table.insert(out,v)
				break
			end
		elseif args[1] then
			if  mw.ustring.match(v[4],args[1]) then
				table.insert(out,v)
			elseif mw.ustring.match(v[3],args[1]) then
				table.insert(out,v)
			end
		else table.insert(out,v) end
	end
    
    if args.debug then mw.logObject(out, "out") end
	
    return mw.ustring.sub(tb.table(out, args),4)
end

return p