模块

语音:修订间差异

来自卡厄思梦境WIKI

律Rhyme留言 | 贡献
创建页面,内容为“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 .. " 的语音数据"…”
 
律Rhyme留言 | 贡献
无编辑摘要
 
(未显示同一用户的8个中间版本)
第21行: 第21行:
     end
     end
      
      
     -- 加载 Widget
     -- 语音文件基础 URL
     local widgetOutput = frame:extensionTag('templatestyles', '', {src = 'Widget:VoicePlayer'})
     local baseUrl = "https://cznwiki.com/voice"
      
      
     -- 创建表格
     -- 创建表格
第31行: 第31行:
     local headerRow = html:tag('tr')
     local headerRow = html:tag('tr')
     headerRow:tag('th'):wikitext('类型'):css('width', '15%')
     headerRow:tag('th'):wikitext('类型'):css('width', '15%')
     headerRow:tag('th'):wikitext('韩语'):css('width', '5%')
     headerRow:tag('th'):wikitext('韩语'):css('width', '5%'):css('text-align', 'center')
     headerRow:tag('th'):wikitext('日语'):css('width', '5%')
     headerRow:tag('th'):wikitext('日语'):css('width', '5%'):css('text-align', 'center')
     headerRow:tag('th'):wikitext('文本'):css('width', '75%')
      
    -- 文本列表头,包含语言切换按钮
    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)
      
      
     -- 数据行
     -- 数据行
第43行: 第78行:
          
          
         -- 韩语播放按钮
         -- 韩语播放按钮
         local krPath = "/voice/kr/" .. characterId .. "/" .. voice.file
         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')
         row:tag('td')
             :css('text-align', 'center')
             :css('text-align', 'center')
             :wikitext(
             :node(krButton)
                '<button class="voice-play-button" onclick="VoicePlayer.play(\'' ..
                krPath .. '\', this)">▶</button>'
            )
          
          
         -- 日语播放按钮
         -- 日语播放按钮
         local jpPath = "/voice/jp/" .. characterId .. "/" .. voice.file
         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')
         row:tag('td')
             :css('text-align', 'center')
             :css('text-align', 'center')
             :wikitext(
             :node(jpButton)
                '<button class="voice-play-button" onclick="VoicePlayer.play(\'' ..  
       
                 jpPath .. '\', this)">▶</button>'
        -- 文本内容(使用 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)
        local textContent = '<div class="voice-text">' ..
                          (voice.text_cn or "") .. "<br>" ..
                          (voice.text_kr or "") .. "<br>" ..
                          (voice.text_jp or "") ..
                          '</div>'
         row:tag('td'):wikitext(textContent)
     end
     end
      
      
     return widgetOutput .. tostring(html)
     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