模块:配队/卡牌
来自卡厄思梦境WIKI
此模块的文档可以在模块:配队/卡牌/doc创建
local p = {}
local getArgs = require('Module:Arguments').getArgs
-- 卡牌模块
local cardModule = require('Module:卡牌')
-- 安全的错误输出
local function err(msg)
return '<span style="color: red;">' .. mw.text.encode(msg) .. '</span>'
end
-- 安全获取 SMW 属性
local function getProperty(pageName, propertyName)
local result = mw.smw.ask({
'[[' .. pageName .. ']]',
'?' .. propertyName,
limit = 1
})
if result and result[1] and result[1][propertyName] then
return result[1][propertyName]
end
return nil
end
-- 主函数
function p.main(frame)
local args = getArgs(frame, { removeBlank = true })
local fighterName = args[1] or args['战斗员'] or args['name']
if not fighterName or fighterName == '' then
return err('错误: 未指定战斗员名称')
end
-- 构造完整页面名称
local pageName = '战斗员:' .. fighterName
-- 检查页面是否存在
local title = mw.title.new(pageName)
if not title or not title.exists then
return err('错误: 找不到战斗员 "' .. fighterName .. '"')
end
-- 定义卡牌属性顺序
local cardProperties = {
'自我意识技能',
'起始卡牌_1',
'起始卡牌_2',
'起始卡牌_3',
'起始卡牌_4',
'独特卡牌_1',
'独特卡牌_2',
'独特卡牌_3',
'独特卡牌_4'
}
-- 收集卡牌调用参数
local batchArgs = {}
local argIndex = 1
for _, propName in ipairs(cardProperties) do
local cardValue = getProperty(pageName, propName)
if cardValue and cardValue ~= '' then
-- 解析卡牌值(格式:模块名|卡牌名)
local moduleName, cardName = cardValue:match('^([^|]+)|(.+)$')
if moduleName and cardName then
moduleName = mw.text.trim(moduleName)
cardName = mw.text.trim(cardName)
-- 添加到批量参数(每组5个参数:模块名, 卡牌名, 变体类型, 变体参数, 变体索引)
batchArgs[argIndex] = moduleName
batchArgs[argIndex + 1] = cardName
batchArgs[argIndex + 2] = nil -- 变体类型
batchArgs[argIndex + 3] = nil -- 变体参数
batchArgs[argIndex + 4] = nil -- 变体索引
argIndex = argIndex + 5
end
end
end
-- 如果没有找到任何卡牌
if #batchArgs == 0 then
return err('错误: 战斗员 "' .. fighterName .. '" 没有配置卡牌数据')
end
-- 调用批量渲染
local batchFrame = {
args = batchArgs,
getParent = function() return frame end
}
return cardModule.batch(batchFrame)
end
return p