米斯特利亚Wiki正在建设中,本WIKI编辑权限开放!欢迎参与~!

全站通知:

模块:Museum wings

来自米斯特利亚WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块的文档可以在模块:Museum wings/doc创建

local data = require('模块:museum_wings/Data')
local Items = require('模块:Items')

local p = {}

-- 预展开:构建 itemId -> set 对象的索引,便于快速查找
local setByItem = {}
-- 预展开:构建套装名称 -> set 对象的索引,便于快速查找
local setByName = {}
for _, wing in pairs(data or {}) do
    local sets = wing.sets
    for _, setObj in pairs(sets) do
        -- 构建套装名到套装对象的索引
        if setObj.name then
            setByName[setObj.name] = setObj
        end

        -- 构建物品到套装的索引
        local itemList = setObj.items
        for _, itemId in pairs(itemList) do
            setByItem[itemId] = setObj
        end
    end
end

function p.test()
    mw.log("setByItem:")
    mw.logObject(setByItem)
    mw.log("setByName:")
    mw.logObject(setByName)
end

function p._renderSet(setTable, mainTitleName, subTitleName)
    local tmpMainTitle = mainTitleName or "文物系列"
    local tmpSubTitle = subTitleName or "物品"
    local itemsRender = Items._renderItemList(setTable.items, tmpSubTitle)
    local tmpArgs = {}
    tmpArgs.sets = itemsRender
    tmpArgs.name = setTable.name
    tmpArgs.desc = setTable.description
    -- mw.log("---tmgArgs---")
    -- mw.logObject(tmpArgs)

    local frame = mw.getCurrentFrame()
    return frame:expandTemplate {
        title = tmpMainTitle,
        args = tmpArgs
    }
end

-- 根据传入的 item(内部ID或中文名)返回其所属的套装表
-- 示例:传入 ancient_stone_lantern -> 返回包含 name/description/Items/name_en/description_en 的表
function p._findMuseumSetByItem(itemId)
    local resolvedId = Items._id(itemId)
    if not resolvedId or resolvedId == '' then return nil end

    return setByItem[resolvedId] or nil
end

-- 根据传入的 item(内部ID或中文名)查找其所属的套装表,最终渲染使用模板:文物系列
-- 示例:传入 ancient_stone_lantern -> 返回包含 name/description/Items/name_en/description_en 的表
function p.findMuseumSetByItem(frame)
    local item = frame and frame.args and frame.args[1]
    if not item or item == '' then return nil end

    local set = p._findMuseumSetByItem(item)
    if not set or set == '' then return nil end
	
	-- mw.log("----set----")
	-- mw.logObject(set)
	
    local render = p._renderSet(set)
    return render
end
-- local frame = mw.getCurrentFrame()
-- frame.args = {"aldarian_war_banner"}
-- local r = p.findMuseumSetByItem(frame)

function p._findMuseumSetByName(setName)
    if not setName or setName == '' then return nil end
    return setByName[setName] or nil
end

function p.findMuseumSetByName(frame)
    local setName = frame.args[1]
    if not setName or setName == '' then return nil end

    local mainTitleName = frame.args[2] or "文物系列"
    local subTitleName = frame.args[3] or "物品"

    local set = p._findMuseumSetByName(setName, mainTitleName, subTitleName)
    if not set or set == '' then return nil end

    local render = p._renderSet(set)
    return render
end

--mw.logObject(p.getMuseumSet({args={"alda_bronze_sword"}}))
--p.renderSet({args={"alda_bronze_sword"}})

return p