主题
这页不讲 Buff 原理,只做一件事:
当你已经知道 HNAttribute 的 Buff 是什么,但想快速确认字段怎么写、什么值最常用、改完后该怎么验证时,直接查这一页。
如果你还没理解 Buff 在系统里的定位,先看:
如果你想直接拿一批常见模板开改,再看:
如果你要看 DOT / HOT / 周期实例,先看:
一、最小可用 Buff 模板
yml
新手力量:
display: "&c新手力量"
default-time: 120
reapply-mode: REFRESH
attributes:
attack_damage:
operation: ADD
formula: "10 + level * 5" # 智能解析,无需指定 mode这 4 块就是最小核心:
displaydefault-timereapply-modeattributes
二、文件放哪里
默认目录:
text
plugins/HNAttribute/buffs/常见组织方式:
text
plugins/HNAttribute/buffs/default.yml
plugins/HNAttribute/buffs/pve.yml
plugins/HNAttribute/buffs/pvp.yml
plugins/HNAttribute/buffs/boss.yml
plugins/HNAttribute/buffs/test.yml只要记住:
buffs/下可以拆多个文件- 每个文件里可以定义多个 Buff
- Buff key 在整个目录里必须唯一
- key 重复时,后加载定义会覆盖前面的定义
- 改完后通常执行:
text
/hnattr reload三、字段速查
| 字段 | 是否常用 | 作用 | 常见写法 |
|---|---|---|---|
display | 高 | Buff 显示名 | "&c力量提升" |
default-time | 高 | 默认持续 tick | 100 / 120 / 200 |
reapply-mode | 高 | 重施策略 | REFRESH / IGNORE / REPLACE |
attributes | 高 | Buff 实际改哪些属性 | attack_damage / defense 等 |
operation | 高 | 属性修饰运算方式 | ADD / MULTIPLY_BASE / MULTIPLY_TOTAL |
formula | 高 | 数值公式 | 字符串或 mode + script |
四、display
yml
display: "&c力量提升"作用:
/hnattr buffs里展示名字- 调试输出里更易读
如果不写:
- 会回退成 Buff key
最稳建议:
- key 用稳定英文/业务键
display用玩家可读文本
五、default-time
yml
default-time: 100单位是 tick。
快速换算:
20= 1 秒100= 5 秒200= 10 秒600= 30 秒
它的意义是:
- 当命令 / Mythic / API 没显式传入 time 时,使用这个默认值
如果你命令里显式写了时间,例如:
text
/hnattr buff apply 力量提升 200 1那会优先使用命令传入值。
六、reapply-mode
yml
reapply-mode: REFRESH最常用的就是这 3 个:
| 模式 | 适合什么时候用 | 直觉理解 |
|---|---|---|
REFRESH | 大多数普通 Buff | 同 key 再挂一次时刷新持续时间/状态 |
IGNORE | 不希望重复覆盖的状态 | 已经有了就忽略新的 |
REPLACE | 明确想用新效果覆盖旧效果 | 老的退掉,新的顶上 |
新手最稳默认值:
- 优先用
REFRESH
典型场景:
想做“持续续杯型”增益
yml
reapply-mode: REFRESH想做“已有就不再重复挂”的状态
yml
reapply-mode: IGNORE想做“高等级同名 Buff 顶掉旧 Buff”
yml
reapply-mode: REPLACE七、attributes
这是 Buff 最核心的部分。
yml
attributes:
attack_damage:
operation: ADD
formula: "20 + level * 10"
crit_chance:
operation: ADD
formula: "5 + level * 2"意思是:
- 这个 Buff 同时改两条属性
- 每条属性各自算自己的公式
- 最后统一以
buff:<key>这个来源进入属性系统
属性 ID 要注意什么
attributes 下面的 key 必须是已经注册过的属性 ID。
例如:
attack_damagedefensecrit_chancedamage_reduction
如果写了不存在的属性:
- 这条不会变成有效 Buff 属性
- 重载时一般会在日志里给出警告
最稳的排查方式:
text
/hnattr info
/hnattr trace <属性ID>八、operation
yml
operation: ADD当前常见运算方式:
| operation | 用途 | 常见场景 |
|---|---|---|
ADD | 直接加值 | 攻击力 +20、防御 +50 |
MULTIPLY_BASE | 按基础值乘算 | 少量比例型修正 |
MULTIPLY_TOTAL | 按最终值乘算 | 最终倍率型 Buff |
最稳建议
如果你刚开始配:
- 优先用
ADD
因为:
- 最容易理解
- 最不容易叠出意外结果
- 最方便配合
trace排查
九、formula
写法 A:直接写字符串
yml
formula: "20 + level * 10"写法 B:显式写 mode + script
yml
formula:
mode: expression
script: "20 + level * 10"当前 Buff 公式里常见可用变量:
levelamplifiertimeduration
最常见的起手公式:
yml
formula: "10 + level * 5"推荐什么时候显式写 mode
当你只是普通表达式时:
- 直接字符串就够用
当你想让别人一眼看出这是脚本结构,或者你准备以后扩成别的脚本模式时:
- 写
mode + script更清楚
十、最常抄的 4 类模板
1)纯攻击 Buff
yml
力量提升:
display: "&c力量提升"
default-time: 100
reapply-mode: REFRESH
attributes:
attack_damage:
operation: ADD
formula: "20 + level * 10"2)纯防御 Buff
yml
钢铁护体:
display: "&7钢铁护体"
default-time: 80
reapply-mode: REPLACE
attributes:
defense:
operation: ADD
formula: "50 + level * 25"3)双属性 Buff
yml
狂战姿态:
display: "&c狂战姿态"
default-time: 120
reapply-mode: REFRESH
attributes:
attack_damage:
operation: ADD
formula: "15 + level * 8"
crit_chance:
operation: ADD
formula: "4 + level * 2"4)带上限的减伤 Buff
yml
守护屏障:
display: "&b守护屏障"
default-time: 100
reapply-mode: REFRESH
attributes:
damage_reduction:
operation: ADD
formula: "min(30, 10 + level * 3)"十一、改完后怎么验证
最稳顺序:
text
/hnattr reload
/hnattr buff list
/hnattr buff apply <key> 100 1
/hnattr buffs
/hnattr source
/hnattr trace <属性ID>分别在看:
reload:配置有没有正常读入buff list:模板有没有注册成功buff apply:运行时能不能挂上buffs:当前目标身上是否真有这个 Buffsource:来源里有没有buff:<key>trace:具体属性值是不是按预期进去了
十二、最常见的 6 个坑
1)写了 Buff 但没 reload
先执行:
text
/hnattr reload2)属性 ID 写错
先检查:
text
/hnattr info3)Buff 已挂上,但 trace 里没变化
先看:
text
/hnattr buffs
/hnattr source
/hnattr trace <属性ID>4)重复施加时行为不对
先回头检查:
reapply-mode
5)显示名对了,但数值不对
优先怀疑:
formulaoperation- 属性 ID 是否写错
6)把 Buff 和 DOT/HOT 当成同一种东西
如果你真正想做的是:
- 持续掉血
- 持续回血
- 定时触发动作
那应该优先去看:
十三、一句话记忆版
Buff 最小配置只要记 4 个:
display、default-time、reapply-mode、attributes;排查顺序固定是reload -> buff list -> buff apply -> buffs -> source -> trace。
