模块:装备
来自卡厄思梦境WIKI
此模块的文档可以在模块:装备/doc创建
local p = {}
local data = mw.loadData("模块:装备/data")
-- 获取星级图标文件名
local function getStarIcon(level)
return "icon_star_rating_" .. level .. ".png"
end
-- 生成装备卡片HTML
local function generateEquipmentCard(name, equipData, level)
level = level or "1"
local base = equipData.base
local levelData = equipData[level]
if not levelData then
return "错误:未找到等级数据"
end
local rarity = base.rarity
local art = base.art
local value_type = base.value_type
local value = levelData.value
local desc = levelData.desc_global
-- 生成卡片HTML
local html = mw.html.create('div')
:attr('class', 'equipment-card')
:css('position', 'relative')
:css('display', 'inline-block')
:css('width', '150px')
:css('height', '230px')
:css('cursor', 'pointer')
-- 背景
html:tag('div')
:css('position', 'absolute')
:css('top', '0px')
:css('left', '0px')
:wikitext('[[File:bg_equipment_rarity_' .. rarity .. '.png|150px|link=]]')
-- 装备图标
html:tag('div')
:css('position', 'absolute')
:css('top', '43px')
:css('left', '13px')
:wikitext('[[File:' .. art .. '|124px|link=]]')
-- 底部遮罩
html:tag('div')
:css('position', 'absolute')
:css('bottom', '5px')
:css('left', '5px')
:css('width', '140px')
:css('height', '35px')
:css('background-color', 'rgba(0,0,0,0.5)')
:css('border-radius', '0px 0px 8px 8px')
-- 星级
html:tag('div')
:css('position', 'absolute')
:css('bottom', '10px')
:css('left', '20px')
:wikitext('[[File:' .. getStarIcon(level) .. '|link=]]')
-- 顶层蒙版
html:tag('div')
:css('position', 'absolute')
:css('top', '0px')
:css('left', '0px')
:wikitext('[[File:equipment_顶层蒙版.png|150px|link=]]')
-- 生成弹窗HTML(隐藏)
local popup = mw.html.create('div')
:attr('class', 'equipment-popup')
:css('display', 'none')
:css('position', 'fixed')
:css('top', '50%')
:css('left', '50%')
:css('transform', 'translate(-50%, -50%)')
:css('z-index', '1000')
:css('width', '368px')
:css('height', '335px')
:css('background-color', '#343434')
:css('border-radius', '9px')
-- 弹窗背景
popup:tag('div')
:css('position', 'absolute')
:css('top', '0px')
:css('left', '0px')
:wikitext('[[File:bg_collection_rarity_' .. rarity .. '.png|link=]]')
-- 弹窗装备图标
popup:tag('div')
:css('position', 'absolute')
:css('top', '40px')
:css('left', '128px')
:wikitext('[[File:' .. art .. '|124px|link=]]')
-- 弹窗底部遮罩
popup:tag('div')
:css('position', 'absolute')
:css('top', '167px')
:css('left', '0px')
:css('width', '368px')
:css('height', '35px')
:css('background-color', 'rgba(0,0,0,0.5)')
:css('border-radius', '0px 0px 8px 8px')
-- 弹窗星级
popup:tag('div')
:css('position', 'absolute')
:css('top', '173px')
:css('left', '128px')
:wikitext('[[File:' .. getStarIcon(level) .. '|link=]]')
-- 装备类型图标
popup:tag('div')
:css('position', 'absolute')
:css('top', '205px')
:css('left', '5px')
:css('color', 'white')
:wikitext('[[File:icon_equip_' .. base.type .. '_' .. rarity .. '.png|25px|link=]]')
-- 装备名称
popup:tag('div')
:css('position', 'absolute')
:css('top', '209px')
:css('left', '33px')
:css('color', 'white')
:wikitext(name)
-- 属性背景
popup:tag('div')
:css('position', 'absolute')
:css('top', '235px')
:css('left', '9px')
:css('width', '350px')
:css('height', '35px')
:css('background-color', 'rgba(255,255,255,0.3)')
:css('border-radius', '2px')
-- 属性类型
popup:tag('div')
:css('position', 'absolute')
:css('top', '242px')
:css('left', '14px')
:css('color', 'white')
:wikitext(value_type)
-- 属性值
popup:tag('div')
:css('position', 'absolute')
:css('top', '242px')
:css('right', '14px')
:css('color', 'white')
:wikitext(tostring(value))
-- 描述
popup:tag('div')
:css('position', 'absolute')
:css('top', '277px')
:css('left', '10px')
:css('right', '10px')
:css('color', 'white')
:css('font-size', '13px')
:css('line-height', '1.3')
:wikitext(desc)
-- 关闭按钮
popup:tag('div')
:attr('class', 'equipment-popup-close')
:css('position', 'absolute')
:css('top', '5px')
:css('right', '10px')
:css('color', 'white')
:css('font-size', '20px')
:css('cursor', 'pointer')
:wikitext('×')
-- 合并HTML
local container = mw.html.create('div')
:css('display', 'inline-block')
:node(html)
:node(popup)
return tostring(container)
end
-- 主函数
function p.show(frame)
local args = frame:getParent().args
-- 尝试多种方式获取参数
local name = args[1] or args['1'] or args['name'] or args['名称']
local level = args[2] or args['2'] or args['level'] or args['等级'] or "1"
-- 去除可能的空白字符
if name then
name = mw.text.trim(name)
if name == "" then
name = nil
end
end
if level then
level = mw.text.trim(level)
end
if not name then
return "错误:未指定装备名称"
end
local equipData = data[name]
if not equipData then
return "错误:未找到装备 " .. name
end
return generateEquipmentCard(name, equipData, level)
end
return p