此处公告通常对读者进行申明或对该WIKI某些规则进行公告,请在确认后修改本通告。本WIKI编辑权限开放,欢迎收藏起来防止迷路,也希望有爱的小伙伴和我们一起编辑哟~

全站通知:

模块:SkillData

来自龙族:卡塞尔之门WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块的文档可以在模块:SkillData/doc创建

-- Module:SkillData
-- 从Character模块接受技能相关的附加buff并进行高亮处理,数据位于Data:SkillData.json
local p = {}
local Highlight = require('Module:Highlight')

function getBuffEffect(buffName)
    -- 去除前缀,获取实际的buff名称
    local actualBuffName = buffName:sub(3)  -- 去除前缀(假设前缀长度为2)
    local prefix = buffName:sub(1, 2)  -- 获取前缀

    -- 根据前缀选择相应的 JSON 文件
    local jsonFile
    if prefix == 'sp' then
        jsonFile = 'Data:special.json'
    elseif prefix == 'de' then
        jsonFile = 'Data:debuff.json'
    elseif prefix == 'bf' then
        jsonFile = 'Data:buff.json'
    else
        return ''  -- 如果前缀不正确,返回空字符串
    end

    local buffData = mw.text.jsonDecode(mw.title.new(jsonFile):getContent() or '{}')
    
    local buff = buffData[actualBuffName]
    if not buff then
        return ''  -- 如果没有找到buff,返回空字符串
    end

    local effectText = buff.effect
    local greyOutput = ''
    if buff.grey and #buff.grey > 0 then
        local greyElements = {}
        for _, element in ipairs(buff.grey) do
            table.insert(greyElements, string.format('<span style="color:#b7b7b7"><%s></span>', element))
        end
        greyOutput = table.concat(greyElements) .. '<br/>'  -- 连接这些元素并添加换行
    end

    -- 检测 addition 是否存在并处理嵌套 buff
    local additionalEffects = ''
    if buff.addition and #buff.addition > 0 then
        local additionalBuffs = {}
        for _, additionalBuffName in ipairs(buff.addition) do
            local additionalEffect = getBuffEffect(additionalBuffName)  -- 递归调用
            table.insert(additionalBuffs, additionalEffect)
        end
        additionalEffects = table.concat(additionalBuffs)  -- 合并附加效果
    end

    -- 调用高亮模块处理效果文本
    local highlightedEffect = highlightContent(effectText)

    -- 确定技能名的类
    local className = ''
    if prefix == 'sp' then
        className = 'style="color:#ef92ff"'
    elseif prefix == 'de' then
        className = 'style="color:#ff5f5f"'
    elseif prefix == 'bf' then
        className = 'style="color:#93b4ff"'
    end

    -- 返回技能名和效果,包括嵌套的附加效果
    return string.format('<div style="font-size:small">· <span %s>【%s】</span><br/>%s%s%s</div>', className, buff.name, greyOutput, highlightedEffect, additionalEffects)
end

return p