卡厄思
梦
境
菜单
首页
回到首页
WIKI工具
全站样式
全站JS
修改导航栏
测试
沙盒
可视化管理器
战斗员管理器
卡牌管理器
伙伴管理器
装备管理器
词典管理器
图鉴
战斗员
伙伴
装备
怪物卡牌
中立卡牌
词典
小工具
配队模拟器
节奏榜生成器
搜索
链入页面
相关更改
特殊页面
页面信息
最近更改
登录
模块
查看“︁配队/卡牌”︁的源代码
←
模块:配队/卡牌
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
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 getProperty(pageName, propertyName) if not pageName or pageName == '' then return nil end -- 构造完整页面名(如果需要命名空间) local fullPageName = pageName if not pageName:match(':') then fullPageName = '战斗员:' .. pageName end -- 检查页面是否存在 local title = mw.title.new(fullPageName) if not title or not title.exists then return nil end -- 尝试从页面源码解析 local content = title:getContent() if content then local pattern = '|' .. propertyName .. '%s*=%s*([^\n|]*)' local value = content:match(pattern) if value then value = mw.text.trim(value) if value ~= '' then return value end end end return nil end -- 已知的卡牌模块列表(按优先级排序) local knownModules = { '齐尔克尼茨', '德洛斯', '尼希卢姆', '塞克瑞德', '维托尔', '通用', '状态异常', -- 可以继续添加更多模块 } -- 查找卡牌所在的模块 local function findCardModule(cardName) if not cardName or cardName == '' then return nil end -- 遍历已知模块,查找卡牌 for _, moduleName in ipairs(knownModules) do local ok, dataModule = pcall(require, 'Module:卡牌/' .. moduleName) if ok and dataModule then -- 检查卡牌是否存在于该模块 if dataModule[cardName] then return moduleName end end end return nil end -- 解析卡牌字符串 -- 支持格式: -- 1. 卡牌名 -- 2. 模块名|卡牌名 -- 3. 模块名|卡牌名|变体类型|变体参数|变体索引 local function parseCardString(cardStr) if not cardStr or cardStr == '' then return nil end cardStr = mw.text.trim(cardStr) -- 检查是否包含 | 分隔符 if not cardStr:match('|') then -- 格式1:只有卡牌名,需要自动查找模块 local moduleName = findCardModule(cardStr) if not moduleName then return nil, '找不到卡牌 "' .. cardStr .. '" 所在的模块' end return { moduleName = moduleName, cardName = cardStr, variantType = nil, variantParam = nil, variantIndex = nil } end -- 格式2或3:包含模块名 local parts = {} for part in cardStr:gmatch('([^|]+)') do table.insert(parts, mw.text.trim(part)) end if #parts < 2 then return nil, '卡牌字符串格式错误: ' .. cardStr end return { moduleName = parts[1], cardName = parts[2], variantType = parts[3], variantParam = parts[4], variantIndex = parts[5] } end -- 主函数 function p.main(frame) local args = getArgs(frame, { removeBlank = true }) -- 第一个参数是战斗员名称 local characterName = args[1] if not characterName or characterName == '' then return err('错误: 未指定战斗员名称') end -- 定义要读取的卡牌字段列表(按顺序) local cardFields = { '自我意识技能', '起始卡牌_1', '起始卡牌_2', '起始卡牌_3', '起始卡牌_4', '独特卡牌_1', '独特卡牌_2', '独特卡牌_3', '独特卡牌_4' } -- 收集所有卡牌数据 local cardDataList = {} local errors = {} for _, fieldName in ipairs(cardFields) do local cardStr = getProperty(characterName, fieldName) if cardStr and cardStr ~= '' then local cardData, errMsg = parseCardString(cardStr) if cardData then table.insert(cardDataList, cardData) elseif errMsg then table.insert(errors, fieldName .. ': ' .. errMsg) end end end -- 如果有错误,显示错误信息 if #errors > 0 then local errorHtml = {} table.insert(errorHtml, '<div style="color: red;">') table.insert(errorHtml, '解析卡牌信息时出错:<br>') for _, errMsg in ipairs(errors) do table.insert(errorHtml, '- ' .. mw.text.encode(errMsg) .. '<br>') end table.insert(errorHtml, '</div>') return table.concat(errorHtml, '') end -- 如果没有找到任何卡牌 if #cardDataList == 0 then return err('错误: 战斗员 "' .. characterName .. '" 没有配置任何卡牌') end -- 使用 batch 渲染所有卡牌 local batchArgs = {} for _, cardData in ipairs(cardDataList) do table.insert(batchArgs, cardData.moduleName) table.insert(batchArgs, cardData.cardName) table.insert(batchArgs, cardData.variantType or '') table.insert(batchArgs, cardData.variantParam or '') table.insert(batchArgs, cardData.variantIndex or '') end -- 创建一个模拟的 frame 调用 batch local batchFrame = { args = batchArgs, getParent = function() return frame end } return cardModule.batch(batchFrame) end -- 手动更新模块列表的函数(可选) function p.updateModules(frame) local args = getArgs(frame, { removeBlank = true }) -- 这个函数可以用来动态更新 knownModules 列表 -- 例如:{{#invoke:配队/卡牌|updateModules|新模块1|新模块2}} for i, moduleName in ipairs(args) do local found = false for _, existing in ipairs(knownModules) do if existing == moduleName then found = true break end end if not found then table.insert(knownModules, moduleName) end end return '已更新模块列表' end return p
该页面使用的模板:
模块:配队/卡牌/doc
(
查看源代码
)
返回
模块:配队/卡牌
。