主题
什么是公式系统
公式系统让你用数学表达式动态计算数值,适用于:
- Buff 效果:攻击力 = 10 + 等级 × 5
- 属性映射:攻击力 = 力量 × 0.5
- 周期伤害:伤害 = 施法者魔法伤害 × 0.1
- 战斗管线:伤害 = max(0, 攻击力 - 防御力 × 0.5)
- 条件判断:血量 < 最大血量 × 0.5
公式语法
单行公式(Expression 模式)
直接写公式字符串:
yml
# 固定值
formula: 100
# 简单运算
formula: "10 + level * 5"
# 百分比
formula: "total * 0.5"
# 条件判断
formula: "level > 5 ? 100 : 50"多行公式(Groovy 模式)
使用 |- 或 | 符号,自动识别为 Groovy 模式:
yml
formula: |-
if (total <= 50) {
return total * 0.8
} else if (total <= 100) {
return 40 + (total - 50) * 1.2
} else {
return 100 + (total - 100) * 1.5
}注意:Groovy 模式需要使用 return 语句返回值。
变量参考(按使用场景)
不同的配置场景可以使用不同的变量:
Buff 配置中的变量
在 buffs/*.yml 中可用:
level- Buff 等级time- 剩余时间duration- 总持续时间
周期效果中的变量
在 periodic/*.yml 中可用:
target_<属性ID>- 目标的属性值source_<属性ID>- 来源的属性值
属性映射中的变量
在 attributes/*.yml 的 mapping 中可用:
total- 源属性的总值value- 同 total(别名)source_value- 同 total(别名)
战斗管线中的变量
在 pipelines/*.yml 中可用:
damage- 当前伤害值self_*/target_*- 攻击者/受击者属性值damage_type/context_type- 当前伤害类型与场景input_damage/explicit_damage- 显式伤害输入上下文
运算符与函数参考
公式系统支持:
- 基础运算符:
+-*/% - 比较运算符:
==!=><>=<= - 逻辑运算符:
&&||! - 三元运算符:
条件 ? 真值 : 假值 - 数学函数:
Math.floor()Math.ceil()Math.max()Math.min()等
公式实战示例
查看常见的公式使用场景:
- 等级越高加成越大
- 随时间衰减的 Buff
- 分段增长
- 血量越低效果越强
- 基于双方属性的伤害
常见错误与调试
错误 1:变量名拼写错误
yml
# ❌ 错误
formula: "lv * 10" # 应该是 level
# ✅ 正确
formula: "level * 10"错误 2:除零错误
yml
# ❌ 危险
formula: "100 / time" # time 可能为 0
# ✅ 安全
formula: "time > 0 ? 100 / time : 0"错误 3:Groovy 模式忘记 return
yml
# ❌ 错误(多行公式)
formula: |-
if (total > 50) {
total * 2 # 缺少 return
}
# ✅ 正确
formula: |-
if (total > 50) {
return total * 2
}
return total调试方法
使用命令查看计算结果:
text
/hnattr lookup # 查看最终属性值
/hnattr trace <属性ID> # 查看属性计算过程
/hnattr buffs # 查看当前 Buff
/hnattr source # 查看属性来源下一步
现在你已经了解了公式系统的基础,可以继续学习:
- 如何配置Buff效果 - 应用公式到 Buff
- 如何配置周期伤害治疗 - 应用公式到周期效果
- 如何注册属性 - 应用公式到属性映射
- 如何配置战斗管线 - 应用公式到战斗系统
