Skip to content

这页带你从零开始配置一个完整的 Buff 效果,并验证它能正常工作。

不用担心,我们会一步一步来,每个字段都会详细解释。

一、准备工作

确认文件位置

Buff 配置文件位于:

text
plugins/HNAttribute/buffs/

你可以:

  • 直接编辑 buffs/default.yml
  • 或创建新文件如 buffs/custom.yml

理解 Buff 的本质

在 HNAttribute 里,Buff 本质上是:

一组按 source 管理的属性修饰符

用人话说就是:

  • Buff 不是只挂一个名字,而是真的会改变角色的属性
  • 比如"力量提升"Buff 会增加攻击力,"钢铁护体"Buff 会增加防御力
  • 这些改变会真实地参与战斗计算、显示、原版属性同步

它会:

  1. 给目标挂一个状态标记: 比如"力量提升"、"中毒"、"加速"
  2. 把配置编译成属性修饰符: 比如"增加 50 点攻击力"
  3. buff:<key> 的形式进入属性系统: 系统会记录这些属性来自哪个 Buff
  4. 参与战斗结算、显示、原版同步: 这些属性会真实地影响战斗结果

举个例子:

你给玩家施加了一个"力量提升"Buff:

  • 配置为"增加 50 点攻击力"
  • 系统会创建一个来源为 buff:力量提升 的修饰符
  • 玩家的攻击力会真实地增加 50 点
  • 这 50 点攻击力会参与伤害计算
  • 当 Buff 结束时,这 50 点攻击力会被移除

二、第一步:写一个最简单的 Buff

打开 buffs/custom.yml,添加:

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

这段配置的含义

  • key: 新手力量 (Buff 的唯一标识)
  • display: &c新手力量 (显示名称)
  • default-time: 120 (默认持续 120 tick,即 6 秒)
  • reapply-mode: REFRESH (重复施加时刷新持续时间)
  • attributes: 定义 Buff 对属性的影响
    • attack_damage: 增加攻击力
    • operation: ADD: 使用加法运算
    • formula: 公式为 10 + level * 5
      • 1 级 = 15 攻击力
      • 2 级 = 20 攻击力
      • 3 级 = 25 攻击力

三、第二步:重载配置

保存文件后,在游戏中执行:

text
/hnattr reload

四、第三步:验证 Buff 是否加载

执行:

text
/hnattr buff list 新手

如果看到 新手力量,说明 Buff 已成功加载。

五、第四步:施加 Buff

给自己施加 Buff:

text
/hnattr buff apply 新手力量 120 2

参数说明:

  • 新手力量: Buff key
  • 120: 持续时间 (tick)
  • 2: 等级

六、第五步:查看 Buff 是否生效

查看当前 Buff

text
/hnattr buffs

应该能看到 新手力量 及其剩余时间。

查看属性来源

text
/hnattr source

应该能看到 buff:新手力量 这个来源。

追踪属性变化

text
/hnattr trace attack_damage

应该能看到来自 buff:新手力量 的 +20 攻击力 (2 级)。

七、进阶:配置双属性 Buff

现在我们配置一个同时影响攻击力和暴击率的 Buff:

yml
狂战姿态:  # Buff key
  display: "&c狂战姿态"  # 显示名称
  default-time: 120  # 持续 120 tick (6 秒)
  reapply-mode: REFRESH  # 重施时刷新时间
  attributes:  # 可以同时修改多个属性
    attack_damage:  # 第一个属性: 攻击力
      operation: ADD
      formula: "15 + level * 8"  # 1级=23, 2级=31, 3级=39
    crit_chance:  # 第二个属性: 暴击率
      operation: ADD
      formula: "4 + level * 2"  # 1级=6, 2级=8, 3级=10

验证步骤

text
/hnattr reload
/hnattr buff apply 狂战姿态 120 1
/hnattr buffs
/hnattr trace attack_damage
/hnattr trace crit_chance

八、进阶:配置 Debuff

Debuff 本质上就是负面效果的 Buff,只需要使用负数或降低属性:

yml
易伤:  # Debuff 示例 (负面效果)
  display: "&c易伤"  # 显示名称
  default-time: 60  # 持续 60 tick (3 秒)
  reapply-mode: REFRESH  # 重施时刷新
  attributes:
    damage_reduction:  # 减伤属性
      operation: ADD
      formula: "-(8 + level * 3)"  # 使用负数降低属性 (1级=-11, 2级=-14, 3级=-17)

这个 Debuff 会降低目标的减伤能力。

九、进阶:配置高风险高收益 Buff

yml
狂暴:
  display: "&4狂暴"
  default-time: 100
  reapply-mode: REFRESH
  attributes:
    attack_damage:
      operation: ADD
      formula:
        mode: expression
        script: "25 + level * 12"
    crit_chance:
      operation: ADD
      formula:
        mode: expression
        script: "6 + level * 2"
    defense:
      operation: ADD
      formula:
        mode: expression
        script: "-(20 + level * 8)"

这个 Buff 会:

  • 大幅提高攻击力和暴击率
  • 但同时降低防御力

十、重施策略详解

REFRESH (推荐,最常用)

重复施加时刷新持续时间和等级。

适合什么场景?

  • 大多数普通 Buff
  • 你希望重复施加时重置持续时间

举个例子:

yml
力量提升:
  reapply-mode: REFRESH
  default-time: 100  # 持续 5 秒
  • 玩家获得"力量提升",剩余 5 秒
  • 2 秒后再次获得"力量提升",剩余时间重置为 5 秒
  • 如果第二次施加的等级更高,会更新为新等级

IGNORE

已有同 key Buff 时忽略新的。

适合什么场景?

  • "已有就不再重复挂"的状态
  • 比如无敌、复活保护等特殊状态

举个例子:

yml
无敌:
  reapply-mode: IGNORE
  default-time: 100
  • 玩家有"无敌"状态时,再次施加会被忽略
  • 必须等当前"无敌"结束后才能再次施加

REPLACE

用新 Buff 完全替换旧 Buff。

适合什么场景?

  • "高等级同名 Buff 顶掉旧 Buff"的场景
  • 你希望新 Buff 完全覆盖旧 Buff

举个例子:

yml
力量提升:
  reapply-mode: REPLACE
  • 玩家有 1 级"力量提升"
  • 施加 2 级"力量提升"会完全替换掉旧的
  • 旧 Buff 的剩余时间会被丢弃,使用新 Buff 的时间

十一、操作类型详解

ADD (推荐新手优先使用)

直接加值,最容易理解。

yml
operation: ADD
formula: "20"  # 直接 +20

示例:

装备攻击力: 100
Buff: +20
→ 最终 = 120

MULTIPLY_BASE (基础乘法)

✖️

对基础值进行百分比加成。

yml
operation: MULTIPLY_BASE
formula: "0.5"  # 50% 加成

示例:

装备攻击力: 100 (ADD)
Buff: 50% (MULTIPLY_BASE)

计算: 100 × (1 + 0.5) = 150

多个 MULTIPLY_BASE 叠加:

装备: 100 (ADD)
Buff1: 50% (MULTIPLY_BASE)
Buff2: 30% (MULTIPLY_BASE)

计算: 100 × (1 + 0.5 + 0.3) = 180
→ 百分比是相加的,不是相乘!

MULTIPLY_TOTAL (总值乘法)

对最终值进行百分比加成,在所有计算的最后阶段应用。

yml
operation: MULTIPLY_TOTAL
formula: "0.2"  # 20% 加成

示例:

装备: 100 (ADD)
Buff1: 50% (MULTIPLY_BASE)
Buff2: 20% (MULTIPLY_TOTAL)

计算:
  1. 基础值: 100
  2. 应用 MULTIPLY_BASE: 100 × 1.5 = 150
  3. 应用 MULTIPLY_TOTAL: 150 × 1.2 = 180

计算顺序总结

1
ADD得到基础值
2
MULTIPLY_BASE(百分比相加)得到中间值
3
MULTIPLY_TOTAL(逐个相乘)得到最终值

如何选择

  • 刚开始配置: 优先用 ADD
  • 常规百分比增益: 用 MULTIPLY_BASE
  • 最终爆发倍率: 用 MULTIPLY_TOTAL (需谨慎测试)

十二、常见问题

Buff 没有加载

可能的原因:

  1. 文件位置不对: 确保文件保存在 plugins/HNAttribute/buffs/ 目录
  2. YAML 格式错误: 检查缩进是否正确(用空格,不要用 Tab)
  3. 没有重载: 保存后需要执行 /hnattr reload

如何排查:

text
/hnattr buff list

如果看不到你的 Buff,说明没有加载成功。检查控制台是否有错误信息。

Buff 施加后没效果

可能的原因:

  1. Buff 没有真正施加: 用 /hnattr buffs 查看是否有这个 Buff
  2. 属性 ID 错误: 比如写成了 attack 而不是 attack_damage
  3. 公式错误: 公式语法有问题,导致计算失败
  4. 来源没有进入系统: 用 /hnattr source 查看是否有 buff:<key> 来源

如何排查:

按顺序执行这些命令:

text
/hnattr buffs  # 1. 确认 Buff 是否存在
/hnattr source  # 2. 确认来源是否进入系统
/hnattr trace <属性ID>  # 3. 确认属性是否有修饰符

如果 /hnattr buffs 显示有 Buff,但 /hnattr source 没有对应来源,说明 Buff 配置有问题。

数值不对

可能的原因:

  1. 公式错误: 检查 formula 是否正确
  2. 操作类型错误: 检查 operation 是否选对(ADD/MULTIPLY_BASE/MULTIPLY_TOTAL)
  3. 等级参数错误: 检查施加 Buff 时的等级参数是否正确

如何排查:

text
/hnattr trace <属性ID>

这个命令会显示:

  • 这个属性有哪些修饰符
  • 每个修饰符的来源、操作类型、数值
  • 最终计算结果

对比配置和实际数值,找出差异。

属性 ID 不知道怎么写

解决方法:

text
/hnattr info

这个命令会列出所有已注册的属性 ID。

常用的属性 ID:

  • attack_damage: 攻击力
  • defense: 防御力
  • max_health: 最大生命值
  • crit_chance: 暴击率
  • crit_multiplier: 暴击倍率
  • movement_speed: 移动速度

十三、与 MythicMobs 集成

如果你想在 MythicMobs 技能中使用 Buff:

text
hna-buff{key="新手力量";time=100;level=1} @target
hna-buff{key="狂战姿态";time=120;level=2} @self

更多 MythicMobs 集成方法,参见:

十四、下一步

现在你已经学会了如何配置 Buff,可以继续学习:

HN 系列插件文档