Skip to content

基础运算符

运算符说明示例结果
+加法10 + 515
-减法10 - 55
*乘法10 * 550
/除法10 / 52
%取余10 % 31

示例

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)"  # 结果:10

Math.min() - 取最小值

yml
formula: "Math.min(5, 10)"  # 结果:5
formula: "Math.min(level * 10, 100)"  # 限制上限为 100

Math.max() - 取最大值

yml
formula: "Math.max(5, 10)"  # 结果:10
formula: "Math.max(0, source - resist)"  # 最低为 0

Math.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"  # 结果:30

2. 除零错误

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"  # ❌ 错误

相关文档

HN 系列插件文档