本WIKI编辑权限开放,欢迎大家共同建设
也可以 收藏本WIKI 防止迷路
编辑帮助:目录
目前Wiki编辑组急缺美术,希望有能力、有意向的老师可以参与一起建设本站

全站通知:

模块:数据库调用-稳态立方

来自驱入虚空WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

简介

本wiki中,大量通用格式的数据是通过Lua(模块)制作的[伪]数据库实现便捷更新管理。
其中涉及到的页面有

相关维护页面
数据收集表格 飞书文档-驱入虚空 bwiki 工作数据表
Excel转Lua结构 Widget:ExcelToLuaJson
具装 模板:具装 模块:数据库调用-具装 模块:数据库-具装
武器 模板:武器 模块:数据库调用-武器 模块:数据库-武器
道具 模板:道具 模块:数据库调用-道具 模块:数据库-道具
执行卡 模板:执行卡 模块:数据库调用-执行卡 模块:数据库-执行卡
稳态立方 模板:稳态立方索引
立方掉落
立方奖励
模块:数据库调用-稳态立方 模块:数据库-稳态立方

模板:制作表格

数据库更新方法

此处以具装数据库为例

2.表格选择区域示例
3.转换工具使用示例
4.数据库更新内容示例
  1. 当版本更新,或需要更新数据时,将数据更新在腾讯文档中
  2. 选择全部数据区块(首行为英文标签行,直到最后一条数据行),复制。
  3. 打开转换工具页,将复制的excel格式直接复制到上方的输入框中并点击转换.得到转换为Lua代码的数据结构
  4. 将转换后的lua信息复制,进入模块:数据库-具装:编辑模式,将复制过对应的数据拷贝到p.xxx中,注意保持大括号结构性完好
    1. 注:具装存在两个组,role记录基础信息,和skill记录技能信息

local p = {}

local getJsonPage = require('模块:数据库-稳态立方')

function p.gets(frame)
    local data = mw.text.jsonDecode(mw.title.new('Test.json'):getContent())
    local output = ""

    for i, item in ipairs(data) do
        local formattedData = get_formatData(item)
        formattedData["1"] = "获取"
        output = output ..
            frame:expandTemplate {
                title = '稳态立方索引',
                args = formattedData
            }
    end
    return output
end

function get_formatData(item)
    local formattedData = {}
    formattedData["map"] = item.map
    formattedData["region"] = item.region
    formattedData["pattern"] = item.pattern
    formattedData["round"] = item.round
    formattedData["content"] = item.content

    local contentSplit = mw.text.split(item.content, ",")
    formattedData["content-tag"] = contentTags(contentSplit)
    formattedData["content-show"] = contentShow(contentSplit)
    return formattedData
end

function contentTags(split)
    local result = {}
    local seen = {}
    
    for _, item in ipairs(split) do
        -- 添加完整值
        if not seen[item] then
            table.insert(result, item)
            seen[item] = true
        end
        
        -- 拆分前缀和后缀
        local prefix = item:sub(1, 2)
        local suffix = item:sub(3)
        
        -- 添加前缀
        if not seen[prefix] then
            table.insert(result, prefix)
            seen[prefix] = true
        end
        
        -- 添加后缀
        if suffix ~= "" and not seen[suffix] then
            table.insert(result, suffix)
            seen[suffix] = true
        end
    end
    
    return table.concat(result, ",")
end

function contentShow(split)
    local result = {}
    for _, item in ipairs(split) do
        local prefix = item:sub(1, 2)
        if prefix == "T1" then
            table.insert(result, "稳态立方" .. item:sub(3))
        elseif prefix == "T2" then
            table.insert(result, "递归立方" .. item:sub(3))
        elseif prefix == "T3" then
            table.insert(result, "超流立方" .. item:sub(3))
        elseif prefix == "T4" then
            table.insert(result, "简并立方" .. item:sub(3))
        else
            table.insert(result, item)
        end
    end
    return table.concat(result, ",")
end

function p.contents(frame)
    local output = ""
    for i, data in ipairs(getJsonPage.content) do
        local formattedData = content_formatData(data)
        formattedData["1"] = "奖励"
        output = output ..
            frame:expandTemplate {
                title = '稳态立方索引',
                args = formattedData
            }
    end
    return output
end

function content_formatData(data)
    local formattedData = {}
    local parsedContent, frontPart, backPart = parseId(data["id"])
    formattedData["2"] = parsedContent .. backPart

    formattedData["type"] = frontPart

    formattedData["subId"] = backPart


    parsePage("A", data["iA"], formattedData)
    parsePage("B1", data["iB1"], formattedData)
    parsePage("B2", data["iB2"], formattedData)
    parsePage("C1", data["iC1"], formattedData)
    parsePage("C2", data["iC2"], formattedData)
    parsePage("C3", data["iC3"], formattedData)

    return formattedData
end

function parseId(dataId)
    -- 根据 dataId 的前缀进行转换
    local idPrefix = dataId:sub(1, 2)
    local parsedContent
    if idPrefix == "T1" then
        parsedContent = "稳态立方"
    elseif idPrefix == "T2" then
        parsedContent = "递归立方"
    elseif idPrefix == "T3" then
        parsedContent = "超流立方"
    elseif idPrefix == "T4" then
        parsedContent = "简并立方"
    else
        parsedContent = dataId -- 默认情况
    end
    local frontPart = idPrefix
    local backPart = dataId:sub(3)
    return parsedContent, frontPart, backPart
end

function parsePage(postfix, dataId, formattedData)
    -- 检查 dataId 为 nil 则终止
    if not dataId then return nil end

    -- 将传入的数据通过 '-' 分割为数组
    local parts = mw.text.split(dataId, '-')

    local page = "私法_" .. parts[1]
    local show = dataId
    local link = parts[1]

    -- 检查页面是否存在
    if mw.title.new(page).exists then
        show = "私法 " .. dataId
        link = "私法_" .. parts[1]
    end

    formattedData[postfix] = show
    formattedData["link" .. postfix] = link
end

function p.test()
    local data = mw.text.jsonDecode(mw.title.new('Test.json'):getContent())
    local output = ""

    for i, item in ipairs(data) do
        output = output .. "区域: " .. item.region .. "\n"
        output = output .. "地图: " .. item.map .. "\n"
        output = output .. "模式: " .. item.pattern .. "\n"
        output = output .. "轮次: " .. item.round .. "\n"
        output = output .. "内容: " .. item.content .. "\n\n"
    end

    return output
end

return p