米斯特利亚Wiki正在建设中,本WIKI编辑权限开放!欢迎参与~!

全站通知:

模块:Perks

来自米斯特利亚WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

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

local PerksData = require("模块:Perks/Data")
local SkillData = require("模块:Perks/SkillData")

local p = {}

-- 根据传入id返回技能名
function p._name(id)
    -- 参数验证
    if not id or type(id) ~= "string" then
        return ""
    end
    
    -- 从PerksData中查找对应id的技能数据
    if PerksData and PerksData[id] and PerksData[id].name then
        return PerksData[id].name
    end
    
    -- 如果找不到,返回空字符串
    return ""
end

-- 根据技能类型和等级,返回该等级的所有技能数据
function p._skill(skillName, lv)
    -- 确保参数有效
    if not skillName or not lv then
        return nil
    end

    -- 将等级转换为数字
    local level = tonumber(lv)
    if not level or level < 1 then
        return nil
    end

    -- 从SkillData中查找对应技能类型和等级的数据
    if SkillData.data and SkillData.data[skillName] and SkillData.data[skillName][level] then
        return SkillData.data[skillName][level]
    end

    return nil
    -- mw.logObject(p._skill("锻造",1))
end

-- 根据技能类型和等级渲染技能表模板
function p.renderSkill(frame)
    local skillName = frame.args[1]
    local lv = frame.args[2]
    local moduleName = frame.args[3] or "技能表"

    -- 参数验证
    if not skillName or not lv then
        return ""
    end

    -- 调用_skill函数获取技能数据
    local skillsData = p._skill(skillName, lv)

    -- 如果找不到技能数据,返回空字符串
    if not skillsData then
        return ""
    end

    -- 构建模板参数
    local templateArgs = {}
    -- 获取实际等级值
    local actualLevel = lv
    if SkillData.settings and SkillData.settings[skillName] and SkillData.settings[skillName].level_requirements then
        local level = tonumber(lv)
        if level and level >= 1 and level <= #SkillData.settings[skillName].level_requirements then
            actualLevel = SkillData.settings[skillName].level_requirements[level]
        end
    end
    templateArgs["表头"] = skillName .. " - " .. lv .. "阶(Lv." .. actualLevel .. ")"

    -- 遍历该等级的所有技能
    for i, skillData in ipairs(skillsData) do
        local skillIcon = skillData.icon or "spr_skill_icon"
        local skillNameCn = skillData.name or ""
        local skillDesc = skillData.description or ""
        local skillEssence = skillData.essence or 0

        templateArgs["技能" .. i] = skillIcon .. "@" .. skillNameCn .. "@" .. skillDesc .. "@" .. skillEssence
    end

    -- 使用frame:expandTemplate来渲染模板
    return frame:expandTemplate{
        title = moduleName,
        args = templateArgs
    }
--[[
local frame=mw.getCurrentFrame()
frame.args={"锻造","1"}
mw.logObject(p.renderSkill(frame))
]] --
end

-- 渲染指定技能类型的所有等级
function p.renderSkillType(frame)
    local skillName = frame.args[1]
    local moduleName = frame.args[2] or "技能表"
    
    -- 参数验证
    if not skillName then
        return ""
    end
    
    -- 检查技能类型是否存在
    if not SkillData.data or not SkillData.data[skillName] then
        return ""
    end
    
    local result = ""
    
    -- 遍历所有等级
    for level = 1, #SkillData.data[skillName] do
        -- 获取该等级的技能数据
        local skillsData = SkillData.data[skillName][level]
        if skillsData then
            -- 构建模板参数
            local templateArgs = {}
            -- 获取实际等级值
            local actualLevel = level
            if SkillData.settings and SkillData.settings[skillName] and SkillData.settings[skillName].level_requirements then
                if level >= 1 and level <= #SkillData.settings[skillName].level_requirements then
                    actualLevel = SkillData.settings[skillName].level_requirements[level]
                end
            end
            templateArgs["表头"] = skillName .. " - " .. level .. "阶(Lv." .. actualLevel .. ")"
            
            -- 遍历该等级的所有技能
            for i, skillData in ipairs(skillsData) do
                local skillIcon = (skillData.icon or "spr_skill_icon").."_0"
                local skillNameCn = skillData.name or ""
                local skillDesc = skillData.description or ""
                local skillEssence = skillData.essence or 0
                
                templateArgs["技能" .. i] = skillIcon .. "@" .. skillNameCn .. "@" .. skillDesc .. "@" .. skillEssence
            end
            
            -- 使用frame:expandTemplate来渲染模板
            local levelTemplate = frame:expandTemplate{
                title = moduleName,
                args = templateArgs
            }
            
            -- 拼接结果,每个等级之间添加换行
            result = result .. levelTemplate .. "\n\n"
        end
    end
    
    return result
end

return p