主题
这页只解决三件事:
- Buff 在 HNAttribute 里到底是什么
- 你怎么最快写出第一个 Buff
- 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 key100:持续时间(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
最常用的有:
IGNOREREFRESHREPLACE
对新手最稳的理解:
- 想让重复施加时直接刷新时长 →
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>来源
六、operation 和 formula 怎么理解最省脑
operation 先这样记
当前支持:
ADDMULTIPLY_BASEMULTIPLY_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 公式里常用变量
levelamplifiertimeduration
其中:
level和amplifier基本等价time和duration基本等价
例如:
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 挂上了,但数值不对
优先检查:
formulaoperation- 等级传参
- 你追踪的是不是正确属性
这时最有价值的是:
text
/hnattr trace <属性ID>九、MythicMobs 里怎么接 Buff
如果服务器装了 MythicMobs,当前可以直接使用:
hna-buffhna-removebuffhna-clearbuff
最短示例:
text
hna-buff{key="力量提升";time=100;level=1} @target如果你要查更完整的 Mythic 接法,不在这页展开,直接去看:
十、这一页最该记住的重点
- Buff 在 HNAttribute 里本质上是“按
source管理的一组属性修饰符”。 - 最稳的上手方式不是先写复杂模板,而是先跑通默认 Buff,再自己写一个只改单属性的小模板。
- Buff 更偏向于单纯的标记、属性增减等,而不是直接作用于应用周期性功能。
- Buff 排查最常用的四个命令是:
text
/hnattr buff list
/hnattr buff apply <buffKey> 100 1
/hnattr buffs
/hnattr trace <属性ID>- 如果你要把 Buff 和 DOT / HOT 配合起来,下一页建议直接看:
