米斯特利亚Wiki正在建设中,本WIKI编辑权限开放!欢迎参与~!
全站通知:
模块:Perks
刷
历
编
跳到导航
跳到搜索
此模块的文档可以在模块: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