装备:修订间差异
来自卡厄思梦境WIKI
无编辑摘要 |
无编辑摘要 |
||
| 第1行: | 第1行: | ||
local p = {} | local p = {} | ||
local | local data = mw.loadData("模块:装备/data") | ||
-- | -- 获取星级图标文件名 | ||
local function | local function getStarIcon(level) | ||
return "icon_star_rating_" .. level .. ".png" | |||
end | end | ||
-- | -- 生成装备卡片HTML | ||
local function | local function generateEquipmentCard(name, equipData, level) | ||
level = level or "1" | |||
local base = equipData.base | |||
local levelData = equipData[level] | |||
if not levelData then | |||
return "错误:未找到等级数据" | |||
local | |||
local | |||
if not | |||
end | end | ||
local | local rarity = base.rarity | ||
local | 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 | return tostring(container) | ||
end | end | ||
-- | -- 主函数 | ||
function p. | function p.show(frame) | ||
local args = frame.args | local args = frame:getParent().args | ||
local name = args[1] or args['name'] | |||
local level = args[2] or args['level'] or "1" | |||
if not name then | |||
return "错误:未指定装备名称" | |||
end | end | ||
local | local equipData = data[name] | ||
if not equipData then | |||
return "错误:未找到装备 " .. name | |||
end | |||
-- 添加JS初始化脚本(仅添加一次) | |||
mw.loader.load('ext.gadget.equipment-popup') | |||
return generateEquipmentCard(name, equipData, level) | |||
return | |||
end | end | ||
return p | return p | ||
2025年10月17日 (五) 15:45的版本
此模块的文档可以在模块:装备/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['name']
local level = args[2] or args['level'] or "1"
if not name then
return "错误:未指定装备名称"
end
local equipData = data[name]
if not equipData then
return "错误:未找到装备 " .. name
end
-- 添加JS初始化脚本(仅添加一次)
mw.loader.load('ext.gadget.equipment-popup')
return generateEquipmentCard(name, equipData, level)
end
return p