PathOfBuilding技能添加机制深度解析
技能系统架构概述
在PathOfBuilding中,技能系统是通过模板文件(template file)生成的。这些模板文件与游戏原始数据结合后,形成了我们最终看到的技能数据结构和计算逻辑。理解这套机制对于想要扩展或修改技能的开发者至关重要。
模板文件详解
核心指令解析
-
#skill指令
- 功能:初始化技能数据并生成技能头部信息
- 参数说明:
grantedEffectId
:必须与游戏数据中的GrantedEffects
表匹配displayName
:可选参数,用于覆盖游戏默认显示名称
-
#flags指令
- 作用:设置技能的基础标志属性
- 常用标志及其影响:
- 近战(melee):影响近战相关修饰词的计算
- 投射物(projectile):启用投射物相关计算逻辑
- 图腾(totem)/陷阱(trap)/爆破装置(explosive):影响技能释放方式
- 诅咒(curse)/持续伤害(duration):改变技能行为模式
-
#mods指令
- 作用:确保技能导出时包含关联的修饰词
- 使用场景:几乎所有技能都需要此指令
-
#baseMod指令
- 特殊用途:处理不在statMap中的特殊修饰词
-
#noGem指令
- 应用场景:标识不可装备的"技能宝石"(如Bone Armour)
数据结构深度解析
核心数据表结构
-
stats表
- 存储技能的所有基础属性字段
- 每个字段对应游戏中的一个具体属性值
-
levels表
- 结构特点:
- 数组部分:与stats表字段一一对应
- 命名字段:包含levelRequirement、damageEffectiveness等特殊属性
- 示例解析(以火球术为例):
[1] = { 0.80000001192093, -- spell_minimum_base_fire_damage 1.2000000476837, -- spell_maximum_base_fire_damage 25, -- base_chance_to_ignite_% 0, -- fireball_base_radius_up_to_+_at_longer_ranges damageEffectiveness = 2.4, critChance = 6, ... }
- 结构特点:
数值插值机制
-
插值类型
- 类型1:直接取值(最常见)
- 类型2:线性插值
statValue = round(prevStat + (nextStat - prevStat) * (actorLevel - prevReq) / (nextReq - prevReq))
- 类型3:效果插值(用于伤害计算)
(3.885209 + 0.360246 * (actorLevel - 1)) * (grantedEffect.baseEffectiveness or 1) * (1 + (grantedEffect.incrementalEffectiveness or 0)) ^ (actorLevel - 1)
-
实际应用示例
- 以20级火球术为例:
- 基础效果值计算得到1369.26
- 最小伤害:1369.26 × 0.8 ≈ 1095
- 最大伤害:1369.26 × 1.2 ≈ 1643
- 以20级火球术为例:
高级功能实现
技能部件系统
-
实现原理
- 通过
parts
表定义技能的不同形态 - 示例结构:
parts = { { name = "形态1" }, { name = "形态2" } }
- 通过
-
修饰词关联
- 使用SkillPart标签关联特定部件:
{ type = "SkillPart", skillPart = 2 } -- 关联第二个部件
- 使用SkillPart标签关联特定部件:
预处理函数(preFuncs)
-
函数类型
- initialFunc:计算前初始化
- preSkillTypeFunc:技能类型相关预处理
- preDamageFunc:伤害计算前处理(最常用)
- preDotFunc:持续伤害计算前处理
-
典型应用场景
- 正义之火(Righteous Fire):需要预知玩家生命/能量护盾值
- 燃烧箭(Burning Arrow):5层叠加乘数计算
技能添加实践指南
标准技能添加流程
- 在对应模板文件中添加
#skill
指令 - 添加
#mods
指令确保修饰词导出 - 执行数据导出操作合并游戏数据
- 处理未识别属性:
- 检查
SkillStatMap.lua
- 必要时添加
statMap
表进行映射
- 检查
- 按需添加其他指令
召唤物技能特殊处理
-
召唤物定义
- 在
Minion.txt
中添加:#monster
指令定义基础属性#limit
设置召唤数量限制#emit
确保修饰词导出
- 在
-
技能关联
- 在基础技能中添加
minionList
表 - 包含所有可召唤的召唤物名称
- 在基础技能中添加
-
召唤物技能
- 与普通技能添加方式相同
- 同样需要添加到
minion.txt
中
最佳实践建议
-
数据验证
- 始终检查数值插值结果是否符合预期
- 特别关注伤害效果计算公式的准确性
-
模板维护
- 重要修改应同时更新模板文件和导出脚本
- 避免直接修改自动生成的数据文件
-
复杂技能处理
- 多阶段技能考虑使用parts系统
- 需要特殊计算的技能合理使用preFuncs
通过深入理解这套技能系统架构,开发者可以更高效地为PathOfBuilding添加新技能或修改现有技能,确保计算结果的准确性和系统的稳定性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考