装备:修订间差异
来自卡厄思梦境WIKI
无编辑摘要 |
无编辑摘要 |
||
| 第34行: | 第34行: | ||
-- 生成装备卡片 | -- 生成装备卡片 | ||
function p.card(frame) | function p.card(frame) | ||
local args = frame:getParent().args | -- 修正参数获取逻辑 | ||
local args = frame.args -- 直接调用时使用frame.args | |||
if not args[1] and frame:getParent() then | |||
args = frame:getParent().args -- 通过模板调用时使用parent.args | |||
end | |||
local name = args[1] or args.name | local name = args[1] or args.name | ||
local level = args[2] or args.level or "1" | local level = args[2] or args.level or "1" | ||
if not name | -- 调试信息 | ||
return "装备不存在: " .. | if not name then | ||
local debugInfo = "参数调试信息:\n" | |||
debugInfo = debugInfo .. "frame.args[1]: " .. tostring(frame.args[1]) .. "\n" | |||
if frame:getParent() then | |||
debugInfo = debugInfo .. "parent.args[1]: " .. tostring(frame:getParent().args[1]) .. "\n" | |||
end | |||
return "装备不存在: 未指定装备名称\n" .. debugInfo | |||
end | |||
if not equipmentData[name] then | |||
return "装备不存在: " .. name .. " (请检查装备名称是否正确)" | |||
end | end | ||
| 第49行: | 第64行: | ||
-- 生成唯一ID用于弹窗 | -- 生成唯一ID用于弹窗 | ||
local uniqueId = "equip_" .. mw.hash.hashValue('md5', name .. os.time() .. math.random()) | local uniqueId = "equip_" .. mw.hash.hashValue('md5', name .. tostring(os.time()) .. tostring(math.random())) | ||
-- 使用单引号包裹HTML字符串,避免双引号冲突 | -- 使用单引号包裹HTML字符串,避免双引号冲突 | ||
local html = string.format([=[ | local html = string.format([=[ | ||
<div class="equipment-card" data-equipment="%s" data-level="%s" style="position: relative; display: inline-block; width:150px; height: 230px; cursor: pointer;"> | <div class="equipment-card" data-equipment="%s" data-level="%s" data-name="%s" style="position: relative; display: inline-block; width:150px; height: 230px; cursor: pointer;"> | ||
<div style="position: absolute; top: 0px; left: 0px;">[[File:%s|150px|link=]]</div> | <div style="position: absolute; top: 0px; left: 0px;">[[File:%s|150px|link=]]</div> | ||
<div style="position: absolute; top: 43px; left: 13px;">[[File:%s|124px|link=]]</div> | <div style="position: absolute; top: 43px; left: 13px;">[[File:%s|124px|link=]]</div> | ||
| 第62行: | 第77行: | ||
uniqueId, | uniqueId, | ||
level, | level, | ||
name, -- 添加装备名称到data属性 | |||
rarityBg, | rarityBg, | ||
base.art, | base.art, | ||
| 第72行: | 第88行: | ||
-- 生成装备弹窗内容 | -- 生成装备弹窗内容 | ||
function p.popup(frame) | function p.popup(frame) | ||
local args = frame:getParent() | -- 修正参数获取逻辑 | ||
local args = frame.args | |||
if not args[1] and frame:getParent() then | |||
args = frame:getParent().args | |||
end | |||
local name = args[1] or args.name | local name = args[1] or args.name | ||
local level = args[2] or args.level or "1" | local level = args[2] or args.level or "1" | ||
if not name or not equipmentData[name] then | if not name or not equipmentData[name] then | ||
return "" | return '<div style="color: red;">装备数据不存在</div>' | ||
end | end | ||
| 第113行: | 第134行: | ||
return frame:preprocess(html) | return frame:preprocess(html) | ||
end | |||
-- 测试函数,用于检查数据是否正确加载 | |||
function p.test(frame) | |||
local result = "装备数据列表:\n" | |||
for name, _ in pairs(equipmentData) do | |||
result = result .. "- " .. name .. "\n" | |||
end | |||
return result | |||
end | end | ||
-- 获取装备数据的JSON格式(供JS使用) | -- 获取装备数据的JSON格式(供JS使用) | ||
function p.getDataJson(frame) | function p.getDataJson(frame) | ||
local args = frame:getParent() | local args = frame.args | ||
if not args[1] and frame:getParent() then | |||
args = frame:getParent().args | |||
end | |||
local name = args[1] or args.name | local name = args[1] or args.name | ||
2025年10月17日 (五) 15:32的版本
此模块的文档可以在模块:装备/doc创建
local p = {}
local equipmentData = mw.loadData('模块:装备/data')
-- 辅助函数:解析文本模板
local function parseText(text)
if not text then return "" end
-- 将{{文本|橙|内容}}转换为HTML
text = text:gsub("{{文本|橙|([^}]+)}}", '<span style="color:#FF9900">%1</span>')
return text
end
-- 获取装备稀有度对应的背景图片
local function getRarityBg(rarity)
local rarityMap = {
["蓝"] = "bg_equipment_rarity_蓝.png",
["紫"] = "bg_equipment_rarity_紫.png",
["金"] = "bg_equipment_rarity_金.png"
}
return rarityMap[rarity] or "bg_equipment_rarity_蓝.png"
end
-- 获取装备类型对应的图标
local function getTypeIcon(equipType, rarity)
local typeMap = {
["武器"] = "武器",
["刀"] = "武器",
["装甲"] = "装甲",
["戒指"] = "戒指"
}
local mappedType = typeMap[equipType] or "武器"
return string.format("icon_equip_%s_%s.png", mappedType, rarity)
end
-- 生成装备卡片
function p.card(frame)
-- 修正参数获取逻辑
local args = frame.args -- 直接调用时使用frame.args
if not args[1] and frame:getParent() then
args = frame:getParent().args -- 通过模板调用时使用parent.args
end
local name = args[1] or args.name
local level = args[2] or args.level or "1"
-- 调试信息
if not name then
local debugInfo = "参数调试信息:\n"
debugInfo = debugInfo .. "frame.args[1]: " .. tostring(frame.args[1]) .. "\n"
if frame:getParent() then
debugInfo = debugInfo .. "parent.args[1]: " .. tostring(frame:getParent().args[1]) .. "\n"
end
return "装备不存在: 未指定装备名称\n" .. debugInfo
end
if not equipmentData[name] then
return "装备不存在: " .. name .. " (请检查装备名称是否正确)"
end
local equip = equipmentData[name]
local base = equip.base
local levelData = equip[level] or equip["1"]
local rarityBg = getRarityBg(base.rarity)
-- 生成唯一ID用于弹窗
local uniqueId = "equip_" .. mw.hash.hashValue('md5', name .. tostring(os.time()) .. tostring(math.random()))
-- 使用单引号包裹HTML字符串,避免双引号冲突
local html = string.format([=[
<div class="equipment-card" data-equipment="%s" data-level="%s" data-name="%s" style="position: relative; display: inline-block; width:150px; height: 230px; cursor: pointer;">
<div style="position: absolute; top: 0px; left: 0px;">[[File:%s|150px|link=]]</div>
<div style="position: absolute; top: 43px; left: 13px;">[[File:%s|124px|link=]]</div>
<div style="position: absolute; bottom: 5px; left: 5px; width: 140px; height: 35px; background-color: rgba(0,0,0,0.5); border-radius: 0px 0px 8px 8px"></div>
<div style="position: absolute; bottom: 10px; left: 20px;">[[File:icon_star_rating_%s.png|link=]]</div>
<div style="position: absolute; top: 0px; left: 0px;">[[File:equipment_顶层蒙版.png|150px|link=]]</div>
</div>]=],
uniqueId,
level,
name, -- 添加装备名称到data属性
rarityBg,
base.art,
level
)
return frame:preprocess(html)
end
-- 生成装备弹窗内容
function p.popup(frame)
-- 修正参数获取逻辑
local args = frame.args
if not args[1] and frame:getParent() then
args = frame:getParent().args
end
local name = args[1] or args.name
local level = args[2] or args.level or "1"
if not name or not equipmentData[name] then
return '<div style="color: red;">装备数据不存在</div>'
end
local equip = equipmentData[name]
local base = equip.base
local levelData = equip[level] or equip["1"]
local collectionBg = "bg_collection_rarity_" .. base.rarity .. ".png"
local typeIcon = getTypeIcon(base.type, base.rarity)
local valueTypeText = base.value_type == "atk" and "攻击力" or "防御力"
local desc = parseText(levelData.desc_global)
local html = string.format([=[
<div style="position: relative; display: inline-block; width:368px; height: 335px; background-color: #343434; border-radius: 9px">
<div style="position: absolute; top: 0px; left: 0px;">[[File:%s|link=]]</div>
<div style="position: absolute; top: 40px; left: 128px;">[[File:%s|124px|link=]]</div>
<div style="position: absolute; top: 167px; left: 0px; width: 368px; height: 35px; background-color: rgba(0,0,0,0.5); border-radius: 0px 0px 8px 8px"></div>
<div style="position: absolute; top: 173px; left: 128px;">[[File:icon_star_rating_%s.png|link=]]</div>
<div style="position: absolute; top: 205px; left: 5px; color: white">[[File:%s|25px|link=]]</div>
<div style="position: absolute; top: 209px; left: 33px; color: white">%s</div>
<div style="position: absolute; top: 235px; left: 9px; width: 350px; height: 35px; background-color: rgba(255,255,255,0.3); border-radius: 2px"></div>
<div style="position: absolute; top: 242px; left: 14px; color: white">%s</div>
<div style="position: absolute; top: 242px; right: 14px; color: white">%s</div>
<div style="position: absolute; top: 277px; left: 10px; right: 10px; color: white">%s</div>
</div>]=],
collectionBg,
base.art,
level,
typeIcon,
name,
valueTypeText,
levelData.value,
desc
)
return frame:preprocess(html)
end
-- 测试函数,用于检查数据是否正确加载
function p.test(frame)
local result = "装备数据列表:\n"
for name, _ in pairs(equipmentData) do
result = result .. "- " .. name .. "\n"
end
return result
end
-- 获取装备数据的JSON格式(供JS使用)
function p.getDataJson(frame)
local args = frame.args
if not args[1] and frame:getParent() then
args = frame:getParent().args
end
local name = args[1] or args.name
if not name or not equipmentData[name] then
return "{}"
end
local equip = equipmentData[name]
local data = {
name = name,
base = equip.base,
levels = {}
}
for i = 1, 5 do
if equip[tostring(i)] then
data.levels[i] = equip[tostring(i)]
end
end
return mw.text.jsonEncode(data)
end
return p