主题
这页整理当前版本战斗管线公式里可直接使用的变量。
当前配置位置是:
text
plugins/HNAttribute/pipelines/*.yml一、最常用变量
1. 上下文变量
| 变量 | 含义 |
|---|---|
damage_type | 当前伤害类型 ID,例如 physical、magic |
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_damageself_crit_chanceself_magic_damage
因为它和 target_* 配对最直观。
3. 受击者属性变量
受击者属性在文档里统一按 target_<属性ID> 来写。
例如:
target_defensetarget_dodgetarget_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_accuracytarget_dodge
2. 基础伤害
yml
formula: |-
if (explicit_damage) {
return input_damage
}
return Math.max(0, self_attack_damage)这里用了:
explicit_damageinput_damageself_attack_damage
3. 防御减伤
yml
formula: |-
return Math.max(0, damage - Math.max(0, target_defense))这里用了:
damagetarget_defense
4. 暴击修正
yml
formula: |-
if (!crit) {
return damage
}
return damage * Math.max(1, self_crit_multiplier / 100)这里用了:
critdamageself_crit_multiplier
5. 按伤害类型分支
yml
formula: |-
if (damage_type == 'magic') {
return Math.max(0, self_magic_damage)
}
return Math.max(0, self_attack_damage)这里用了:
damage_typeself_magic_damageself_attack_damage
6. 按场景分支
yml
formula: |-
if (context_type == 'player-player') {
return damage * 0.8
}
return damage这里用了:
context_typedamage
四、变量使用建议
当前版本推荐的变量使用方式:
- 直接显式写
self_<属性ID>读取攻击者属性 - 直接显式写
target_<属性ID>读取目标属性 - 直接读取前面 stage 的结果,例如
crit、damage
简单来说:
你想读什么属性,就直接把属性名写出来。
五、显式伤害参与管线时要记住的变量
如果是 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
当前执行器会自动转布尔,但你写公式时最好保持语义清晰。
七、调试建议
排查变量是否真实可用时,建议按这个顺序:
/hnattr lookup/hnattr trace <属性ID>- 检查
pipelines/*.yml当前场景到底编排了哪些 stage - 检查你当前 stage 的公式里到底引用了哪些属性/结果
八、这一页最该记住的重点
- 当前战斗公式配置位置是
pipelines/*.yml。 - 最常用的是
self_*、target_*、damage_type、context_type、input_damage。 - 前面 stage 的结果会以 stage
id的名字暴露给后面。 - 当前版本最推荐的写法是“显式读属性”,并按实际 Stage 顺序组织公式。
