Skip to content

这页整理当前版本战斗管线公式里可直接使用的变量。

当前配置位置是:

text
plugins/HNAttribute/pipelines/*.yml

一、最常用变量

1. 上下文变量

变量含义
damage_type当前伤害类型 ID,例如 physicalmagic
context_type当前战斗场景,例如 player-mob
source_type伤害来源类型,例如 skill
input_damage显式伤害输入值
explicit_damage是否是显式伤害输入(1/0)
fixed_damage是否是固定值输入(1/0)
percent_damage是否是百分比输入(1/0)
current_damage进入当前管线前上下文里已有的 damage

2. 攻击者属性变量

攻击者属性在文档里统一按 self_<属性ID> 来写。

例如:

  • self_attack_damage
  • self_crit_chance
  • self_magic_damage

因为它和 target_* 配对最直观。


3. 受击者属性变量

受击者属性在文档里统一按 target_<属性ID> 来写。

例如:

  • target_defense
  • target_dodge
  • target_magic_resistance

4. 前面 stage 的结果

每个 stage 的执行结果,都会按它自己的 id 暴露给后面的公式。

常见示例:

变量含义
hit命中判定结果
dodge闪避判定结果
crit暴击判定结果
block格挡判定结果
damage当前伤害值
lifesteal吸血结果
thorns反伤结果

二、当前最推荐的命名习惯

推荐

yml
self_attack_damage
target_defense
crit
damage

原因很简单:

  • self_* / target_* 更容易读
  • 更适合直接表达“自己 vs 目标”的关系

三、按场景看变量怎么用

1. 命中判定

yml
formula: |-
  def diff = self_accuracy - target_dodge
  return diff >= random(0, 1) ? 1 : 0

这里用了:

  • self_accuracy
  • target_dodge

2. 基础伤害

yml
formula: |-
  if (explicit_damage) {
    return input_damage
  }
  return Math.max(0, self_attack_damage)

这里用了:

  • explicit_damage
  • input_damage
  • self_attack_damage

3. 防御减伤

yml
formula: |-
  return Math.max(0, damage - Math.max(0, target_defense))

这里用了:

  • damage
  • target_defense

4. 暴击修正

yml
formula: |-
  if (!crit) {
    return damage
  }
  return damage * Math.max(1, self_crit_multiplier / 100)

这里用了:

  • crit
  • damage
  • self_crit_multiplier

5. 按伤害类型分支

yml
formula: |-
  if (damage_type == 'magic') {
    return Math.max(0, self_magic_damage)
  }
  return Math.max(0, self_attack_damage)

这里用了:

  • damage_type
  • self_magic_damage
  • self_attack_damage

6. 按场景分支

yml
formula: |-
  if (context_type == 'player-player') {
    return damage * 0.8
  }
  return damage

这里用了:

  • context_type
  • damage

四、变量使用建议

当前版本推荐的变量使用方式:

  • 直接显式写 self_<属性ID> 读取攻击者属性
  • 直接显式写 target_<属性ID> 读取目标属性
  • 直接读取前面 stage 的结果,例如 critdamage

简单来说:

你想读什么属性,就直接把属性名写出来。


五、显式伤害参与管线时要记住的变量

如果是 Mythic 或其他来源传入显式伤害,并开启了参与管线,那么这些变量特别重要:

变量说明
input_damage输入值本身
explicit_damage是不是显式伤害
fixed_damage是不是固定值输入
percent_damage是不是百分比输入
current_damage上下文当前 damage

典型写法:

yml
formula: |-
  if (explicit_damage) {
    return input_damage
  }
  return self_attack_damage

六、常见错误

错误 1:没有在当前管线配置里核对变量使用位置

当前版本更推荐把变量写成显式属性访问,并结合 pipelines/*.yml 里的实际阶段顺序一起检查。

错误 2:变量名和属性 ID 拼写不一致

例如:

  • 正确:self_attack_damage
  • 错误:self_attackDamage

错误 3:在前置 stage 还没执行时就读取结果

例如把 crit_damage 放在 crit 前面,却在公式里用 crit

错误 4:布尔结果既可能是 true/false,也可能来自 1/0

当前执行器会自动转布尔,但你写公式时最好保持语义清晰。


七、调试建议

排查变量是否真实可用时,建议按这个顺序:

  1. /hnattr lookup
  2. /hnattr trace <属性ID>
  3. 检查 pipelines/*.yml 当前场景到底编排了哪些 stage
  4. 检查你当前 stage 的公式里到底引用了哪些属性/结果

八、这一页最该记住的重点

  1. 当前战斗公式配置位置是 pipelines/*.yml
  2. 最常用的是 self_*target_*damage_typecontext_typeinput_damage
  3. 前面 stage 的结果会以 stage id 的名字暴露给后面。
  4. 当前版本最推荐的写法是“显式读属性”,并按实际 Stage 顺序组织公式。

HN 系列插件文档