Skip to content

这页只解决三件事:

  1. Buff 在 HNAttribute 里到底是什么
  2. 你怎么最快写出第一个 Buff
  3. Buff 没生效时该怎么查

如果你只记一句话,请记住:

HNAttribute 里的 Buff,本质上是一组按 source 管理的属性修饰符。

它不是只挂一个状态名,而是真的会改属性、进战斗、进原版同步、进 Mythic 联动、进调试命令。


一、为什么 Buff / HOT / DOT 要拆开

很多人第一次看 HNAttribute,会直觉觉得:

  • Buff 也是一种状态
  • HOT / DOT 也是一种状态
  • 那为什么不全都放进一个系统里?

答案是:它们在运行模型上不是一回事。

Buff 负责什么

Buff 更像“状态模板 + 属性修饰层”。

它主要负责:

  • 给目标挂一个可管理的状态 key
  • 维护等级、持续时间、重施行为
  • 把配置编译成属性修饰符
  • buff:<key> 的形式进入属性系统和战斗结算

所以 Buff 更偏向于:

  • 状态标记
  • 属性增减
  • 来源管理

HOT / DOT 负责什么

HOT / DOT 更像“周期实例”。

它们主要负责:

  • 按 interval 周期跳动
  • 每次 tick 执行动作
  • 处理 refresh / merge / stack / inspect / debug
  • 管理实例生命周期

所以 HOT / DOT 更适合放进统一的 periodic runtime,而不是硬塞进 Buff 模板里。

最后只记结论

Buff 更偏向于单纯的标记、属性增减等,而不是直接作用于应用周期性功能。

如果你接下来要配持续掉血、持续回血、灼烧、中毒、流血,建议继续看:

如果你已经理解 Buff 原理,只是想快速查字段、重施模式和最短验证顺序,建议继续看:

如果你更想直接抄一批常见 Buff 模板,例如力量提升、护体、狂暴、易伤,建议继续看:


二、先跑一个最短 Buff 实验

当前默认资源里已经带了示例 Buff,所以第一步不是自己马上新建模板,而是先把默认 Buff 跑通。

第 1 步:看模板有没有加载成功

text
/hnattr buff list

你至少应该能看到类似:

  • 力量提升
  • 钢铁护体

第 2 步:给自己施加一个 Buff

text
/hnattr buff apply 力量提升 100 1

含义:

  • 力量提升:Buff key
  • 100:持续时间(tick)
  • 1:等级

第 3 步:看自己身上当前正在生效的 Buff

text
/hnattr buffs

第 4 步:看来源与属性变化

text
/hnattr source
/hnattr trace attack_damage

如果一切正常,你应该能看到类似:

text
buff:力量提升

只要这一轮能跑通,就说明你的 Buff 系统基础链路已经通了。


三、Buff 配置文件放哪里

当前 Buff 改成目录式管理了。

默认路径:

text
plugins/HNAttribute/buffs/default.yml

你也可以继续拆成:

text
plugins/HNAttribute/buffs/pve.yml
plugins/HNAttribute/buffs/pvp.yml
plugins/HNAttribute/buffs/boss.yml
plugins/HNAttribute/buffs/test.yml

目录式管理只记这几点

  • buffs/ 下可以有多个 yml 文件
  • 每个文件可以定义多个 Buff 模板
  • Buff key 在整个目录里必须唯一
  • key 重复时,后加载定义覆盖前面的定义
  • /hnattr reload 会重新扫描整个 buffs/*.yml

四、你自己写一个最简单的 Buff

下面这个例子适合作为你的第一个自定义 Buff 模板。

yml
新手力量:  # Buff 的唯一标识符 (key)
  display: "&c新手力量"  # 显示名称,支持颜色代码
  default-time: 120  # 默认持续时间 (tick), 20 tick = 1 秒
  reapply-mode: REFRESH  # 重施策略: REFRESH(刷新), IGNORE(忽略), REPLACE(替换)
  attributes:  # 属性修饰列表
    attack_damage:  # 要修改的属性 ID
      operation: ADD  # 操作类型: ADD(加法), MULTIPLY_BASE(基础乘法), MULTIPLY_TOTAL(总值乘法)
      formula: "10 + level * 5"  # 公式: 基础值 + 等级 × 系数, level 是 Buff 等级

这段配置是什么意思

  • Buff key:新手力量
  • 显示名:新手力量
  • 默认时长:120 tick
  • 重施策略:刷新
  • 效果:增加攻击力
  • 等级越高,加成越高

保存后这样验证

text
/hnattr reload
/hnattr buff list 新手
/hnattr buff apply 新手力量 120 2
/hnattr buffs
/hnattr trace attack_damage

如果这些都能对上,你就已经成功写出了第一个 Buff 模板。


五、写 Buff 时最该关心哪几个字段

很多字段你以后再细抠也来得及,刚开始先盯这 4 个:

display

显示名。

主要用于:

  • /hnattr buffs
  • 调试展示

default-time

默认持续时间,单位是 tick。

快速换算:

  • 20 = 1 秒
  • 100 = 5 秒
  • 200 = 10 秒

reapply-mode

最常用的有:

  • IGNORE
  • REFRESH
  • REPLACE

对新手最稳的理解:

  • 想让重复施加时直接刷新时长 → REFRESH
  • 想让已有同 key Buff 时直接无效 → IGNORE
  • 想明确表达“覆盖旧 Buff” → REPLACE

如果你刚开始配,优先用 REFRESH

attributes

这是 Buff 的核心。

一个 Buff 之所以能改变战斗结果,就是因为它会给目标生成属性修饰符。

例如:

yml
attributes:
  attack_damage:
    operation: ADD
    formula: "20 + level * 10"
  crit_chance:
    operation: ADD
    formula: "5 + level * 2"

意思就是:

  • 这个 Buff 改两条属性
  • 每条属性各自独立计算
  • 最后都汇入同一个 buff:<key> 来源

六、operationformula 怎么理解最省脑

operation 先这样记

当前支持:

  • ADD
  • MULTIPLY_BASE
  • MULTIPLY_TOTAL

最实用的起手建议:

  • 刚开始先用 ADD
  • 真要做百分比强化,再考虑 MULTIPLY_BASE
  • 真要做后乘设计,再考虑 MULTIPLY_TOTAL

formula 先这样写最稳

写法 1:直接写字符串

yml
formula: "20 + level * 10"

写法 2:写成 mode + script

yml
formula:
  mode: expression
  script: "20 + level * 10"

更推荐第二种,因为后面改成 Groovy 或做复杂表达式会更自然。

Buff 公式里常用变量

  • level
  • amplifier
  • time
  • duration

其中:

  • levelamplifier 基本等价
  • timeduration 基本等价

例如:

yml
script: "10 + level * 5"

表示:

  • 1 级 = 15
  • 2 级 = 20
  • 3 级 = 25

七、Buff 进入系统后长什么样

每个 Buff 在运行时都会变成一个来源:

text
buff:<BuffKey>

例如:

text
buff:力量提升
buff:新手力量

这就是为什么你能在:

text
/hnattr source
/hnattr trace <属性ID>

里直接看到 Buff 对属性系统的影响。

这也是排查 Buff 最关键的思路:

不要把 Buff 当成“界面状态”,而要把它当成:

  • 一个来源名
  • 一组修饰符
  • 一个运行中的状态实例

八、最推荐的 Buff 排查流程

情况 1:模板没加载进去

text
/hnattr buff list

如果这里都看不到,问题就在模板层。

情况 2:模板存在,但施加后没效果

text
/hnattr buff apply <buffKey> 100 1
/hnattr buffs
/hnattr source
/hnattr trace <属性ID>

情况 3:Buff 挂上了,但数值不对

优先检查:

  • formula
  • operation
  • 等级传参
  • 你追踪的是不是正确属性

这时最有价值的是:

text
/hnattr trace <属性ID>

九、MythicMobs 里怎么接 Buff

如果服务器装了 MythicMobs,当前可以直接使用:

  • hna-buff
  • hna-removebuff
  • hna-clearbuff

最短示例:

text
hna-buff{key="力量提升";time=100;level=1} @target

如果你要查更完整的 Mythic 接法,不在这页展开,直接去看:


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

  1. Buff 在 HNAttribute 里本质上是“按 source 管理的一组属性修饰符”。
  2. 最稳的上手方式不是先写复杂模板,而是先跑通默认 Buff,再自己写一个只改单属性的小模板。
  3. Buff 更偏向于单纯的标记、属性增减等,而不是直接作用于应用周期性功能。
  4. Buff 排查最常用的四个命令是:
text
/hnattr buff list
/hnattr buff apply <buffKey> 100 1
/hnattr buffs
/hnattr trace <属性ID>
  1. 如果你要把 Buff 和 DOT / HOT 配合起来,下一页建议直接看:

HN 系列插件文档