配队/卡牌:修订间差异
来自卡厄思梦境WIKI
无编辑摘要 |
无编辑摘要 |
||
| 第1行: | 第1行: | ||
local p = {} | local p = {} | ||
-- | -- 引入依赖模块 | ||
local getArgs = require('Module:Arguments').getArgs | local getArgs = require('Module:Arguments').getArgs | ||
local cardModule = require('Module:卡牌') | local cardModule = require('Module:卡牌') | ||
| 第12行: | 第10行: | ||
end | end | ||
-- | -- 解析 card.order 字符串,返回卡牌名称数组 | ||
local function | local function parseCardOrder(orderStr) | ||
if not | if not orderStr or orderStr == "" then | ||
return {} | |||
return | |||
end | end | ||
-- | local cards = {} | ||
-- 支持逗号(中英文)和顿号分隔 | |||
orderStr = mw.text.trim(orderStr) | |||
for cardName in orderStr:gmatch('([^,、]+)') do | |||
cardName = mw.text.trim(cardName) | |||
if cardName ~= "" then | |||
table.insert(cards, cardName) | |||
end | end | ||
end | end | ||
return cards | |||
return | |||
end | end | ||
-- | -- 主函数:批量显示指定战斗员的卡牌 | ||
-- 参数: | |||
-- moduleName: 战斗员模块名(如 "凯隆") | |||
-- size: 可选,"small"(默认)或 "medium" 或 "large" | |||
} | function p.main(frame) | ||
local args = getArgs(frame, { removeBlank = true }) | |||
local | local moduleName = args[1] or args.module | ||
if not | local size = args[2] or args.size or "small" | ||
return | |||
if not moduleName or moduleName == "" then | |||
return err("错误: 未指定战斗员模块名") | |||
end | end | ||
-- | -- 加载战斗员卡牌数据模块 | ||
local success, cardData = pcall(require, 'Module:卡牌/' .. moduleName) | |||
if not success or not cardData then | |||
return err('错误: 找不到模块 "Module:卡牌/' .. moduleName .. '"') | |||
end | end | ||
-- 获取 card.order | |||
local orderData = cardData.order | |||
if not orderData or (type(orderData) == "table" and #orderData == 0) then | |||
-- | return err('错误: 模块 "' .. moduleName .. '" 没有定义 card.order') | ||
if not | |||
return | |||
end | end | ||
-- 如果 order 是表格,取第一个元素 | |||
local orderStr = orderData | |||
if type(orderData) == "table" then | |||
if | orderStr = orderData[1] or "" | ||
end | end | ||
-- | -- 解析卡牌顺序 | ||
local | local cardNames = parseCardOrder(orderStr) | ||
if #cardNames == 0 then | |||
return err('错误: card.order 为空或格式错误') | |||
end | end | ||
-- 构建批量调用参数 | |||
local batchArgs = {} | |||
for i, cardName in ipairs(cardNames) do | |||
-- 每张卡牌需要5个参数:模块名、卡牌名、变体类型(nil)、变体参数(nil)、变体索引(nil) | |||
table.insert(batchArgs, moduleName) | |||
table.insert(batchArgs, cardName) | |||
table.insert(batchArgs, nil) | |||
table.insert(batchArgs, nil) | |||
table.insert(batchArgs, nil) | |||
end | end | ||
-- 调用 Module:卡牌 的 batch 函数 | |||
local subFrame = { | |||
args = batchArgs, | |||
getParent = function() return frame end | |||
} | } | ||
return cardModule.batch(subFrame) | |||
end | end | ||
-- | -- 自定义函数:允许指定特定卡牌列表 | ||
function p. | -- 用法:{{#invoke:配队/卡牌|custom|模块名|卡牌1|卡牌2|卡牌3|...}} | ||
function p.custom(frame) | |||
local args = getArgs(frame, { removeBlank = true }) | local args = getArgs(frame, { removeBlank = true }) | ||
local moduleName = args[1] | |||
local | if not moduleName or moduleName == "" then | ||
return err("错误: 未指定战斗员模块名") | |||
if not | |||
return err( | |||
end | end | ||
-- | -- 收集所有卡牌名称(从第2个参数开始) | ||
local | local cardNames = {} | ||
local i = 2 | |||
while args[i] do | |||
local cardName = mw.text.trim(args[i]) | |||
if cardName ~= "" then | |||
table.insert(cardNames, cardName) | |||
local | |||
local | |||
if | |||
end | end | ||
i = i + 1 | |||
end | end | ||
if #cardNames == 0 then | |||
if # | return err("错误: 未指定任何卡牌") | ||
end | end | ||
-- | -- 构建批量调用参数 | ||
local batchArgs = {} | local batchArgs = {} | ||
for _, | for _, cardName in ipairs(cardNames) do | ||
table.insert(batchArgs, | table.insert(batchArgs, moduleName) | ||
table.insert(batchArgs, | table.insert(batchArgs, cardName) | ||
table.insert(batchArgs, | table.insert(batchArgs, nil) | ||
table.insert(batchArgs, | table.insert(batchArgs, nil) | ||
table.insert(batchArgs, | table.insert(batchArgs, nil) | ||
end | end | ||
-- | -- 调用 Module:卡牌 的 batch 函数 | ||
local | local subFrame = { | ||
args = batchArgs, | args = batchArgs, | ||
getParent = function() return frame end | getParent = function() return frame end | ||
} | } | ||
return cardModule.batch( | return cardModule.batch(subFrame) | ||
end | end | ||
-- | -- 显示指定战斗员的所有卡牌(包括灵光一闪、神光一闪变体) | ||
function p. | -- 用法:{{#invoke:配队/卡牌|all|模块名}} | ||
function p.all(frame) | |||
local args = getArgs(frame, { removeBlank = true }) | local args = getArgs(frame, { removeBlank = true }) | ||
local moduleName = args[1] | |||
if not moduleName or moduleName == "" then | |||
return err("错误: 未指定战斗员模块名") | |||
end | |||
-- 加载战斗员卡牌数据模块 | |||
local success, cardData = pcall(require, 'Module:卡牌/' .. moduleName) | |||
if not success or not cardData then | |||
return err('错误: 找不到模块 "Module:卡牌/' .. moduleName .. '"') | |||
end | |||
-- 收集所有卡牌名称(除了 info 和 order) | |||
local cardNames = {} | |||
for cardName, _ in pairs(cardData) do | |||
table.insert( | if cardName ~= "info" and cardName ~= "order" and type(cardData[cardName]) == "table" then | ||
table.insert(cardNames, cardName) | |||
end | end | ||
end | end | ||
return | table.sort(cardNames) -- 按字母顺序排序 | ||
if #cardNames == 0 then | |||
return err("错误: 模块中没有找到任何卡牌") | |||
end | |||
-- 构建批量调用参数 | |||
local batchArgs = {} | |||
for _, cardName in ipairs(cardNames) do | |||
table.insert(batchArgs, moduleName) | |||
table.insert(batchArgs, cardName) | |||
table.insert(batchArgs, nil) | |||
table.insert(batchArgs, nil) | |||
table.insert(batchArgs, nil) | |||
end | |||
-- 调用 Module:卡牌 的 batch 函数 | |||
local subFrame = { | |||
args = batchArgs, | |||
getParent = function() return frame end | |||
} | |||
return cardModule.batch(subFrame) | |||
end | end | ||
return p | return p | ||
2025年10月18日 (六) 22:40的版本
此模块的文档可以在模块:配队/卡牌/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
-- 解析 card.order 字符串,返回卡牌名称数组
local function parseCardOrder(orderStr)
if not orderStr or orderStr == "" then
return {}
end
local cards = {}
-- 支持逗号(中英文)和顿号分隔
orderStr = mw.text.trim(orderStr)
for cardName in orderStr:gmatch('([^,、]+)') do
cardName = mw.text.trim(cardName)
if cardName ~= "" then
table.insert(cards, cardName)
end
end
return cards
end
-- 主函数:批量显示指定战斗员的卡牌
-- 参数:
-- moduleName: 战斗员模块名(如 "凯隆")
-- size: 可选,"small"(默认)或 "medium" 或 "large"
function p.main(frame)
local args = getArgs(frame, { removeBlank = true })
local moduleName = args[1] or args.module
local size = args[2] or args.size or "small"
if not moduleName or moduleName == "" then
return err("错误: 未指定战斗员模块名")
end
-- 加载战斗员卡牌数据模块
local success, cardData = pcall(require, 'Module:卡牌/' .. moduleName)
if not success or not cardData then
return err('错误: 找不到模块 "Module:卡牌/' .. moduleName .. '"')
end
-- 获取 card.order
local orderData = cardData.order
if not orderData or (type(orderData) == "table" and #orderData == 0) then
return err('错误: 模块 "' .. moduleName .. '" 没有定义 card.order')
end
-- 如果 order 是表格,取第一个元素
local orderStr = orderData
if type(orderData) == "table" then
orderStr = orderData[1] or ""
end
-- 解析卡牌顺序
local cardNames = parseCardOrder(orderStr)
if #cardNames == 0 then
return err('错误: card.order 为空或格式错误')
end
-- 构建批量调用参数
local batchArgs = {}
for i, cardName in ipairs(cardNames) do
-- 每张卡牌需要5个参数:模块名、卡牌名、变体类型(nil)、变体参数(nil)、变体索引(nil)
table.insert(batchArgs, moduleName)
table.insert(batchArgs, cardName)
table.insert(batchArgs, nil)
table.insert(batchArgs, nil)
table.insert(batchArgs, nil)
end
-- 调用 Module:卡牌 的 batch 函数
local subFrame = {
args = batchArgs,
getParent = function() return frame end
}
return cardModule.batch(subFrame)
end
-- 自定义函数:允许指定特定卡牌列表
-- 用法:{{#invoke:配队/卡牌|custom|模块名|卡牌1|卡牌2|卡牌3|...}}
function p.custom(frame)
local args = getArgs(frame, { removeBlank = true })
local moduleName = args[1]
if not moduleName or moduleName == "" then
return err("错误: 未指定战斗员模块名")
end
-- 收集所有卡牌名称(从第2个参数开始)
local cardNames = {}
local i = 2
while args[i] do
local cardName = mw.text.trim(args[i])
if cardName ~= "" then
table.insert(cardNames, cardName)
end
i = i + 1
end
if #cardNames == 0 then
return err("错误: 未指定任何卡牌")
end
-- 构建批量调用参数
local batchArgs = {}
for _, cardName in ipairs(cardNames) do
table.insert(batchArgs, moduleName)
table.insert(batchArgs, cardName)
table.insert(batchArgs, nil)
table.insert(batchArgs, nil)
table.insert(batchArgs, nil)
end
-- 调用 Module:卡牌 的 batch 函数
local subFrame = {
args = batchArgs,
getParent = function() return frame end
}
return cardModule.batch(subFrame)
end
-- 显示指定战斗员的所有卡牌(包括灵光一闪、神光一闪变体)
-- 用法:{{#invoke:配队/卡牌|all|模块名}}
function p.all(frame)
local args = getArgs(frame, { removeBlank = true })
local moduleName = args[1]
if not moduleName or moduleName == "" then
return err("错误: 未指定战斗员模块名")
end
-- 加载战斗员卡牌数据模块
local success, cardData = pcall(require, 'Module:卡牌/' .. moduleName)
if not success or not cardData then
return err('错误: 找不到模块 "Module:卡牌/' .. moduleName .. '"')
end
-- 收集所有卡牌名称(除了 info 和 order)
local cardNames = {}
for cardName, _ in pairs(cardData) do
if cardName ~= "info" and cardName ~= "order" and type(cardData[cardName]) == "table" then
table.insert(cardNames, cardName)
end
end
table.sort(cardNames) -- 按字母顺序排序
if #cardNames == 0 then
return err("错误: 模块中没有找到任何卡牌")
end
-- 构建批量调用参数
local batchArgs = {}
for _, cardName in ipairs(cardNames) do
table.insert(batchArgs, moduleName)
table.insert(batchArgs, cardName)
table.insert(batchArgs, nil)
table.insert(batchArgs, nil)
table.insert(batchArgs, nil)
end
-- 调用 Module:卡牌 的 batch 函数
local subFrame = {
args = batchArgs,
getParent = function() return frame end
}
return cardModule.batch(subFrame)
end
return p