模块:测试调用数据:修订间差异

无编辑摘要
无编辑摘要
第3行: 第3行:
local dataList = db.char_self_data
local dataList = db.char_self_data
local elements = {"HP", "SP", "ATK", "DEF", "MAG", "MDEF", "CRT", "SPD"}
local elements = {"HP", "SP", "ATK", "DEF", "MAG", "MDEF", "CRT", "SPD"}
local elementsName = {"HP", "SP", "物攻", "物防", "属攻", "属防", "会心", "速度"}


p["测试调用"] = function(frame)
p["测试调用"] = function(frame)
     local query_num = frame.args['角色编号']
     local query_num = frame.args['角色编号']
     local html = mw.html.create() -- 创建 HTML 构建器对象
     local html = mw.html.create()


     -- 计算排名的函数
     -- 计算排名的函数
第43行: 第44行:
                 :done()
                 :done()


             for _, element in ipairs(elements) do
             for i, element in ipairs(elements) do
                local elementName = elementsName[i]
                 local maxAttr = "MAX" .. element
                 local maxAttr = "MAX" .. element
                 local maxAttrValue = char.Data_jp[maxAttr] or "数据不存在"
                 local maxAttrValue = char.Data_jp[maxAttr] or ""
                  
                  
                 local baseAttr = "Base" .. element
                 local baseAttr = "Base" .. element
                 local baseAttrValue = char.Data_jp[baseAttr] or "数据不存在"
                 local baseAttrValue = char.Data_jp[baseAttr] or ""


                 -- 获取排名
                 -- 获取排名
第55行: 第57行:


                 tableHtml:tag('tr')
                 tableHtml:tag('tr')
                     :tag('td'):wikitext(element):done()
                     :tag('td'):wikitext(elementName):done()
                     :tag('td'):wikitext(baseAttrValue .. " (" .. baseRank .. ")"):done()
                     :tag('td'):wikitext(baseAttrValue .. " (" .. baseRank .. ")"):done()
                     :tag('td'):wikitext(maxAttrValue .. " (" .. maxRank .. ")"):done()
                     :tag('td'):wikitext(maxAttrValue .. " (" .. maxRank .. ")"):done()

2024年6月27日 (四) 07:56的版本

可在模块:测试调用数据/doc创建此模块的帮助文档

local p = {}
local db = mw.loadData('模块:角色属性数据')
local dataList = db.char_self_data
local elements = {"HP", "SP", "ATK", "DEF", "MAG", "MDEF", "CRT", "SPD"}
local elementsName = {"HP", "SP", "物攻", "物防", "属攻", "属防", "会心", "速度"}

p["测试调用"] = function(frame)
    local query_num = frame.args['角色编号']
    local html = mw.html.create()

    -- 计算排名的函数
    local function numvalue(char, attr)
        -- 提取所有非 nil 的 Data_jp[attr] 值
        local attrValues = {}
        for _, data in ipairs(dataList) do
            if data.Data_jp[attr] then
                table.insert(attrValues, tonumber(data.Data_jp[attr]))
            end
        end

        -- 排序
        table.sort(attrValues, function(a, b) return a > b end)

        -- 找到 char 在排序后的 attrValues 中的位置
        local charValue = tonumber(char.Data_jp[attr])
        for i, value in ipairs(attrValues) do
            if value == charValue then
                return i
            end
        end
        return "无排名"  -- 如果找不到排名,返回"无排名"
    end

    -- 执行测试输出
    for _, char in ipairs(dataList) do
        if query_num == char.owner_order then
            html:tag('p'):wikitext("查询角色编号: " .. query_num):done()
            local tableHtml = mw.html.create('table'):addClass('wikitable'):css('width', '100%')

            tableHtml:tag('tr')
                :tag('th'):wikitext('属性'):done()
                :tag('th'):wikitext('Base'):done()
                :tag('th'):wikitext('MAX'):done()
                :done()

            for i, element in ipairs(elements) do
                local elementName = elementsName[i]
                local maxAttr = "MAX" .. element
                local maxAttrValue = char.Data_jp[maxAttr] or ""
                
                local baseAttr = "Base" .. element
                local baseAttrValue = char.Data_jp[baseAttr] or ""

                -- 获取排名
                local maxRank = numvalue(char, maxAttr)
                local baseRank = numvalue(char, baseAttr)

                tableHtml:tag('tr')
                    :tag('td'):wikitext(elementName):done()
                    :tag('td'):wikitext(baseAttrValue .. " (" .. baseRank .. ")"):done()
                    :tag('td'):wikitext(maxAttrValue .. " (" .. maxRank .. ")"):done()
                    :done()
            end

            html:node(tableHtml)
        end
    end

    return tostring(html)
end

return p