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

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

全站通知:

模块:生态导航

来自缺氧WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
-- Module:生态导航
-- 注意:代码中的 subworld (sw) 才是生态,而 biome 基本指生态所处自然环境(主要是自然砖块元素表)
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 i18ndw = require([[Module:I18n]]).loadMessages([[Module:i18n/Worlds]])
local subworldsDataBASE = mw.loadData([[Module:Data/Worldgen/Subworlds]])
local subworldsDataDLC1 = mw.loadData([[Module:Data/Worldgen/Subworlds/Expansion1]])
local subworldsDataDLC2 = mw.loadData([[Module:Data/Worldgen/Subworlds/Dlc2]])

local function setWorldTable(swTable, subworlds, subworldId)
    if not utils.endswith(subworldId, ".yaml") then
        local sCode = "STRINGS.SUBWORLDS." .. subworldId:upper() .. ".NAME"
        local name = po(sCode)
        if utils.isDefaultT(sCode, name) then
            for _, sData in pairs(subworlds) do
                local zoneType = "STRINGS.SUBWORLDS." .. sData.zoneType:upper() .. ".NAME"
                local zoneTypeName = po(zoneType)
                if utils.isDefaultT(zoneType, zoneTypeName) then
                    swTable[zoneTypeName] = true
                end
            end
        else
            swTable[name] = true
        end
    end
end

function p._main()
    local out = {"<span>生态</span>"}
    out.collapse = "no"

    local swNames = {}
    for subworldId, subworlds in pairs(subworldsDataBASE) do
        setWorldTable(swNames, subworlds, subworldId)
    end
    for subworldId, subworlds in pairs(subworldsDataDLC1) do
        setWorldTable(swNames, subworlds, subworldId)
    end
    for subworldId, subworlds in pairs(subworldsDataDLC2) do
        setWorldTable(swNames, subworlds, subworldId)
    end

    -- 装载
    local sCodes = {}
    for name, _ in pairs(swNames) do
        table.insert(sCodes, name)
    end
    table.sort(sCodes)
    table.insert(out, "[[生态]]")
    table.insert(out, table.concat(utils.map(sCodes, function(name)
        return fstr("{{物品|%s}}", name .. "生态")
    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