语音:修订间差异
来自卡厄思梦境WIKI
无编辑摘要 |
无编辑摘要 |
||
| (未显示同一用户的6个中间版本) | |||
| 第21行: | 第21行: | ||
end | end | ||
-- | -- 语音文件基础 URL | ||
local | local baseUrl = "https://cznwiki.com/voice" | ||
-- 创建表格 | -- 创建表格 | ||
| 第33行: | 第33行: | ||
headerRow:tag('th'):wikitext('韩语'):css('width', '5%'):css('text-align', 'center') | headerRow:tag('th'):wikitext('韩语'):css('width', '5%'):css('text-align', 'center') | ||
headerRow:tag('th'):wikitext('日语'):css('width', '5%'):css('text-align', 'center') | headerRow:tag('th'):wikitext('日语'):css('width', '5%'):css('text-align', 'center') | ||
headerRow:tag('th'):wikitext('文本'):css(' | |||
-- 文本列表头,包含语言切换按钮 | |||
local textHeader = headerRow:tag('th'):css('width', '75%') | |||
textHeader:wikitext('文本') | |||
-- 创建语言切换按钮容器 | |||
local langButtons = mw.html.create('span') | |||
:css('float', 'right') | |||
:css('margin-left', '10px') | |||
-- 中文按钮(默认选中) | |||
local btnCn = mw.html.create('div') | |||
:addClass('lang-switch-btn') | |||
:addClass('lang-active') | |||
:attr('data-lang', 'cn') | |||
:css('display', 'inline-block') | |||
:wikitext('中文') | |||
langButtons:node(btnCn) | |||
-- 韩文按钮 | |||
local btnKr = mw.html.create('div') | |||
:addClass('lang-switch-btn') | |||
:attr('data-lang', 'kr') | |||
:css('display', 'inline-block') | |||
:wikitext('韩文') | |||
langButtons:node(btnKr) | |||
-- 日文按钮 | |||
local btnJp = mw.html.create('div') | |||
:addClass('lang-switch-btn') | |||
:attr('data-lang', 'jp') | |||
:css('display', 'inline-block') | |||
:wikitext('日文') | |||
langButtons:node(btnJp) | |||
textHeader:node(langButtons) | |||
-- 数据行 | -- 数据行 | ||
| 第42行: | 第77行: | ||
row:tag('td'):wikitext(voice.type) | row:tag('td'):wikitext(voice.type) | ||
-- | -- 韩语播放按钮 | ||
local krPath = " | local krPath = baseUrl .. "/kr/" .. characterId .. "/" .. voice.file | ||
local krButton = mw.html.create('div') | local krButton = mw.html.create('div') | ||
:addClass('voice-play-button') | :addClass('voice-play-button') | ||
:attr(' | :attr('data-voice-url', krPath) | ||
:wikitext('▶') | :wikitext('▶') | ||
| 第53行: | 第88行: | ||
:node(krButton) | :node(krButton) | ||
-- | -- 日语播放按钮 | ||
local jpPath = " | local jpPath = baseUrl .. "/jp/" .. characterId .. "/" .. voice.file | ||
local jpButton = mw.html.create('div') | local jpButton = mw.html.create('div') | ||
:addClass('voice-play-button') | :addClass('voice-play-button') | ||
:attr(' | :attr('data-voice-url', jpPath) | ||
:wikitext('▶') | :wikitext('▶') | ||
| 第64行: | 第99行: | ||
:node(jpButton) | :node(jpButton) | ||
-- | -- 文本内容(使用 span 包装每种语言) | ||
local textDiv = mw.html.create('div') | local textDiv = mw.html.create('div') | ||
:addClass('voice-text') | :addClass('voice-text') | ||
: | |||
(voice.text_cn | -- 中文文本(默认显示) | ||
(voice.text_kr | if voice.text_cn and voice.text_cn ~= "" then | ||
(voice.text_jp | textDiv:tag('span') | ||
:addClass('text-cn') | |||
:css('display', 'block') | |||
:wikitext(voice.text_cn) | |||
end | |||
-- 韩文文本(默认隐藏) | |||
if voice.text_kr and voice.text_kr ~= "" then | |||
textDiv:tag('span') | |||
:addClass('text-kr') | |||
:css('display', 'none') | |||
:wikitext(voice.text_kr) | |||
end | |||
-- 日文文本(默认隐藏) | |||
if voice.text_jp and voice.text_jp ~= "" then | |||
textDiv:tag('span') | |||
:addClass('text-jp') | |||
:css('display', 'none') | |||
:wikitext(voice.text_jp) | |||
end | |||
row:tag('td'):node(textDiv) | row:tag('td'):node(textDiv) | ||
end | end | ||
return | return tostring(html) | ||
end | end | ||
return p | return p | ||
2025年11月8日 (六) 15:46的最新版本
此模块的文档可以在模块:语音/doc创建
local p = {}
function p.main(frame)
local characterName = frame.args[1] or frame:getParent().args[1]
if not characterName or characterName == "" then
return "错误:请提供战斗员名称"
end
-- 尝试加载语音数据模块
local success, voiceData = pcall(require, "模块:语音/" .. characterName)
if not success then
return "错误:未找到战斗员 " .. characterName .. " 的语音数据"
end
-- 从文件名中提取角色ID
local characterId = ""
if voiceData[1] and voiceData[1].file then
characterId = voiceData[1].file:match("vo_(%d+)_")
end
-- 语音文件基础 URL
local baseUrl = "https://cznwiki.com/voice"
-- 创建表格
local html = mw.html.create('table')
:addClass('wikitable voice-table')
-- 表头
local headerRow = html:tag('tr')
headerRow:tag('th'):wikitext('类型'):css('width', '15%')
headerRow:tag('th'):wikitext('韩语'):css('width', '5%'):css('text-align', 'center')
headerRow:tag('th'):wikitext('日语'):css('width', '5%'):css('text-align', 'center')
-- 文本列表头,包含语言切换按钮
local textHeader = headerRow:tag('th'):css('width', '75%')
textHeader:wikitext('文本')
-- 创建语言切换按钮容器
local langButtons = mw.html.create('span')
:css('float', 'right')
:css('margin-left', '10px')
-- 中文按钮(默认选中)
local btnCn = mw.html.create('div')
:addClass('lang-switch-btn')
:addClass('lang-active')
:attr('data-lang', 'cn')
:css('display', 'inline-block')
:wikitext('中文')
langButtons:node(btnCn)
-- 韩文按钮
local btnKr = mw.html.create('div')
:addClass('lang-switch-btn')
:attr('data-lang', 'kr')
:css('display', 'inline-block')
:wikitext('韩文')
langButtons:node(btnKr)
-- 日文按钮
local btnJp = mw.html.create('div')
:addClass('lang-switch-btn')
:attr('data-lang', 'jp')
:css('display', 'inline-block')
:wikitext('日文')
langButtons:node(btnJp)
textHeader:node(langButtons)
-- 数据行
for _, voice in ipairs(voiceData) do
local row = html:tag('tr')
-- 类型
row:tag('td'):wikitext(voice.type)
-- 韩语播放按钮
local krPath = baseUrl .. "/kr/" .. characterId .. "/" .. voice.file
local krButton = mw.html.create('div')
:addClass('voice-play-button')
:attr('data-voice-url', krPath)
:wikitext('▶')
row:tag('td')
:css('text-align', 'center')
:node(krButton)
-- 日语播放按钮
local jpPath = baseUrl .. "/jp/" .. characterId .. "/" .. voice.file
local jpButton = mw.html.create('div')
:addClass('voice-play-button')
:attr('data-voice-url', jpPath)
:wikitext('▶')
row:tag('td')
:css('text-align', 'center')
:node(jpButton)
-- 文本内容(使用 span 包装每种语言)
local textDiv = mw.html.create('div')
:addClass('voice-text')
-- 中文文本(默认显示)
if voice.text_cn and voice.text_cn ~= "" then
textDiv:tag('span')
:addClass('text-cn')
:css('display', 'block')
:wikitext(voice.text_cn)
end
-- 韩文文本(默认隐藏)
if voice.text_kr and voice.text_kr ~= "" then
textDiv:tag('span')
:addClass('text-kr')
:css('display', 'none')
:wikitext(voice.text_kr)
end
-- 日文文本(默认隐藏)
if voice.text_jp and voice.text_jp ~= "" then
textDiv:tag('span')
:addClass('text-jp')
:css('display', 'none')
:wikitext(voice.text_jp)
end
row:tag('td'):node(textDiv)
end
return tostring(html)
end
return p