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

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

全站通知:

模块:技术导航

来自缺氧WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
-- Module:技术导航
local p = {}
local fstr = mw.ustring.format -- shortcut for formattig a string
local getArgs = require('Module:Dev/Arguments').getArgs
local navbox = require([[Module:导航栏]])
local utils = require([[Module:Utils]])
local po = require([[Module:Po]]).po
local techDatas = mw.loadData([[Module:Data/Techs]])

function p._main()
    local out = {"<span>[[技术]]</span>"}
    out.collapse = "no"
    
    local cateTechs = {}
    for techId, tGroup in pairs(techDatas) do
        for dlc, tData in pairs(tGroup) do
            local cateogry = tData.category
            if cateogry ~= nil then
                if cateTechs[cateogry] == nil then
                    cateTechs[cateogry] = {}
                end
                table.insert(cateTechs[cateogry], tData)
            end
        end
    end

    local cateNames = {}
    for cate, _ in pairs(cateTechs) do
        table.insert(cateNames, cate)
    end
    table.sort(cateNames)

    -- 装载项目
    for _, cate in pairs(cateNames) do
        local usedTechIds = {}
        local tDatas = cateTechs[cate]
        if tDatas ~= nil then
            local names = {}
            for _, tData in ipairs(tDatas) do
                if usedTechIds[tData.Id] == nil then
                	local techName = po("STRINGS.RESEARCH.TECHS."..tData.Id:upper()..".NAME")
                    local name = fstr("[[技术/%s|%s]]", techName, techName)
                    usedTechIds[tData.Id] = true
                    table.insert(names, name)
                end
            end
            if #names > 0 then
                table.sort(names)
                table.insert(out, po("STRINGS.RESEARCH.TREES.TITLE"..cate:upper()))
                table.insert(out, table.concat(names, " ! "))
            end
        end
    end

    return out
end

-- test by: = p.main(require("Module:debug").frame({},{debug=1}))
function p.main(frame)
    local args = getArgs(frame)
    local out = p._main()
    if args.debug then
        mw.logObject(out)
    end
    return navbox.main(out)
end

return p