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

无编辑摘要
无编辑摘要
 
(未显示2个用户的95个中间版本)
第1行: 第1行:
local p = {}
local p = {}
local db = mw.loadData('模块:角色属性数据')
-- 加载数据
local dataList = db.char_self_data
local db_cn = mw.loadData('模块:角色技能数据中文')
local elements = {"HP", "SP", "ATK", "DEF", "MAG", "MDEF", "CRT", "SPD"}
local dataList_cn = db_cn.char_skill_data
local elementsName = {"HP", "SP", "物攻", "物防", "属攻", "属防", "会心", "速度"}
local db_jp = mw.loadData('模块:角色技能数据日文')
local dataList_jp = db_jp.char_skill_data
-- 手搓split
local function split(input, delimiter)
    local result = {}
    for match in (input .. delimiter):gmatch("(.-)" .. delimiter) do
        table.insert(result, match)
    end
    return result
end


p["测试调用"] = function(frame)
local function skillBox(skill)
     local query_num = frame.args['角色编号']
-- 状态图标
     local html = mw.html.create()
     local tag2Html
    if skill.skill_tag2 then
        local skillTags2 = split(skill.skill_tag2, ",")
        tag2Html = mw.html.create()
        for _, tagicon2 in ipairs(skillTags2) do
            tag2Html:wikitext(string.format('[[File:icon-%s.png|class=skillbox-tag2|link=]]', tagicon2))
        end
    end
 
    -- 特性图标
     local tagHtml
    if skill.skill_tag then
        local skillTags = split(skill.skill_tag, ",")
        tagHtml = mw.html.create()
        for _, tagicon in ipairs(skillTags) do
            tagHtml:wikitext(string.format('[[File:icon-%s.png|class=skillbox-tag|link=]]', tagicon))
        end
    end


     -- 排序属性
     -- SP
local function numvalue(char, attr, lang)
    local spHtml
    -- 提取所有非 nil 值
    if skill.skill_sp then
    local attrValues = {}
        spHtml = mw.html.create()
    for _, data in ipairs(dataList) do
            if skill.skill_type == "EX" then
        local value = nil
                spHtml:tag('div')
        if lang == "cn" and data.Data_cn and data.Data_cn[attr] then
                :addClass('skillbox-sp')
            value = tonumber(data.Data_cn[attr])
                :wikitext('可用次数&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:1.2rem;">' .. skill.skill_sp .. '</span>')
        elseif data.Data_jp and data.Data_jp[attr] then
                :done()  
            value = tonumber(data.Data_jp[attr])
            else
        end
                spHtml:tag('div')
        if value then
                :addClass('skillbox-sp')
            table.insert(attrValues, value)
                :wikitext('消耗精力&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:1.2rem;">' .. skill.skill_sp .. '</span>')
        end
                :done()  
    end
            end
    end
    -- 排序部分
    table.sort(attrValues, function(a, b) return a > b end)
    local targetData = char.Data_cn and char.Data_cn[attr] or char.Data_jp and char.Data_jp[attr]
    local charValue = tonumber(targetData)
    for i, value in ipairs(attrValues) do
        if value == charValue then
            return i
        end
    end
    return "暂无"
end


    -- 技能BOOST
    local boostHtml
    if skill.skill_boost then
        boostHtml = mw.html.create()
        boostHtml:tag('tr')
            :tag('td')
                :wikitext('【BP加成效果】')
            :done()
            :tag('td')
                :wikitext(skill.skill_boost)
            :done()
        :done()
    end


     -- 执行测试输出
     -- 技能强化效果
     for _, char in ipairs(dataList) do
     local upcontentHtml
         if query_num == char.owner_order then
    if skill.skill_up_content then
            html:tag('p'):wikitext("查询角色编号: " .. query_num):done()
        upcontentHtml = mw.html.create()
         upcontentHtml:tag('tr')
            :tag('td')
                :wikitext('【能力强化效果】')
            :done()
            :tag('td')
                :tag('li'):wikitext(skill.skill_up_content):done()
                -- 下面的upcontentHtml不能删
                if skill.skill_up_content2 then
                    upcontentHtml:tag('li'):wikitext(skill.skill_up_content2):done()
                end
            upcontentHtml:done()
        upcontentHtml:done()
    end


            -- 创建属性表,日服一个,国服一个
    -- 技能强化等级
            local tableHtml = mw.html.create('table'):addClass('wikitable'):css('width', '100%')
    local upHtml
    if skill.skill_up then
        upHtml = mw.html.create()
        upHtml:tag('tr')
            :tag('td')
                :wikitext('【强化学习条件】')
            :done()
            :tag('td')
                :tag('li'):wikitext('角色等级达到'.. skill.skill_up .. '以上,并习得技能' .. skill.skill_name):done()
                -- 下面的upHtml不能删
                if skill.skill_up2 then
                    upHtml:tag('li'):wikitext('角色等级达到'.. skill.skill_up2 .. '以上,并习得技能' .. skill.skill_name):done()
                end
            upHtml:done()
        upHtml:done()
    end


            local tableHtml = tableHtml:tag('tr')
    -- 展示内容
                :tag('th'):wikitext('属性'):done()
    local skillBoxDiv = mw.html.create()
                :tag('th'):wikitext('Base'):done()
    skillBoxDiv:tag('div'):addClass('skillbox')
                :tag('th'):wikitext('MAX'):done()
        :tag('div'):addClass('skillbox-left')
                :done()
            :node(tagHtml) -- 特性图标
        :done()


             for i, element in ipairs(elements) do
        :tag('div'):addClass('skillbox-right')
                local elementName = elementsName[i]
             :tag('div'):addClass('skillbox-topbox')
                local maxAttr = "MAX" .. element
            :tag('div'):addClass('skillbox-namebox')
                local maxAttrValue = char.Data_jp[maxAttr] or ""
                :tag('div'):addClass('skillbox-name')
                local baseAttr = "Base" .. element
                    :wikitext(skill.skill_name)
                local baseAttrValue = char.Data_jp[baseAttr] or ""
                :done()
                :tag('div'):addClass('skillbox-tag2')
                    :node(tag2Html) -- 状态图标
:done()
:done()
            :node(spHtml) -- SP
            :done()     
        :tag('table'):addClass('skillbox-content w-100 text-left')
            :tag('tr')
                :tag('td')
                    :attr('colspan', '2')
                    :wikitext(skill.skill_content)
                :done()
            :done()
            :node(boostHtml) -- BP
            :node(upcontentHtml) -- 强化条件
            :node(upHtml) -- 强化等级
        :done()
        :done()
    :done()
   
    return skillBoxDiv
end


                -- 获取排名
p["测试调用"] = function(frame)
                local maxRank = numvalue(char, maxAttr)
    local query_num = frame.args['角色序号']
                local baseRank = numvalue(char, baseAttr)
    local query_type = frame.args['查询类型']
    local query_lang = frame.args['查询语言'] or ""


                local tableHtml_jp = tableHtml:tag('tr')
    local html = mw.html.create()
                    :tag('td'):wikitext(elementName):done()
 
                    :tag('td'):wikitext(baseAttrValue .. " (" .. baseRank .. ")"):done()
    -- 提取数据
                    :tag('td'):wikitext(maxAttrValue .. " (" .. maxRank .. ")"):done()
    local dataList = (query_lang == "cn" or query_lang == "国服" or query_lang == "中文") and dataList_cn or dataList_jp
                     :done()
    local parentSkill = {}
    local childSkill = {}
 
    for _, ownerList in ipairs(dataList) do
        if query_num == ownerList.owner_order then
            for _, skill in ipairs(ownerList.owner_skill) do
                if skill.skill_type == query_type then
                    if skill.skill_parent == nil then
                        table.insert(parentSkill, skill)
                     else
                        table.insert(childSkill, skill)
                    end
                end
             end
             end
           
        end
            html:node(tableHtml_jp)
    end


            if char.Data_cn then
    -- 展示内容
                for i, element in ipairs(elements) do
    for _, parent in ipairs(parentSkill) do
                    local elementName = elementsName[i]
        html:node(skillBox(parent))
                    local maxAttr = "MAX" .. element
        for _, child in ipairs(childSkill) do
                    local maxAttrValue = char.Data_cn[maxAttr] or ""
            if child.skill_parent == parent.skill_order then
                    local baseAttr = "Base" .. element
                html:tag('div'):addClass('parent-description-container'):node(skillBox(child)):done()
                    local baseAttrValue = char.Data_cn[baseAttr] or ""
   
                    -- 获取排名
                    local maxRank = numvalue(char, maxAttr, "cn")
                    local baseRank = numvalue(char, baseAttr, "cn")
   
                    local tableHtml_cn = tableHtml:tag('tr')
                        :tag('td'):wikitext(elementName):done()
                        :tag('td'):wikitext(baseAttrValue .. " (" .. baseRank .. ")"):done()
                        :tag('td'):wikitext(maxAttrValue .. " (" .. maxRank .. ")"):done()
                        :done()
                end
             end
             end
            html:node(tableHtml_cn)
         end
         end
     end
     end

2024年7月12日 (五) 22:27的最新版本

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

local p = {}
-- 加载数据
local db_cn = mw.loadData('模块:角色技能数据中文')
local dataList_cn = db_cn.char_skill_data
local db_jp = mw.loadData('模块:角色技能数据日文')
local dataList_jp = db_jp.char_skill_data
-- 手搓split
local function split(input, delimiter)
    local result = {}
    for match in (input .. delimiter):gmatch("(.-)" .. delimiter) do
        table.insert(result, match)
    end
    return result
end

local function skillBox(skill)
	-- 状态图标
    local tag2Html
    if skill.skill_tag2 then
        local skillTags2 = split(skill.skill_tag2, ",")
        tag2Html = mw.html.create()
        for _, tagicon2 in ipairs(skillTags2) do
            tag2Html:wikitext(string.format('[[File:icon-%s.png|class=skillbox-tag2|link=]]', tagicon2))
        end
    end

    -- 特性图标
    local tagHtml
    if skill.skill_tag then
        local skillTags = split(skill.skill_tag, ",")
        tagHtml = mw.html.create()
        for _, tagicon in ipairs(skillTags) do
            tagHtml:wikitext(string.format('[[File:icon-%s.png|class=skillbox-tag|link=]]', tagicon))
        end
    end

    -- SP
    local spHtml
    if skill.skill_sp then
        spHtml = mw.html.create()
            if skill.skill_type == "EX" then
                spHtml:tag('div')
                :addClass('skillbox-sp')
                :wikitext('可用次数&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:1.2rem;">' .. skill.skill_sp .. '</span>')
                :done() 
            else
                spHtml:tag('div')
                :addClass('skillbox-sp')
                :wikitext('消耗精力&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:1.2rem;">' .. skill.skill_sp .. '</span>')
                :done() 
            end
    end

    -- 技能BOOST
    local boostHtml
    if skill.skill_boost then
        boostHtml = mw.html.create()
        boostHtml:tag('tr')
            :tag('td')
                :wikitext('【BP加成效果】')
            :done()
            :tag('td')
                :wikitext(skill.skill_boost)
            :done()
        :done()
    end

    -- 技能强化效果
    local upcontentHtml
    if skill.skill_up_content then
        upcontentHtml = mw.html.create()
        upcontentHtml:tag('tr')
            :tag('td')
                :wikitext('【能力强化效果】')
            :done()
            :tag('td')
                :tag('li'):wikitext(skill.skill_up_content):done()
                -- 下面的upcontentHtml不能删
                if skill.skill_up_content2 then
                    upcontentHtml:tag('li'):wikitext(skill.skill_up_content2):done()
                end
            upcontentHtml:done()
        upcontentHtml:done()
    end

    -- 技能强化等级
    local upHtml
    if skill.skill_up then
        upHtml = mw.html.create()
        upHtml:tag('tr')
            :tag('td')
                :wikitext('【强化学习条件】')
            :done()
            :tag('td')
                :tag('li'):wikitext('角色等级达到'.. skill.skill_up .. '以上,并习得技能' .. skill.skill_name):done()
                -- 下面的upHtml不能删
                if skill.skill_up2 then
                    upHtml:tag('li'):wikitext('角色等级达到'.. skill.skill_up2 .. '以上,并习得技能' .. skill.skill_name):done()
                end
            upHtml:done()
        upHtml:done()
    end

    -- 展示内容
    local skillBoxDiv = mw.html.create()
    skillBoxDiv:tag('div'):addClass('skillbox')
        :tag('div'):addClass('skillbox-left')
            :node(tagHtml) -- 特性图标
        :done()

        :tag('div'):addClass('skillbox-right')
            :tag('div'):addClass('skillbox-topbox')
            	:tag('div'):addClass('skillbox-namebox')
	                :tag('div'):addClass('skillbox-name')
	                    :wikitext(skill.skill_name)
	                :done()
	                :tag('div'):addClass('skillbox-tag2')
	                    :node(tag2Html) -- 状态图标
					:done()
				:done()
            	:node(spHtml) -- SP
            :done()      
	        :tag('table'):addClass('skillbox-content w-100 text-left')
	            :tag('tr')
	                :tag('td')
	                    :attr('colspan', '2')
	                    :wikitext(skill.skill_content)
	                :done()
	            :done()
	            :node(boostHtml) -- BP
	            :node(upcontentHtml) -- 强化条件
	            :node(upHtml) -- 强化等级
	        :done()
        :done()
    :done()
    
    return skillBoxDiv
end

p["测试调用"] = function(frame)
    local query_num = frame.args['角色序号']
    local query_type = frame.args['查询类型']
    local query_lang = frame.args['查询语言'] or ""

    local html = mw.html.create()

    -- 提取数据
    local dataList = (query_lang == "cn" or query_lang == "国服" or query_lang == "中文") and dataList_cn or dataList_jp
    local parentSkill = {}
    local childSkill = {}

    for _, ownerList in ipairs(dataList) do
        if query_num == ownerList.owner_order then
            for _, skill in ipairs(ownerList.owner_skill) do
                if skill.skill_type == query_type then
                    if skill.skill_parent == nil then
                        table.insert(parentSkill, skill)
                    else
                        table.insert(childSkill, skill)
                    end
                end
            end
        end
    end

    -- 展示内容
    for _, parent in ipairs(parentSkill) do
        html:node(skillBox(parent))
        for _, child in ipairs(childSkill) do
            if child.skill_parent == parent.skill_order then
                html:tag('div'):addClass('parent-description-container'):node(skillBox(child)):done()
            end
        end
    end

    return tostring(html)
end

return p