战斗员图鉴:修订间差异
来自卡厄思梦境WIKI
小无编辑摘要 |
无编辑摘要 |
||
| 第3行: | 第3行: | ||
-- 获取所有战斗员模块的函数 | -- 获取所有战斗员模块的函数 | ||
function p.getAllCharacters() | function p.getAllCharacters() | ||
local characters = { | local characters = { | ||
"蕾欧娜", | "蕾欧娜", | ||
| 第50行: | 第48行: | ||
end | end | ||
-- 渲染单个角色卡片 | -- 渲染单个角色卡片 - 关键修改:使用span包装并设置样式 | ||
function p.renderCharacterCard(data | function p.renderCharacterCard(data) | ||
if not data then | if not data then | ||
return "" | return "" | ||
| 第66行: | 第64行: | ||
local rarityClass = p.getRarityClass(rarity) | local rarityClass = p.getRarityClass(rarity) | ||
-- | -- 使用span作为最外层容器,并且不包含任何换行符 | ||
local html = '<div class="character-card" style="position: relative; width: 150px; height: 280px; overflow: hidden | local html = '<span class="character-card-wrapper" style="display: inline-block; vertical-align: top; margin: 0; padding: 0;">' | ||
html = html .. '<div class="character-card" style="position: relative; width: 150px; height: 280px; overflow: hidden; margin: 5px; vertical-align: top;">' | |||
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: 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: 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; 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: 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 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 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 style="position: absolute; left: 0px; bottom: 0px; z-index: 99;">[[File:战斗员图鉴_顶层蒙版.png|link=]]</div>' | ||
html = html .. '</div></span>' | |||
html = html .. '</div>' | |||
return html | return html | ||
| 第104行: | 第83行: | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
local targetCharacter = args[1] or args["角色"] or "" | local targetCharacter = args[1] or args["角色"] or "" | ||
-- 如果指定了角色名,只显示该角色 | -- 如果指定了角色名,只显示该角色 | ||
| 第110行: | 第88行: | ||
local data = p.loadCharacterData(targetCharacter) | local data = p.loadCharacterData(targetCharacter) | ||
if data then | if data then | ||
return p.renderCharacterCard(data | return p.renderCharacterCard(data) | ||
else | else | ||
return '<span class="error">错误:找不到角色数据 - ' .. targetCharacter .. '</span>' | return '<span class="error" style="color: #ff0000; font-weight: bold;">错误:找不到角色数据 - ' .. targetCharacter .. '</span>' | ||
end | end | ||
end | end | ||
| 第120行: | 第98行: | ||
local characters = p.getAllCharacters() | local characters = p.getAllCharacters() | ||
table.insert(result, '<div class="character-gallery" style="font-size: 0; line-height: 0;">') | |||
table.insert(result, '<div class="character-gallery" style=" | |||
for _, characterName in ipairs(characters) do | for _, characterName in ipairs(characters) do | ||
local data = p.loadCharacterData(characterName) | local data = p.loadCharacterData(characterName) | ||
if data then | if data then | ||
table.insert(result, p.renderCharacterCard(data | table.insert(result, p.renderCharacterCard(data)) | ||
end | end | ||
end | end | ||
| 第140行: | 第117行: | ||
local result = {} | local result = {} | ||
table.insert(result, '<div class="character-gallery" style="font-size: 0; line-height: 0;">') | |||
table.insert(result, '<div class="character-gallery" style=" | |||
for i = 1, 20 do | |||
for i = 1, 20 do | |||
local characterName = args[i] | local characterName = args[i] | ||
if characterName and characterName ~= "" then | if characterName and characterName ~= "" then | ||
local data = p.loadCharacterData(characterName) | local data = p.loadCharacterData(characterName) | ||
if data then | if data then | ||
table.insert(result, p.renderCharacterCard(data | table.insert(result, p.renderCharacterCard(data)) | ||
else | else | ||
table.insert(result, '<span class="error">错误:找不到角色数据 - ' .. characterName .. '</span>') | table.insert(result, '<span class="error" style="color: #ff0000; font-weight: bold;">错误:找不到角色数据 - ' .. characterName .. '</span>') | ||
end | end | ||
end | end | ||
end | end | ||
table.insert(result, '</div>') | table.insert(result, '</div>') | ||
| 第162行: | 第136行: | ||
end | end | ||
-- | -- 直接调用函数 | ||
function p.showCharacter(characterName) | function p.showCharacter(characterName) | ||
local data = p.loadCharacterData(characterName) | local data = p.loadCharacterData(characterName) | ||
return p.renderCharacterCard(data | return p.renderCharacterCard(data) | ||
end | end | ||
-- | -- 获取角色数据函数 | ||
function p.getCharacterData(characterName) | function p.getCharacterData(characterName) | ||
return p.loadCharacterData(characterName) | return p.loadCharacterData(characterName) | ||
2025年9月24日 (三) 21:00的版本
此模块的文档可以在模块:战斗员图鉴/doc创建
local p = {}
-- 获取所有战斗员模块的函数
function p.getAllCharacters()
local characters = {
"蕾欧娜",
-- 在这里添加其他角色名称
}
return characters
end
-- 安全地加载角色数据
function p.loadCharacterData(characterName)
local success, characterModule = pcall(require, "模块:战斗员/" .. characterName)
if success and characterModule and characterModule.data then
return characterModule.data
else
return nil
end
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
-- 渲染单个角色卡片 - 关键修改:使用span包装并设置样式
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)
-- 使用span作为最外层容器,并且不包含任何换行符
local html = '<span class="character-card-wrapper" style="display: inline-block; vertical-align: top; margin: 0; padding: 0;">'
html = html .. '<div class="character-card" style="position: relative; width: 150px; height: 280px; overflow: hidden; margin: 5px; vertical-align: top;">'
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></span>'
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" style="color: #ff0000; font-weight: bold;">错误:找不到角色数据 - ' .. targetCharacter .. '</span>'
end
end
-- 显示所有角色
local result = {}
local characters = p.getAllCharacters()
table.insert(result, '<div class="character-gallery" style="font-size: 0; line-height: 0;">')
for _, characterName in ipairs(characters) do
local data = p.loadCharacterData(characterName)
if data then
table.insert(result, p.renderCharacterCard(data))
end
end
table.insert(result, '</div>')
return table.concat(result, '')
end
-- 批量显示角色函数
function p.showMultiple(frame)
local args = frame:getParent().args
local result = {}
table.insert(result, '<div class="character-gallery" style="font-size: 0; line-height: 0;">')
for i = 1, 20 do
local characterName = args[i]
if characterName and characterName ~= "" then
local data = p.loadCharacterData(characterName)
if data then
table.insert(result, p.renderCharacterCard(data))
else
table.insert(result, '<span class="error" style="color: #ff0000; font-weight: bold;">错误:找不到角色数据 - ' .. characterName .. '</span>')
end
end
end
table.insert(result, '</div>')
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
return p