战斗员图鉴:修订间差异
来自卡厄思梦境WIKI
创建页面,内容为“local p = {} -- 根据稀有度获取对应的CSS类 local function getRarityClass(rarity) return "rarity-" .. (rarity or "1") end -- 根据职业名称获取图标文件名 local function getProfessionIcon(profession) if not profession or profession == "" then return "" end return "icon_职业_" .. profession .. ".png" end -- 根据属性名称获取图标文件名 local function getAttributeIcon(attribute) if not attribute or at…” |
无编辑摘要 |
||
| (未显示同一用户的9个中间版本) | |||
| 第1行: | 第1行: | ||
local p = {} | local p = {} | ||
-- | -- 使用 mw.loadData 从筛选模块获取数据 | ||
local function getRarityClass(rarity) | local characterData = mw.loadData("模块:战斗员图鉴/筛选") | ||
-- 获取所有角色名称的函数(从筛选模块数据中获取) | |||
function p.getAllCharacters() | |||
local characters = {} | |||
for name, _ in pairs(characterData) do | |||
table.insert(characters, name) | |||
end | |||
-- 按名称排序 | |||
table.sort(characters) | |||
return characters | |||
end | |||
-- 从筛选模块加载角色数据 | |||
function p.loadCharacterData(characterName) | |||
return characterData[characterName] | |||
end | |||
-- 使用更底层的方法加载模块,避免依赖追踪(保留作为备选方案) | |||
function p.loadCharacterDataSilent(characterName) | |||
-- 首先尝试从筛选模块获取数据 | |||
local data = characterData[characterName] | |||
if data then | |||
return data | |||
end | |||
-- 如果筛选模块中没有,再尝试从单独的角色模块加载 | |||
local title = mw.title.new("模块:战斗员/" .. characterName) | |||
if not title or not title.exists then | |||
return nil | |||
end | |||
local success, result = pcall(function() | |||
return mw.loadData("模块:战斗员/" .. characterName) | |||
end) | |||
if success and result then | |||
if result.data then | |||
return result.data | |||
elseif type(result) == "table" then | |||
return result | |||
end | |||
end | |||
-- 最后尝试 require | |||
local success2, result2 = pcall(function() | |||
local module = require("模块:战斗员/" .. characterName) | |||
return module | |||
end) | |||
if success2 and result2 and result2.data then | |||
return result2.data | |||
end | |||
return nil | |||
end | |||
-- 批量加载所有角色数据(现在主要从筛选模块获取) | |||
function p.loadAllCharacterDataSilent() | |||
-- 直接返回筛选模块的所有数据 | |||
return characterData | |||
end | |||
-- 获取稀有度对应的CSS类 | |||
function p.getRarityClass(rarity) | |||
return "rarity-" .. (rarity or "1") | return "rarity-" .. (rarity or "1") | ||
end | end | ||
-- | -- 获取职业图标文件名 | ||
function p.getJobIcon(job) | |||
if | if job then | ||
return "" | return "icon_职业_" .. job .. ".png" | ||
else | |||
return "icon_职业_未知.png" | |||
end | end | ||
end | end | ||
-- | -- 获取属性图标文件名 | ||
function p.getAttributeIcon(attribute) | |||
if | if attribute then | ||
return "" | return "icon_属性_" .. attribute .. ".png" | ||
else | |||
return "icon_属性_未知.png" | |||
end | end | ||
end | end | ||
-- | -- 获取角色立绘文件名 | ||
function p.getCharacterImage(characterName) | |||
return "战斗员图鉴_" .. characterName .. ".png" | return "战斗员图鉴_" .. characterName .. ".png" | ||
end | end | ||
-- 渲染单个角色卡片 | -- 渲染单个角色卡片 | ||
function p.renderCharacterCard(data) | |||
if not | if not data then | ||
return "" | return "" | ||
end | end | ||
local | local name = data["名称"] or "未知" | ||
local rarity = data["稀有度"] or "1" | |||
local rarity = | local job = data["职业"] or "" | ||
local | local attribute = data["属性"] or "" | ||
local attribute = | |||
local | local jobIcon = p.getJobIcon(job) | ||
local attributeIcon = p.getAttributeIcon(attribute) | |||
local characterImage = p.getCharacterImage(name) | |||
local rarityClass = p.getRarityClass(rarity) | |||
-- 在开始添加HTML注释来"连接"到前一个元素 | |||
local html = '<!--\n--><div class="character-card" style="display: inline-block; vertical-align: top; position: relative; width: 150px; height: 280px; overflow: hidden; margin: 5px;">' | |||
-- 背景 | -- 背景 | ||
html | html = html .. '<div style="position: absolute; top: 0px; left: 0px; width: 150px; height: 280px; background-color: #2a2f40; border-radius: 0px 25px 0px 0px; z-index: 0;"></div>' | ||
-- 职业图标 | -- 职业图标 | ||
html = html .. '<div style="position: absolute; top: 5px; left: 5px; z-index: 1;">[[File:' .. jobIcon .. '|25px|link=]]</div>' | |||
-- 属性图标 | -- 属性图标 | ||
html = html .. '<div style="position: absolute; top: 35px; left: 5px; z-index: 1;">[[File:' .. attributeIcon .. '|25px|link=]]</div>' | |||
-- | -- 角色立绘 | ||
html = html .. '<div style="position: absolute; bottom: 0px; left: 0px; z-index: 1;">[[File:' .. characterImage .. '|150px|link=]]</div>' | |||
-- 角色名称背景 | -- 角色名称背景 | ||
html | html = html .. '<div style="position: absolute; bottom: 5px; left: 0px; width: 150px; height: 30px; background-color: rgba(0, 0, 0, 0.5); color: white; text-align: right; padding-right: 8px; padding-top: 3px; z-index: 2;">' .. name .. '</div>' | ||
-- 稀有度样式 | -- 稀有度样式 | ||
html = html .. '<div class="' .. rarityClass .. '" style="position: absolute; left: 0px; bottom: 0px; z-index: 2;"></div>' | |||
-- 顶层蒙版 | -- 顶层蒙版 | ||
html | html = html .. '<div style="position: absolute; left: 0px; bottom: 0px; z-index: 99;">[[File:战斗员图鉴_顶层蒙版.png|link=]]</div>' | ||
html = html .. '</div><!--\n-->' | |||
return | return html | ||
end | end | ||
-- | -- 主函数 | ||
local | function p.show(frame) | ||
local | local args = frame:getParent().args | ||
local targetCharacter = args[1] or args["角色"] or "" | |||
-- 如果指定了角色名,只显示该角色 | |||
if targetCharacter ~= "" then | |||
local data = p.loadCharacterData(targetCharacter) | |||
if data then | |||
return p.renderCharacterCard(data) | |||
else | |||
return '<span class="error">错误:找不到角色数据 - ' .. targetCharacter .. '</span>' | |||
end | |||
end | |||
-- | -- 显示所有角色 | ||
local | local result = {} | ||
local characters = p.getAllCharacters() | |||
for _, characterName in ipairs(characters) do | |||
for | local data = p.loadCharacterData(characterName) | ||
if data then | |||
table.insert(result, p.renderCharacterCard(data)) | |||
table.insert( | |||
end | end | ||
end | end | ||
return characters | return table.concat(result, '') | ||
end | |||
-- 直接调用函数 | |||
function p.showCharacter(characterName) | |||
local data = p.loadCharacterData(characterName) | |||
return p.renderCharacterCard(data) | |||
end | |||
-- 获取角色数据函数 | |||
function p.getCharacterData(characterName) | |||
return p.loadCharacterData(characterName) | |||
end | |||
-- 调试函数:显示筛选模块中的所有角色 | |||
function p.debugShowAllCharacters(frame) | |||
local result = {} | |||
table.insert(result, "=== 筛选模块中的角色列表 ===") | |||
local characters = p.getAllCharacters() | |||
for i, name in ipairs(characters) do | |||
table.insert(result, i .. ". " .. name) | |||
end | |||
return table.concat(result, "<br/>") | |||
end | end | ||
-- | -- 调试函数:检查特定角色的数据 | ||
function p. | function p.debugShowCharacterData(frame) | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
local | local characterName = args[1] or "蕾欧娜" | ||
local | local data = p.loadCharacterData(characterName) | ||
if not data then | |||
return "角色 " .. characterName .. " 的数据不存在" | |||
end | |||
local result = {} | |||
table.insert(result, "=== " .. characterName .. " 的数据 ===") | |||
for key, value in pairs(data) do | |||
table.insert(result, key .. ": " .. tostring(value)) | |||
end | end | ||
return | return table.concat(result, "<br/>") | ||
end | end | ||
return p | return p | ||
2025年9月24日 (三) 21:44的最新版本
此模块的文档可以在模块:战斗员图鉴/doc创建
local p = {}
-- 使用 mw.loadData 从筛选模块获取数据
local characterData = mw.loadData("模块:战斗员图鉴/筛选")
-- 获取所有角色名称的函数(从筛选模块数据中获取)
function p.getAllCharacters()
local characters = {}
for name, _ in pairs(characterData) do
table.insert(characters, name)
end
-- 按名称排序
table.sort(characters)
return characters
end
-- 从筛选模块加载角色数据
function p.loadCharacterData(characterName)
return characterData[characterName]
end
-- 使用更底层的方法加载模块,避免依赖追踪(保留作为备选方案)
function p.loadCharacterDataSilent(characterName)
-- 首先尝试从筛选模块获取数据
local data = characterData[characterName]
if data then
return data
end
-- 如果筛选模块中没有,再尝试从单独的角色模块加载
local title = mw.title.new("模块:战斗员/" .. characterName)
if not title or not title.exists then
return nil
end
local success, result = pcall(function()
return mw.loadData("模块:战斗员/" .. characterName)
end)
if success and result then
if result.data then
return result.data
elseif type(result) == "table" then
return result
end
end
-- 最后尝试 require
local success2, result2 = pcall(function()
local module = require("模块:战斗员/" .. characterName)
return module
end)
if success2 and result2 and result2.data then
return result2.data
end
return nil
end
-- 批量加载所有角色数据(现在主要从筛选模块获取)
function p.loadAllCharacterDataSilent()
-- 直接返回筛选模块的所有数据
return characterData
end
-- 获取稀有度对应的CSS类
function p.getRarityClass(rarity)
return "rarity-" .. (rarity or "1")
end
-- 获取职业图标文件名
function p.getJobIcon(job)
if job then
return "icon_职业_" .. job .. ".png"
else
return "icon_职业_未知.png"
end
end
-- 获取属性图标文件名
function p.getAttributeIcon(attribute)
if attribute then
return "icon_属性_" .. attribute .. ".png"
else
return "icon_属性_未知.png"
end
end
-- 获取角色立绘文件名
function p.getCharacterImage(characterName)
return "战斗员图鉴_" .. characterName .. ".png"
end
-- 渲染单个角色卡片
function p.renderCharacterCard(data)
if not data then
return ""
end
local name = data["名称"] or "未知"
local rarity = data["稀有度"] or "1"
local job = data["职业"] or ""
local attribute = data["属性"] or ""
local jobIcon = p.getJobIcon(job)
local attributeIcon = p.getAttributeIcon(attribute)
local characterImage = p.getCharacterImage(name)
local rarityClass = p.getRarityClass(rarity)
-- 在开始添加HTML注释来"连接"到前一个元素
local html = '<!--\n--><div class="character-card" style="display: inline-block; vertical-align: top; position: relative; width: 150px; height: 280px; overflow: hidden; margin: 5px;">'
-- 背景
html = html .. '<div style="position: absolute; top: 0px; left: 0px; width: 150px; height: 280px; background-color: #2a2f40; border-radius: 0px 25px 0px 0px; z-index: 0;"></div>'
-- 职业图标
html = html .. '<div style="position: absolute; top: 5px; left: 5px; z-index: 1;">[[File:' .. jobIcon .. '|25px|link=]]</div>'
-- 属性图标
html = html .. '<div style="position: absolute; top: 35px; left: 5px; z-index: 1;">[[File:' .. attributeIcon .. '|25px|link=]]</div>'
-- 角色立绘
html = html .. '<div style="position: absolute; bottom: 0px; left: 0px; z-index: 1;">[[File:' .. characterImage .. '|150px|link=]]</div>'
-- 角色名称背景
html = html .. '<div style="position: absolute; bottom: 5px; left: 0px; width: 150px; height: 30px; background-color: rgba(0, 0, 0, 0.5); color: white; text-align: right; padding-right: 8px; padding-top: 3px; z-index: 2;">' .. name .. '</div>'
-- 稀有度样式
html = html .. '<div class="' .. rarityClass .. '" style="position: absolute; left: 0px; bottom: 0px; z-index: 2;"></div>'
-- 顶层蒙版
html = html .. '<div style="position: absolute; left: 0px; bottom: 0px; z-index: 99;">[[File:战斗员图鉴_顶层蒙版.png|link=]]</div>'
html = html .. '</div><!--\n-->'
return html
end
-- 主函数
function p.show(frame)
local args = frame:getParent().args
local targetCharacter = args[1] or args["角色"] or ""
-- 如果指定了角色名,只显示该角色
if targetCharacter ~= "" then
local data = p.loadCharacterData(targetCharacter)
if data then
return p.renderCharacterCard(data)
else
return '<span class="error">错误:找不到角色数据 - ' .. targetCharacter .. '</span>'
end
end
-- 显示所有角色
local result = {}
local characters = p.getAllCharacters()
for _, characterName in ipairs(characters) do
local data = p.loadCharacterData(characterName)
if data then
table.insert(result, p.renderCharacterCard(data))
end
end
return table.concat(result, '')
end
-- 直接调用函数
function p.showCharacter(characterName)
local data = p.loadCharacterData(characterName)
return p.renderCharacterCard(data)
end
-- 获取角色数据函数
function p.getCharacterData(characterName)
return p.loadCharacterData(characterName)
end
-- 调试函数:显示筛选模块中的所有角色
function p.debugShowAllCharacters(frame)
local result = {}
table.insert(result, "=== 筛选模块中的角色列表 ===")
local characters = p.getAllCharacters()
for i, name in ipairs(characters) do
table.insert(result, i .. ". " .. name)
end
return table.concat(result, "<br/>")
end
-- 调试函数:检查特定角色的数据
function p.debugShowCharacterData(frame)
local args = frame:getParent().args
local characterName = args[1] or "蕾欧娜"
local data = p.loadCharacterData(characterName)
if not data then
return "角色 " .. characterName .. " 的数据不存在"
end
local result = {}
table.insert(result, "=== " .. characterName .. " 的数据 ===")
for key, value in pairs(data) do
table.insert(result, key .. ": " .. tostring(value))
end
return table.concat(result, "<br/>")
end
return p