本WIKI由 娃娃鱼报社 运营建设,站长:呆毛

欢迎 收藏本WIKI 防止迷路,本WIKI 编辑权限开放,欢迎大家共同建设。

娃娃鱼报社交流群:838573532 问题反馈 收藏方法

全站通知:

模块:U118114p1

来自雷索纳斯WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

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

local p = {}
-- 加载指定页面
local getJsonPage = require('模块:数据库-乘员')
local getJsonPage_audio = require('模块:数据库-乘员/音频')

-- 基础参数
function RoleInfo_Base(frame, data)
    -- 稀有度
    frame:callParserFunction{
        name = '#vardefine',
        args = {'稀有度', data.rarity}
    }
    -- 站位
    frame:callParserFunction{name = '#vardefine', args = {'站位', data.row}}
    -- 技能1
    frame:callParserFunction{
        name = '#vardefine',
        args = {'技能1', data.skill1_name}
    }
    -- 技能2
    frame:callParserFunction{
        name = '#vardefine',
        args = {'技能2', data.skill2_name}
    }
    -- 得意技能
    frame:callParserFunction{
        name = '#vardefine',
        args = {'得意技能', data.skill3_name}
    }
    -- 便当
    frame:callParserFunction{name = '#vardefine', args = {'便当', data.bento}}
    -- 便当加值
    frame:callParserFunction{
        name = '#vardefine',
        args = {'便当加值', data.bentoAdd}
    }
    -- 便当保质期
    frame:callParserFunction{
        name = '#vardefine',
        args = {'便当保质期', data.bentoValidity}
    }
    -- 便当便签
    frame:callParserFunction{
        name = '#vardefine',
        args = {'便当便签', data.bentoMemo}
    }
end

-- 等级和默契度面板
function RoleInfo_Value(frame, data)
    -- 等级1数值
    frame:callParserFunction{
        name = '#vardefine',
        args = {'等级1数值', data.lv1Value}
    }
    -- 等级1数值
    frame:callParserFunction{
        name = '#vardefine',
        args = {'等级7数值', data.lv7Value}
    }
    -- 等级1数值
    frame:callParserFunction{
        name = '#vardefine',
        args = {'等级14数值', data.lv14Value}
    }
    -- 等级1数值
    frame:callParserFunction{
        name = '#vardefine',
        args = {'等级21数值', data.lv21Value}
    }
    -- 等级1数值
    frame:callParserFunction{
        name = '#vardefine',
        args = {'等级28数值', data.lv28Value}
    }
    -- 等级1数值
    frame:callParserFunction{
        name = '#vardefine',
        args = {'等级35数值', data.lv35Value}
    }
    -- 等级1数值
    frame:callParserFunction{
        name = '#vardefine',
        args = {'等级60数值', data.lv60Value}
    }
    -- 默契度1数值
    frame:callParserFunction{
        name = '#vardefine',
        args = {'默契度1数值', data.tacit1Value}
    }
    -- 默契度2数值
    frame:callParserFunction{
        name = '#vardefine',
        args = {'默契度2数值', data.tacit2Value}
    }
    -- 默契度3数值
    frame:callParserFunction{
        name = '#vardefine',
        args = {'默契度3数值', data.tacit3Value}
    }
    -- 默契度4数值
    frame:callParserFunction{
        name = '#vardefine',
        args = {'默契度4数值', data.tacit4Value}
    }
    -- 默契度5数值
    frame:callParserFunction{
        name = '#vardefine',
        args = {'默契度5数值', data.tacit5Value}
    }
    -- 默契度6数值
    frame:callParserFunction{
        name = '#vardefine',
        args = {'默契度6数值', data.tacit6Value}
    }
    -- 默契度7数值
    frame:callParserFunction{
        name = '#vardefine',
        args = {'默契度7数值', data.tacit7Value}
    }
    -- 默契度8数值
    frame:callParserFunction{
        name = '#vardefine',
        args = {'默契度8数值', data.tacit8Value}
    }
    -- 默契度9数值
    frame:callParserFunction{
        name = '#vardefine',
        args = {'默契度9数值', data.tacit9Value}
    }
    -- 默契度10数值
    frame:callParserFunction{
        name = '#vardefine',
        args = {'默契度10数值', data.tacit10Value}
    }

end

-- 养成(共振+觉醒)
function RoleInfo_Development(frame, data)
    -- 共振1名称
    frame:callParserFunction{
        name = '#vardefine',
        args = {'共振1名称', data.syntony1}
    }
    -- 共振1描述
    frame:callParserFunction{
        name = '#vardefine',
        args = {'共振1描述', data.syntony1_info}
    }
    -- 共振2名称
    frame:callParserFunction{
        name = '#vardefine',
        args = {'共振2名称', data.syntony2}
    }
    -- 共振2描述
    frame:callParserFunction{
        name = '#vardefine',
        args = {'共振2描述', data.syntony2_info}
    }

    -- 共振4名称
    frame:callParserFunction{
        name = '#vardefine',
        args = {'共振4名称', data.syntony4}
    }
    -- 共振4描述
    frame:callParserFunction{
        name = '#vardefine',
        args = {'共振4描述', data.syntony4_info}
    }
    -- 共振5名称
    frame:callParserFunction{
        name = '#vardefine',
        args = {'共振5名称', data.syntony5}
    }
    -- 共振5描述
    frame:callParserFunction{
        name = '#vardefine',
        args = {'共振5描述', data.syntony5_info}
    }
    -- 生活技能1名称
    frame:callParserFunction{
        name = '#vardefine',
        args = {'生活技能1名称', data.livingSkill1}
    }
    -- 生活技能1描述
    frame:callParserFunction{
        name = '#vardefine',
        args = {'生活技能1描述', data.livingSkill1_info}
    }
    -- 生活技能2名称
    frame:callParserFunction{
        name = '#vardefine',
        args = {'生活技能2名称', data.livingSkill2}
    }
    -- 生活技能2描述
    frame:callParserFunction{
        name = '#vardefine',
        args = {'生活技能2描述', data.livingSkill2_info}
    }
    -- 生活技能+名称
    frame:callParserFunction{
        name = '#vardefine',
        args = {'生活技能+名称', data.livingSkill5}
    }
    -- 生活技能+描述
    frame:callParserFunction{
        name = '#vardefine',
        args = {'生活技能+描述', data.livingSkill5_info}
    }
    -- 觉醒1名称
    frame:callParserFunction{
        name = '#vardefine',
        args = {'觉醒1名称', data.Awakening1}
    }
    -- 觉醒1描述
    frame:callParserFunction{
        name = '#vardefine',
        args = {'觉醒1描述', data.Awakening1_info}
    }
    -- 觉醒2名称
    frame:callParserFunction{
        name = '#vardefine',
        args = {'觉醒2名称', data.awakening2}
    }
    -- 觉醒2描述
    frame:callParserFunction{
        name = '#vardefine',
        args = {'觉醒2描述', data.awakening2_info}
    }

    local atk_info = "攻击力+"
    local def_info = "防御力+"
    local info3 = ""
    local info4 = ""
    if data.rarity == "SSR" then
        atk_info = atk_info .. "100"
        def_info = def_info .. "100"
    elseif data.rarity == "SR" then
        atk_info = atk_info .. "80"
        def_info = def_info .. "80"
    elseif data.rarity == "R" then
        atk_info = atk_info .. "60"
        def_info = def_info .. "60"
    elseif data.rarity == "N" then
        atk_info = atk_info .. "40"
        def_info = def_info .. "40"
    end
    if data.awakening3 == "强韧" then
        info3 = def_info
    elseif data.awakening3 == "斗志" then
        info3 = atk_info
    end
    if data.awakening4 == "强韧" then
        info4 = def_info
    elseif data.awakening4 == "斗志" then
        info4 = atk_info
    end

    -- 觉醒3名称
    frame:callParserFunction{
        name = '#vardefine',
        args = {'觉醒3名称', data.awakening3}
    }
    -- 觉醒3描述
    frame:callParserFunction{
        name = '#vardefine',
        args = {'觉醒3描述', info3}
    }
    -- 觉醒4名称
    frame:callParserFunction{
        name = '#vardefine',
        args = {'觉醒4名称', data.awakening4}
    }
    -- 觉醒4描述
    frame:callParserFunction{
        name = '#vardefine',
        args = {'觉醒4描述', info4}
    }

    -- 觉醒5名称
    frame:callParserFunction{
        name = '#vardefine',
        args = {'觉醒5名称', data.awakening5}
    }
    -- 觉醒5描述
    frame:callParserFunction{
        name = '#vardefine',
        args = {'觉醒5描述', data.awakening5_info}
    }
end

-- 档案
function RoleInfo_Record(frame, data)
	-- 中文名
    frame:callParserFunction{
        name = '#vardefine',
        args = {'中文名', data.name}
    }
    -- 英文名
    frame:callParserFunction{
        name = '#vardefine',
        args = {'英文名', data.name_en}
    }
    -- 中文声优
    frame:callParserFunction{
        name = '#vardefine',
        args = {'中文声优', data.cv_zh}
    }
    -- 日文声优
    frame:callParserFunction{
        name = '#vardefine',
        args = {'日文声优', data.cv_jp}
    }
    -- 生日
    frame:callParserFunction{
        name = '#vardefine',
        args = {'生日', data.birthday}
    }
    -- 性别
    frame:callParserFunction{
        name = '#vardefine',
        args = {'性别', data.gender}
    }
    -- 身高
    frame:callParserFunction{
        name = '#vardefine',
        args = {'身高', data.r_height}
    }
    -- 升构能力
    frame:callParserFunction{
        name = '#vardefine',
        args = {'升构能力', data.structure}
    }
    -- 出身地
    frame:callParserFunction{
        name = '#vardefine',
        args = {'出身地', data.hometown}
    }
    -- 现身份
    frame:callParserFunction{
        name = '#vardefine',
        args = {'现身份', data.identity}
    }
    -- 势力
    frame:callParserFunction{
        name = '#vardefine',
        args = {'势力', data.factions}
    }
    -- 自我介绍
    frame:callParserFunction{
        name = '#vardefine',
        args = {'自我介绍', data.selfIntroduction}
    }
    -- 经历
    frame:callParserFunction{
        name = '#vardefine',
        args = {'经历', data.resume}
    } -- 档案1
    frame:callParserFunction{
        name = '#vardefine',
        args = {'档案1', data.archives1}
    } -- 档案2
    frame:callParserFunction{
        name = '#vardefine',
        args = {'档案2', data.archives2}
    } -- 档案3
    frame:callParserFunction{
        name = '#vardefine',
        args = {'档案3', data.archives3}
    } -- 档案4
    frame:callParserFunction{
        name = '#vardefine',
        args = {'档案4', data.archives4}
    }
end

function RoleInfo_Audio(frame, data)
	frame:callParserFunction{
        name = '#vardefine',
        args = {'中文名', data.name}
    }
    -- 循环获取音频文本
    for i = 1, 21 do
        local loopIndex = string.format("%02d", i) -- 格式化为两位数,不足的补零
        frame:callParserFunction{
            name = '#vardefine',
            args = {'audio_' .. loopIndex, data['audio_' .. loopIndex]}
        }
    end
end

-- 从数据转换到筛选标签
function DataToFilterTag(data)
    local outputStr = "" -- 将outputStr定义为一个字符串
    -- 将"、"替换为逗号
    data = string.gsub(data, "、", ",")
    -- 循环每个数组执行下一步
    for word in string.gmatch(data, "[^,]+") do

        outputStr = outputStr .. word .. ","
    end

    -- 去掉最后一个逗号
    outputStr = string.sub(outputStr, 1, -2)

    return outputStr
end

-- 从数据转换到链接文本
function DataToLinkText(data, LineFeed)
    -- 新建输出项
    local outputStr = ""

    if not LineFeed then LineFeed = false end

    -- 将"、"替换为逗号
    data = string.gsub(data, "、", ",")

    -- 循环每个数组执行下一步
    for item in string.gmatch(data, "[^,]+") do
        outputStr = outputStr .. '<a data-bs-toggle="tooltip" data-bs-html="true" src="./' .. item .. '" data-bs-title="{{#invoke:数据库调用-乘员|Skill|name='.. item .. '|type=简}}">'.. item .. '</a>'

        if LineFeed == true then
            outputStr = outputStr .. "<br>"
        else
            outputStr = outputStr .. "、"
        end
    end

    if LineFeed == true then
        -- 去掉最后一个<br>
        outputStr = string.sub(outputStr, 1, -5)
    else
        -- 去掉最后一个顿号
        outputStr = string.sub(outputStr, 1, -4)
    end
    return outputStr
end

-- 角色获取
function p.Role(frame)
    -- 获取输入角色名
    local input = frame.args["name"]
    local cacheJson = {}
    cacheJson = getJsonPage.role

    for i, data in ipairs(cacheJson) do
        if input == data.name then -- 数据已确认,开始填充       
            RoleInfo_Base(frame, data)
            RoleInfo_Value(frame, data)
            RoleInfo_Development(frame, data)
            RoleInfo_Record(frame, data)
            break
        end
    end

    cacheJson = getJsonPage_audio.roleAudio
    for i, data in ipairs(cacheJson) do
        if input == data.name then -- 数据已确认,开始填充       
            RoleInfo_Audio(frame, data)
            break
        end
    end
end

-- 角色筛选项
function p.RoleFilterItem(frame)
    -- 新建输出对象
    local output = ""
    local cacheJson = getJsonPage.role

    for i, data in ipairs(cacheJson) do
        local formattedData = p.setRoleItemData(data)
        output = output ..
                     frame:expandTemplate{
                title = '乘员筛选/列表',
                args = formattedData
            }
    end
    return output
end

-- 设置角色行所需内容
function p.setRoleItemData(data)
    -- 创建输出对象
    local formattedData = {}
    -- 指定键值对,对应data参数
    formattedData["1"] = data["name"]
    formattedData["2"] = data["rarity"]
    formattedData["3"] = data["gender"]
    formattedData["4"] = data["row"]
    formattedData["5"] = data["factions"]
    formattedData["6"] = DataToLinkText(data["fightTag"])
    formattedData["getTag"] = DataToFilterTag(data["fightTag"])
    formattedData["7"] = DataToLinkText(data["livingSkillType"])
    formattedData["8"] = DataToFilterTag(data["livingSkillType"])

    return formattedData
end

-- 技能调用 因无法处理衍生卡的问题,所以更换新的方式
function p.Skill(frame)
    -- 获取输入技能名
    local input = frame.args["name"]

    local type = frame.args["type"]

    -- 检查输入参数是否存在
    if not type then
        type = "" -- 如果不存在参数 i,则设置一个默认值
    end

    local outputStr = ""
    local cacheJson = {}

    -- 从全局变量getJsonPage中获取技能信息
    cacheJson = getJsonPage.skill

    -- 遍历技能信息数组
    for i, data in ipairs(cacheJson) do
        -- 如果输入技能名匹配,则开始处理
        if input == data.name then
            -- 格式化数据
            local formattedData = p.formatSkillData(frame, data)

            -- 扩展模板并拼接到输出字符串中
            outputStr = outputStr .. frame:expandTemplate{
                title = '乘员图鉴/技能' .. type,
                args = formattedData
            }

            -- 将"、"替换为逗号
            data.derivedCard = string.gsub(data.derivedCard, "、", ",")

            -- 拆分 derivedCard 字符串并循环处理
            for derived in string.gmatch(data.derivedCard, "[^,]+") do
                for i, data in ipairs(cacheJson) do
                    -- 如果衍生技能匹配,则开始处理
                    if derived == data.name then
                        -- 格式化数据
                        local formattedData = p.formatSkillData(frame, data)
                        formattedData["衍生"] = "是"
                        -- 扩展模板并拼接到输出字符串中
                        outputStr = outputStr .. frame:expandTemplate{
                            title = 'U118114p2' .. type,
                            args = formattedData
                        }
                        break
                    end
                end
            end
            break
        end
    end

    return outputStr
end

-- 技能参数
function p.formatSkillData(frame, data)
    local formattedData = {}

    -- 指定键值对,而不是循环
    formattedData["名称"] = data["name"]
    formattedData["角色"] = data["vestIn"]
    formattedData["费用"] = data["cost"]
    formattedData["张数"] = data["num"]
    formattedData["描述"] = data["describe"]
    formattedData["引用词缀"] = data["affix"]
    formattedData["队长技条件"] = data["captainCondition"]

    return formattedData
end

return p -- 返回包含函数和数据的导出表