模块:装备
来自卡厄思梦境WIKI
此模块的文档可以在模块:装备/doc创建
local p = {}
local equipmentData = mw.loadData("模块:装备/data")
-- 获取稀有度对应的图标
local function getRarityIcon(rarity)
local rarityMap = {
["蓝"] = "蓝",
["紫"] = "紫",
["金"] = "金",
["红"] = "红"
}
return rarityMap[rarity] or "蓝"
end
-- 获取类型对应的图标颜色
local function getTypeIconColor(rarity)
return rarity or "蓝"
end
-- 生成装备卡片
local function generateEquipmentCard(name, level, data)
level = tonumber(level) or 1
local base = data.base
local levelData = data[level]
if not levelData then
return "错误:等级数据不存在"
end
local rarity = base.rarity
local art = base.art
local card = mw.html.create('div')
:css('position', 'relative')
:css('display', 'inline-block')
:css('width', '150px')
:css('height', '230px')
:wikitext('[[File:bg_equipment_rarity_' .. rarity .. '.png|150px|link=]]')
card:tag('div')
:css('position', 'absolute')
:css('top', '43px')
:css('left', '13px')
:wikitext('[[File:' .. art .. '|124px|link=]]')
card: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')
card:tag('div')
:css('position', 'absolute')
:css('bottom', '10px')
:css('left', '20px')
:wikitext('[[File:icon_star_rating_' .. level .. '.png|link=]]')
card:tag('div')
:css('position', 'absolute')
:css('top', '0px')
:css('left', '0px')
:wikitext('[[File:equipment_顶层蒙版.png|150px|link=]]')
return tostring(card)
end
-- 生成装备详情弹窗
local function generateEquipmentPopup(name, level, data)
level = tonumber(level) or 1
local base = data.base
local levelData = data[level]
if not levelData then
return "错误:等级数据不存在"
end
local rarity = base.rarity
local art = base.art
local equipType = base.type
local valueType = base.value_type
local value = levelData.value
local desc = levelData.desc_global
-- 值类型的中文名称
local valueTypeNameMap = {
["atk"] = "攻击力",
["def"] = "防御力",
["hp"] = "生命值"
}
local valueTypeName = valueTypeNameMap[valueType] or "攻击力"
local popup = mw.html.create('div')
:css('position', 'relative')
:css('display', 'inline-block')
: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:icon_star_rating_' .. level .. '.png|link=]]')
popup:tag('div')
:css('position', 'absolute')
:css('top', '205px')
:css('left', '5px')
:css('color', 'white')
:wikitext('[[File:icon_equip_weapon_' .. 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(valueTypeName)
popup:tag('div')
:css('position', 'absolute')
:css('top', '242px')
:css('right', '14px')
:css('color', 'white')
:wikitext(value)
popup:tag('div')
:css('position', 'absolute')
:css('top', '277px')
:css('left', '10px')
:css('color', 'white')
:css('font-size', '14px')
:wikitext(desc)
return tostring(popup)
end
-- 主函数:根据参数决定显示卡片还是弹窗
function p.show(frame)
local args = frame.args
if not args[1] or args[1] == "" then
args = frame:getParent().args
end
local name = args[1] or args["name"] or ""
local level = tonumber(args[2] or args["level"] or "1")
local mode = args["mode"] or "card" -- card 或 popup
if name == "" then
return "错误:请提供装备名称"
end
local data = equipmentData[name]
if not data then
return "错误:装备「" .. name .. "」不存在"
end
if mode == "popup" then
return generateEquipmentPopup(name, level, data)
else
return generateEquipmentCard(name, level, data)
end
end
return p