模块:配队/装备
来自卡厄思梦境WIKI
此模块的文档可以在模块:配队/装备/doc创建
-- 模块:配队/装备
local p = {}
local data = mw.loadData('模块:装备/data')
-- 稀有度映射
local rarityMap = {
["蓝"] = "蓝",
["金"] = "金",
["彩"] = "彩"
}
-- 稀有度排序权重
local rarityOrder = {
["彩"] = 1,
["金"] = 2,
["蓝"] = 3
}
-- 类型排序权重
local typeOrder = {
["武器"] = 1,
["装甲"] = 2,
["戒指"] = 3
}
-- 辅助函数:格式化ID为文件名
local function formatIdToFilename(id)
if not id then
return "0000"
end
local idStr = tostring(id)
local numId = tonumber(idStr)
if numId then
return string.format("%04d", numId)
end
return idStr
end
-- 单个装备显示
function p.single(frame)
local args = frame.args
local name = args[1] or args.name
if not name or not data[name] then
return "装备不存在: " .. (name or "未指定")
end
local equip = data[name]
local artFile = string.format("relic_%s.png", formatIdToFilename(equip.id))
-- 创建装备卡片
local html = mw.html.create('div')
:cssText('position:relative;width:124px;height:124px;display:inline-block;margin:5px;')
-- 稀有度边框
html:tag('div')
:cssText('position:absolute;top:0px;left:0px')
:wikitext(string.format('[[File:Frame item rarity %s.png|124px|link=]]', equip.rarity))
-- 内边框
html:tag('div')
:cssText('position:absolute;top:7px;left:7px;width:110px;height:110px;border:1px solid #fff;border-radius: 4px')
-- 装备图片
html:tag('div')
:cssText('position:absolute;top:6px;left:6px')
:wikitext(string.format('[[File:%s|112px|link=]]', artFile))
-- 装备名称(带描边效果)
html:tag('div')
:cssText('position:absolute;bottom:6px;left:6px')
:wikitext(frame:preprocess(string.format('{{描边|黑|%s}}', equip.name or name)))
return tostring(html)
end
-- 显示指定类型的所有装备
function p.byType(frame)
local args = frame.args
local equipType = args[1] or args.type or "武器"
local html = mw.html.create('div')
:cssText('display:flex;flex-wrap:wrap;')
-- 创建装备列表并排序
local equipList = {}
for equipName, equipData in pairs(data) do
if equipData.type == equipType then
table.insert(equipList, {
name = equipName,
data = equipData,
rarityOrder = rarityOrder[equipData.rarity] or 999,
id = equipData.id or 0
})
end
end
-- 按稀有度和ID排序
table.sort(equipList, function(a, b)
if a.rarityOrder ~= b.rarityOrder then
return a.rarityOrder < b.rarityOrder
end
return a.id > b.id
end)
-- 生成装备卡片
for _, item in ipairs(equipList) do
local equipName = item.name
local equipData = item.data
local artFile = string.format("relic_%s.png", formatIdToFilename(equipData.id))
-- 创建单个装备卡片
local cardDiv = html:tag('div')
:cssText('position:relative;width:124px;height:124px;display:inline-block;margin:5px;')
-- 稀有度边框
cardDiv:tag('div')
:cssText('position:absolute;top:0px;left:0px')
:wikitext(string.format('[[File:Frame item rarity %s.png|124px|link=]]', equipData.rarity))
-- 内边框
cardDiv:tag('div')
:cssText('position:absolute;top:7px;left:7px;width:110px;height:110px;border:1px solid #fff;border-radius: 4px')
-- 装备图片
cardDiv:tag('div')
:cssText('position:absolute;top:6px;left:6px')
:wikitext(string.format('[[File:%s|112px|link=]]', artFile))
-- 装备名称(带描边效果)
cardDiv:tag('div')
:cssText('position:absolute;bottom:6px;left:6px')
:wikitext(frame:preprocess(string.format('{{描边|黑|%s}}', equipName)))
end
return tostring(html)
end
-- 显示所有装备
function p.all(frame)
local html = mw.html.create('div')
:cssText('display:flex;flex-wrap:wrap;')
-- 创建装备列表并排序
local equipList = {}
for equipName, equipData in pairs(data) do
table.insert(equipList, {
name = equipName,
data = equipData,
rarityOrder = rarityOrder[equipData.rarity] or 999,
typeOrder = typeOrder[equipData.type] or 999,
id = equipData.id or 0
})
end
-- 按稀有度、类型和ID排序
table.sort(equipList, function(a, b)
if a.rarityOrder ~= b.rarityOrder then
return a.rarityOrder < b.rarityOrder
end
if a.typeOrder ~= b.typeOrder then
return a.typeOrder < b.typeOrder
end
return a.id > b.id
end)
-- 生成装备卡片
for _, item in ipairs(equipList) do
local equipName = item.name
local equipData = item.data
local artFile = string.format("relic_%s.png", formatIdToFilename(equipData.id))
-- 创建单个装备卡片
local cardDiv = html:tag('div')
:cssText('position:relative;width:124px;height:124px;display:inline-block;margin:5px;')
-- 稀有度边框
cardDiv:tag('div')
:cssText('position:absolute;top:0px;left:0px')
:wikitext(string.format('[[File:Frame item rarity %s.png|124px|link=]]', equipData.rarity))
-- 内边框
cardDiv:tag('div')
:cssText('position:absolute;top:7px;left:7px;width:110px;height:110px;border:1px solid #fff;border-radius: 4px')
-- 装备图片
cardDiv:tag('div')
:cssText('position:absolute;top:6px;left:6px')
:wikitext(string.format('[[File:%s|112px|link=]]', artFile))
-- 装备名称(带描边效果)
cardDiv:tag('div')
:cssText('position:absolute;bottom:6px;left:6px')
:wikitext(frame:preprocess(string.format('{{描边|黑|%s}}', equipName)))
end
return tostring(html)
end
-- 按稀有度显示装备
function p.byRarity(frame)
local args = frame.args
local rarity = args[1] or args.rarity or "蓝"
local html = mw.html.create('div')
:cssText('display:flex;flex-wrap:wrap;')
-- 创建装备列表并排序
local equipList = {}
for equipName, equipData in pairs(data) do
if equipData.rarity == rarity then
table.insert(equipList, {
name = equipName,
data = equipData,
typeOrder = typeOrder[equipData.type] or 999,
id = equipData.id or 0
})
end
end
-- 按类型和ID排序
table.sort(equipList, function(a, b)
if a.typeOrder ~= b.typeOrder then
return a.typeOrder < b.typeOrder
end
return a.id > b.id
end)
-- 生成装备卡片
for _, item in ipairs(equipList) do
local equipName = item.name
local equipData = item.data
local artFile = string.format("relic_%s.png", formatIdToFilename(equipData.id))
-- 创建单个装备卡片
local cardDiv = html:tag('div')
:cssText('position:relative;width:124px;height:124px;display:inline-block;margin:5px;')
-- 稀有度边框
cardDiv:tag('div')
:cssText('position:absolute;top:0px;left:0px')
:wikitext(string.format('[[File:Frame item rarity %s.png|124px|link=]]', equipData.rarity))
-- 内边框
cardDiv:tag('div')
:cssText('position:absolute;top:7px;left:7px;width:110px;height:110px;border:1px solid #fff;border-radius: 4px')
-- 装备图片
cardDiv:tag('div')
:cssText('position:absolute;top:6px;left:6px')
:wikitext(string.format('[[File:%s|112px|link=]]', artFile))
-- 装备名称(带描边效果)
cardDiv:tag('div')
:cssText('position:absolute;bottom:6px;left:6px')
:wikitext(frame:preprocess(string.format('{{描边|黑|%s}}', equipName)))
end
return tostring(html)
end
return p