主题
基础运算符
| 运算符 | 说明 | 示例 | 结果 |
|---|---|---|---|
+ | 加法 | 10 + 5 | 15 |
- | 减法 | 10 - 5 | 5 |
* | 乘法 | 10 * 5 | 50 |
/ | 除法 | 10 / 5 | 2 |
% | 取余 | 10 % 3 | 1 |
示例
yml
# 简单运算
formula: "10 + level * 5"
# 百分比计算
formula: "total * 0.5"
# 取余判断奇偶
formula: "level % 2 == 0 ? 100 : 50"比较运算符
| 运算符 | 说明 | 示例 |
|---|---|---|
== | 等于 | level == 5 |
!= | 不等于 | level != 1 |
> | 大于 | level > 3 |
< | 小于 | level < 10 |
>= | 大于等于 | level >= 5 |
<= | 小于等于 | level <= 8 |
示例
yml
# 条件判断
condition: "target_health < target_max_health * 0.5"
# 等级判断
hit: "level >= 3"
# 字符串比较
hit: "damage_type == 'fire'"逻辑运算符
| 运算符 | 说明 | 示例 |
|---|---|---|
&& | 与(AND) | level > 3 && level < 10 |
|| | 或(OR) | level == 1 || level == 10 |
! | 非(NOT) | !(level > 5) |
示例
yml
# 多条件组合
condition: "target_health < 100 && target_max_health > 0"
# 或条件
hit: "damage_type == 'fire' || damage_type == 'magic'"
# 取反
condition: "!(target_health >= target_max_health)"三元运算符
语法:条件 ? 真值 : 假值
示例
yml
# 简单条件
formula: "level > 5 ? 100 : 50"
# 大于5级返回100,否则返回50
# 嵌套条件
formula: "level >= 10 ? 200 : (level >= 5 ? 100 : 50)"
# 10级以上:200
# 5-9级:100
# 5级以下:50
# 除零保护
formula: "time > 0 ? 100 / time : 0"数学函数
Math.floor() - 向下取整
yml
formula: "Math.floor(10.8)" # 结果:10
formula: "Math.floor(level * 2.5)"Math.ceil() - 向上取整
yml
formula: "Math.ceil(10.2)" # 结果:11
formula: "Math.ceil(level * 0.3)"Math.round() - 四舍五入
yml
formula: "Math.round(10.5)" # 结果:11
formula: "Math.round(10.4)" # 结果:10Math.min() - 取最小值
yml
formula: "Math.min(5, 10)" # 结果:5
formula: "Math.min(level * 10, 100)" # 限制上限为 100Math.max() - 取最大值
yml
formula: "Math.max(5, 10)" # 结果:10
formula: "Math.max(0, source - resist)" # 最低为 0Math.abs() - 绝对值
yml
formula: "Math.abs(-5)" # 结果:5
formula: "Math.abs(target_health - source_health)"Math.pow() - 幂运算
yml
formula: "Math.pow(2, 3)" # 结果:8(2的3次方)
formula: "Math.pow(1.1, level) * 10" # 指数增长Math.sqrt() - 平方根
yml
formula: "Math.sqrt(16)" # 结果:4
formula: "10 * Math.sqrt(level)" # 递减增长率常用组合
限制上限
yml
formula: "Math.min(level * 10, 100)"
# 每级 10 点,最高 100限制下限
yml
formula: "Math.max(5, level * 2)"
# 每级 2 点,最低 5限制范围
yml
formula: "Math.max(5, Math.min(level * 10, 100))"
# 最低 5,最高 100向下取整后限制
yml
formula: "Math.min(Math.floor(level * 2.5), 50)"
# 向下取整后限制上限平方根增长(递减增长率)
yml
formula: "10 * Math.sqrt(level)"
# 1级:10
# 4级:20
# 9级:30
# 16级:40指数增长
yml
formula: "Math.pow(1.1, level) * 10"
# 等级越高,增长越快百分比计算
yml
formula: "target_health / target_max_health * 100"
# 计算血量百分比除零保护
yml
formula: "target_max_health > 0 ? target_health / target_max_health : 0"
# 安全的除法实战示例
示例 1:分段增长
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
}示例 2:血量百分比判断
yml
condition: "target_max_health > 0 && target_health / target_max_health <= 0.3"
# 血量低于 30%示例 3:随机判定
yml
hit: "source_critical_rate > Math.random() * 100"
# 根据暴击率随机判定示例 4:复杂条件
yml
hit: |-
damage_type == 'physical' &&
ctx_critical == 1 &&
target_health / target_max_health <= 0.5
# 物理伤害 + 暴击 + 目标血量低于 50%注意事项
1. 运算符优先级
yml
# 乘除优先于加减
formula: "10 + 5 * 2" # 结果:20,不是 30
# 使用括号明确优先级
formula: "(10 + 5) * 2" # 结果:302. 除零错误
yml
# ❌ 危险
formula: "100 / time"
# ✅ 安全
formula: "time > 0 ? 100 / time : 0"3. 浮点数精度
yml
# 浮点数运算可能有精度问题
formula: "0.1 + 0.2" # 可能不完全等于 0.3
# 需要精确比较时,使用范围判断
condition: "Math.abs(value - 0.3) < 0.0001"4. 字符串比较
yml
# 字符串比较使用单引号
hit: "damage_type == 'fire'"
# 不要忘记引号
hit: "damage_type == fire" # ❌ 错误相关文档
- 公式系统概述 - 了解公式语法
- Buff 配置变量参考 - Buff 中可用的变量
- 周期效果配置变量参考 - 周期效果中可用的变量
- 属性映射配置变量参考 - 属性映射中可用的变量
- 战斗管线配置变量参考 - 战斗管线中可用的变量
- 公式实战示例 - 更多实战案例
