模块:卡牌/怪物
来自卡厄思梦境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
-- 加载怪物数据
local function loadMonsterData()
local ok, monsterData = pcall(require, 'Module:卡牌/怪物/data')
if not ok or not monsterData then
return nil, '错误: 无法加载 Module:卡牌/怪物/data'
end
return monsterData, nil
end
-- 将怪物数据转换为标准卡牌数据格式
local function convertMonsterToCardData(monsterName, monsterCardData)
if not monsterCardData or not monsterCardData.base then
return nil
end
local base = monsterCardData.base
-- 构造标准卡牌数据结构
local cardDataWrapper = {
base = {
displayname = base.displayname or monsterName,
art = base.art,
ap = base.ap,
type = base.type,
dict = base.dict or "",
desc_global = base.desc_global or "",
rarity = "彩", -- 怪物卡牌稀有度固定为彩
ego = "all", -- 使用统一边框
group = "",
tag = "",
sub = base.sub,
isinspiration = 0,
isgod_inspiration = 0,
isgod_god_inspiration = 0
}
}
return cardDataWrapper
end
-- 主入口函数
function p.main(frame)
local args = getArgs(frame, { removeBlank = true })
local monsterName = args[1]
if not monsterName or monsterName == "" then
return err("错误: 未指定怪物名称")
end
-- 加载怪物数据
local monsterData, loadErr = loadMonsterData()
if loadErr then
return err(loadErr)
end
-- 获取指定怪物的数据
local monsterCardData = monsterData[monsterName]
if not monsterCardData then
return err('错误: 找不到怪物 "' .. monsterName .. '"')
end
-- 转换为标准卡牌格式
local cardDataWrapper = convertMonsterToCardData(monsterName, monsterCardData)
if not cardDataWrapper then
return err('错误: 怪物数据格式不正确')
end
-- 创建临时模块信息
local moduleInfo = {
ego = "all" -- 统一使用 all 边框
}
local baseData = cardDataWrapper.base
-- 解析卡牌数据
local cardInfo = cardModule.parseCardData(baseData, "怪物", monsterName, moduleInfo, {
isVariant = false,
baseApText = nil,
baseDictStr = ""
})
if not cardInfo then
return err("错误: 解析怪物卡牌数据失败")
end
-- 处理衍生卡牌
local subCardInfo = nil
if baseData.sub then
subCardInfo = cardModule.parseSubCardData(baseData.sub, monsterData, moduleInfo)
end
-- 使用现有的渲染系统
local displayModule = require('Module:卡牌/display')
return displayModule.render(cardInfo, subCardInfo)
end
-- 批量显示函数
function p.batch(frame)
local args = getArgs(frame, { removeBlank = false })
local html = {}
-- 开始包裹容器
table.insert(html, '<div style="display:flex;gap:10px;flex-wrap:wrap;">')
-- 遍历所有怪物名称
local i = 1
while args[i] do
local monsterName = args[i]
if monsterName and monsterName ~= "" then
-- 构造子 frame 调用 p.main
local subFrame = {
args = {monsterName},
getParent = function() return frame end
}
table.insert(html, p.main(subFrame))
end
i = i + 1
end
-- 结束包裹容器
table.insert(html, '</div>')
return table.concat(html, '')
end
return p