米斯特利亚Wiki正在建设中,本WIKI编辑权限开放!
            
            全站通知:
            
            
        
模块:Museum wings
                  
                  
                  刷
                  
                     
                               
                               历
                            
                  
                    
                      
                        
                        编
                      
                    
                
            
            
            
            
            
            跳到导航
            跳到搜索
            
            
                
            
            
            
            
        
    此模块的文档可以在模块:Museum wings/doc创建
local Items = require('模块:Items')
local data = require('模块:Museum_wings/Data')
local p = {}
-- 缓存:构建 itemId -> set 对象的索引,便于快速查找
local setByItem = {}
-- 缓存:构建套装名称 -> set 对象的索引,便于快速查找
local setByName = {}
local initialized = false
-- 初始化映射表
local function initMaps()
    if initialized then
        return
    end -- 已初始化则直接返回
    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
    
    initialized = true
end
function p.test()
    initMaps()
    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 = p._renderMuseumItemList(setTable.items, tmpSubTitle)
    local tmpArgs = {}
    tmpArgs.sets = itemsRender
    tmpArgs.name = setTable.name
    tmpArgs.desc = setTable.description
    local frame = mw.getCurrentFrame()
    return frame:expandTemplate{
        title = tmpMainTitle,
        args = tmpArgs
    }
end
function p._renderMuseumItem(itemId,tmpName)
    local args = {}
    args.name = Items._name(itemId)
    args.icon = Items._icon(itemId)
    args.desc = Items._desc(itemId)
    args.source = Items._source(itemId)
    args.name_en = Items._name_en(itemId)
    
    local moduleName = tmpName or "物品"
    local frame = mw.getCurrentFrame()
    return frame:expandTemplate{
        title = moduleName,
        args = args
    }
end
function p._renderMuseumItemList(itemList,tmpName)
    local moduleName = tmpName or "物品"
    local itemRender = ""
    for _, itemId in pairs(itemList) do
        itemRender = itemRender .. p._renderMuseumItem(itemId,moduleName)
    end
    return itemRender
end
-- 根据传入的 item(内部ID或中文名)返回其所属的捐献系列表
function p._findMuseumSetByItem(itemId)
    initMaps() -- 确保映射表已初始化
    
    local resolvedId = Items._id(itemId)
    if not resolvedId or resolvedId == '' then
        return nil
    end
    return setByItem[resolvedId] or nil
end
-- 根据传入的 item(内部ID或中文名)查找其所属的捐献系列表,最终渲染使用模板:文物系列
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
    local mainTitleName = frame.args[2] or "文物系列"
    local subTitleName = frame.args[3] or "物品"
    local render = p._renderSet(set, mainTitleName, subTitleName)
    
    return render
end
function p._findMuseumSetByName(setName)
    initMaps() -- 确保映射表已初始化
    
    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 set = p._findMuseumSetByName(setName)
    if not set or set == '' then
        return nil
    end
    
    local mainTitleName = frame.args[2] or "文物系列"
    local subTitleName = frame.args[3] or "物品"
    local render = p._renderSet(set, mainTitleName, subTitleName)
    return render
end
--[[
local frame = mw.getCurrentFrame()
frame.args = {
    "卡尔多西亚文物系列",
    "博物馆/表",
    "博物馆/行"
}
local r = p.findMuseumSetByName(frame)
mw.logObject(r)
]]--
return p
                
                    沪公网安备 31011002002714 号