Module:遗迹信息框

来自缺氧 Wiki
跳转到导航 跳转到搜索

可在Module:遗迹信息框/doc创建此模块的帮助文档

-- Module:遗迹信息框
local p = {}
local getArgs = require("Dev:Arguments").getArgs
local fstr = mw.ustring.format
local po = require([[Module:Po]]).po
local i18nb = require([[Module:I18n]]).loadMessages([[Module:I18n/Buildings]])
local i18nc = require([[Module:I18n]]).loadMessages([[Module:I18n/Codex]])
local i18ncr = require([[Module:I18n]]).loadMessages([[Module:I18n/Creatures]])
local utils = require("Module:Utils")
local k0 = utils.K0
local infobox = require([[Module:信息框/遗迹]])
local fData = mw.loadData([[Module:Data/GravitasEntities]])
local exception = {}

local function isMatchMeteorId(fData, id)
    if fData.id:upper() == id:upper() then
        return true
    elseif fData.clusterMapMeteorShowerID ~= nil then
        if ("ClusterMapMeteorShower_" .. id):upper() == fData.clusterMapMeteorShowerID:upper() then
            return true
        end
    elseif fData.id:upper() == ("MeteorShower" .. id .. "Event"):upper() then
        return true
    elseif fData.id:upper() == ("Cluster" .. id .. "Shower"):upper() then
        return true
    end
    return false
end

function p._main(itemData, itemCode)
    local out = {}
    local pageCats = {}

    out["ID"] = fstr("<code>%s</code>", itemData.id)
    out["名称"] = po(itemData.Name)
    out["图片"] = fstr("%s.png", out["名称"])
    out["图片说明"] = po(itemCode:sub(1, -6) .. ".DESC")

    if itemData.kBoxCollider2D ~= nil then
        out["宽度"] = itemData.kBoxCollider2D.x
        out["高度"] = itemData.kBoxCollider2D.y
    end
    if itemData.decorProvider ~= nil then
        out["装饰值"] = itemData.decorProvider.baseDecor
        out["装饰半径"] = itemData.decorProvider.baseRadius
    end
    if itemData.storage ~= nil then
        if itemData.storage.showInUI == true then
            out['机械臂运送'] = itemData.storage.useGunForDelivery == true and "✔" or "✖"
            if itemData.storage.storageFilters ~= nil and #itemData.storage.storageFilters > 0 then
                out['允许清空库存'] = itemData.storage.allowItemRemoval == true and "✔" or "✖"
                out['库存容量'] = utils.kg2str(itemData.storage.capacityKg)
                out['库存'] = {}
                for _, tag in ipairs(itemData.storage.storageFilters) do
                    local name = utils.getEntry(tag)
                    if name ~= nil then
                        table.insert(out['库存'], fstr("{{物品|%s}}}", name))
                    end
                end
            end
        else
            out['机械臂运送'] = itemData.storage.useGunForDelivery == true and "✔" or nil
        end
    end
    if itemData.primaryElement ~= nil then
        out["元素"] = fstr("{{物品|%s}}", utils.getEntry(itemData.primaryElement.Name))
        out["质量"] = utils.kg2str(itemData.primaryElement.Mass)
        out["初始温度"] = utils.float2str(itemData.primaryElement.InternalTemperature + k0) .. " °C"
    end
    if itemData.dlcIds ~= nil then
        local icons = utils.dlcIcons(itemData.dlcIds)
        out['可用DLC'] = icons ~= nil and #icons > 0 and table.concat(icons, " ") or nil
    end

    table.insert(pageCats, "[[Category:遗迹]]")
    return out, pageCats
end

-- test by: = p.main(require("Module:debug").frame({},{debug=1, "CryoTank"}))
-- test by: = p.main(require("Module:debug").frame({},{debug=1, "FossilBitsLarge"}))
-- test by: = p.main(require("Module:debug").frame({},{debug=1, "PinkRock"}))
-- test by: = p.main(require("Module:debug").frame({},{debug=1, pagename="低温箱3000"}))
-- test by: = p.main(require("Module:debug").frame({},{debug=1, pagename="地热热泵"}))
-- test by: = p.main(require("Module:debug").frame({},{debug=1, pagename="化石碎片"}))
-- test by: = p.main(require("Module:debug").frame({},{debug=1, pagename="流明石英"}))
function p.main(frame)
    local args = getArgs(frame)
    local gravitas = {}

    if args ~= nil and args[1] ~= nil then
        for _, entityId in ipairs(args) do
            local gravity = fData[entityId]
            if gravity ~= nil then
                table.insert(gravitas, {
                    code = gravity.Name,
                    data = gravity
                })
            end
        end
    else
        local gravityCode = i18nb:msgRev({
            key = args.pagename,
            args = {
                prefix = "STRINGS.BUILDINGS.PREFABS."
            }
        } or "")
        if utils.isDefaultT(args.pagename, gravityCode) then
            gravityCode = i18nc:msgRev({
                key = args.pagename,
                args = {
                    prefix = "STRINGS.CODEX.STORY_TRAITS."
                }
            } or "")
        end
        if utils.isDefaultT(args.pagename, gravityCode) then
            gravityCode = i18ncr:msgRev({
                key = args.pagename,
                args = {
                    prefix = "STRINGS.CREATURES."
                }
            } or "")
        end
        if gravityCode == nil then
            error(fstr("找不到遗迹 '%s',请使用参数1或检查 [[%s]]。", args.pagename,
                "Module:Data/GravitasEntities"))
        else
            for k, v in pairs(fData) do
                if v.Name == gravityCode then
                    table.insert(gravitas, {
                        code = v.Name,
                        data = v
                    })
                    break
                end
            end
        end
    end

    if #gravitas <= 0 then
        error(fstr("找不到遗迹 '%s',请使用参数1或检查 [[%s]]。", args.pagename,
            "Module:Data/GravitasEntities"))
    end

    -- 找到所有流量雨id
    local infos = {}
    local pageCatsSet = {}
    for _, gravity in ipairs(gravitas) do
        local curr, cats = p._main(gravity.data, gravity.code)
        table.insert(infos, {
            label = curr['名称'],
            data = curr
        })
        for _, cat in ipairs(cats) do
            pageCatsSet[cat] = true
        end
    end

    -- 分类
    local pageCats = {}
    if not (args.namespace or args.nocat) then
        for cat, _ in pairs(pageCatsSet) do
            table.insert(pageCats, cat)
        end
        table.sort(pageCats)
    end

    if args.debug then
        mw.logObject(infos, "infos")
        mw.logObject(pageCats, "pageCats")
    end
    local infoboxTitle = args.pagename
    return infobox.main(infoboxTitle, infos) .. table.concat(pageCats, "")
end
return p