模块:卡牌/中立
来自卡厄思梦境WIKI
< 模块:卡牌
< 模块:卡牌
此模块的文档可以在模块:卡牌/中立/doc创建
local p = {}
-- 使用官方参数解析器
local getArgs = require('Module:Arguments').getArgs
-- 渲染模块
local displayModule = require('Module:卡牌/display')
-- 卡牌逻辑模块
local cardModule = require('Module:卡牌')
-- 安全的错误输出
local function err(msg)
return '<span style="color: red;">' .. mw.text.encode(msg) .. '</span>'
end
-- 显示单张中立卡牌
function p.main(frame)
local args = getArgs(frame, { removeBlank = true })
local cardName = args[1]
if not cardName or cardName == "" then
return err("错误: 未指定卡牌名")
end
-- 加载中立卡牌数据
local success, neCardData = pcall(require, 'Module:卡牌/中立/data')
if not success or not neCardData then
return err('错误: 找不到模块 "Module:卡牌/中立/data"')
end
local cardDataWrapper = neCardData[cardName]
if not cardDataWrapper then
return err('错误: 找不到中立卡牌 "' .. cardName .. '"')
end
local baseData = cardDataWrapper.base
if not baseData then
return err('错误: 卡牌 "' .. cardName .. '" 没有 base 数据')
end
-- 构造模块信息(中立卡牌统一使用 basic 边框)
local moduleInfo = {
ego = "basic"
}
-- 解析卡牌数据
local cardInfo = cardModule.parseCardData(baseData, "中立卡牌", cardName, moduleInfo, {
isVariant = false,
baseApText = nil,
baseDictStr = ""
})
if not cardInfo then
return err("错误: 解析卡牌数据失败")
end
-- 强制设置 ego 为 basic(确保边框正确)
cardInfo.ego = "basic"
-- 处理衍生卡牌
local subCardInfo = nil
if baseData.sub then
subCardInfo = cardModule.parseSubCardData(baseData.sub, neCardData, moduleInfo)
end
-- 渲染卡牌
return displayModule.render(cardInfo, subCardInfo)
end
-- 显示所有中立卡牌
function p.showAll(frame)
local args = getArgs(frame, { removeBlank = false })
-- 加载中立卡牌数据
local success, neCardData = pcall(require, 'Module:卡牌/中立/data')
if not success or not neCardData then
return err('错误: 找不到模块 "Module:卡牌/中立/data"')
end
-- 收集所有卡牌名称并排序
local cardNames = {}
for cardName, cardData in pairs(neCardData) do
if type(cardData) == "table" and cardData.base then
table.insert(cardNames, cardName)
end
end
table.sort(cardNames)
-- 构建 HTML
local html = {}
-- 渲染每张卡牌(包装在 divsort 中以支持筛选)
local moduleInfo = { ego = "basic" }
for _, cardName in ipairs(cardNames) do
local cardDataWrapper = neCardData[cardName]
local baseData = cardDataWrapper.base
if baseData then
-- 解析卡牌数据
local cardInfo = cardModule.parseCardData(baseData, "中立卡牌", cardName, moduleInfo, {
isVariant = false,
baseApText = nil,
baseDictStr = ""
})
if cardInfo then
-- 强制设置 ego 为 basic
cardInfo.ego = "basic"
-- 处理衍生卡牌
local subCardInfo = nil
if baseData.sub then
subCardInfo = cardModule.parseSubCardData(baseData.sub, neCardData, moduleInfo)
end
-- 提取筛选参数
local rarity = baseData.rarity or ""
local classStr = baseData.class or ""
-- 包装卡牌渲染结果在 divsort 中,添加 data-param 属性
table.insert(html, string.format(
'<div class="divsort" data-param1="%s" data-param2="%s">',
mw.text.encode(rarity),
mw.text.encode(classStr)
))
table.insert(html, displayModule.render(cardInfo, subCardInfo))
table.insert(html, '</div>')
end
end
end
return table.concat(html, '')
end
-- 批量显示指定的中立卡牌
function p.batch(frame)
local args = getArgs(frame, { removeBlank = false })
-- 加载中立卡牌数据
local success, neCardData = pcall(require, 'Module:卡牌/中立/data')
if not success or not neCardData then
return err('错误: 找不到模块 "Module:卡牌/中立/data"')
end
local html = {}
table.insert(html, '<div style="display:flex;gap:10px;flex-wrap:wrap;">')
local moduleInfo = { ego = "basic" }
-- 遍历所有参数(每个参数是一个卡牌名)
local i = 1
while args[i] do
local cardName = args[i]
if cardName and cardName ~= "" then
local cardDataWrapper = neCardData[cardName]
if cardDataWrapper and cardDataWrapper.base then
local baseData = cardDataWrapper.base
-- 解析卡牌数据
local cardInfo = cardModule.parseCardData(baseData, "中立卡牌", cardName, moduleInfo, {
isVariant = false,
baseApText = nil,
baseDictStr = ""
})
if cardInfo then
-- 强制设置 ego 为 basic
cardInfo.ego = "basic"
-- 处理衍生卡牌
local subCardInfo = nil
if baseData.sub then
subCardInfo = cardModule.parseSubCardData(baseData.sub, neCardData, moduleInfo)
end
-- 渲染并添加到 HTML
table.insert(html, displayModule.render(cardInfo, subCardInfo))
end
else
table.insert(html, err('错误: 找不到卡牌 "' .. cardName .. '"'))
end
end
i = i + 1
end
table.insert(html, '</div>')
return table.concat(html, '')
end
return p