米斯特利亚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 号