Skip to content

概述

hna-hasbuff 用于判断目标是否拥有指定的 Buff。

⚠️ 重要: 这是一个条件(Condition),必须在 Conditions 字段或使用内联条件语法 ?condition,不能直接写在 Skills 中!

基本语法

方式 1:技能级条件

yaml
SkillName:
  Conditions:
  - hna-hasbuff{参数} true/false
  Skills:
  - ...

方式 2:内联条件(推荐)

yaml
SkillName:
  Skills:
  - 技能行 @target ?hna-hasbuff{参数}

参数列表

参数类型默认值说明
key字符串-Buff 的 key(必填)
level字符串-等级判断(可选)
remaining字符串-剩余时间判断(可选)

基本示例

使用技能级条件

yaml
# 检查目标是否有"重伤" Buff
CheckHeavyWound:
  Conditions:
  - hna-hasbuff{key="重伤"} true
  Skills:
  - hna-damage{amount=200} @target
  - message{m="&c重伤目标受到额外伤害!"} @target

# 检查目标是否有"力量提升" Buff
CheckStrengthBuff:
  Conditions:
  - hna-hasbuff{key="力量提升"} true
  Skills:
  - message{m="&a目标拥有力量提升!"} @target

使用内联条件(推荐)

yaml
SmartAttack:
  Skills:
  # 如果目标有重伤,造成 200 伤害
  - hna-damage{amount=200} @target ?hna-hasbuff{key="重伤"}
  # 如果目标没有重伤,造成 100 伤害
  - hna-damage{amount=100} @target ?!hna-hasbuff{key="重伤"}

等级判断

可以判断 Buff 的等级:

yaml
# 检查"重伤" Buff 等级是否 >= 2
CheckHeavyLevel:
  Conditions:
  - hna-hasbuff{key="重伤";level=>=2} true
  Skills:
  - hna-damage{amount=300} @target

# 或使用内联条件
SmartSkill:
  Skills:
  - hna-damage{amount=300} @target ?hna-hasbuff{key="重伤";level=>=2}
  - hna-damage{amount=150} @target ?hna-hasbuff{key="力量提升";level==3}

剩余时间判断

可以判断 Buff 的剩余时间(单位:tick):

yaml
# 检查"重伤" Buff 剩余时间是否 > 20 tick
CheckBuffTime:
  Conditions:
  - hna-hasbuff{key="重伤";remaining=>20} true
  Skills:
  - message{m="&c重伤还有很长时间!"} @target

# 或使用内联条件
RefreshBuff:
  Skills:
  # 如果 Buff 剩余时间 <= 40 tick,刷新它
  - hna-buff{key="护体";time=100} @target ?hna-hasbuff{key="护体";remaining=<=40}

实际应用场景

场景 1:条件性伤害

yaml
ConditionalDamage:
  Skills:
  # 如果目标有"重伤" Buff,造成额外伤害
  - hna-damage{amount=200} @target ?hna-hasbuff{key="重伤"}
  - message{m="&c重伤目标受到额外伤害!"} @target ?hna-hasbuff{key="重伤"}
  # 如果目标没有"重伤" Buff,造成普通伤害
  - hna-damage{amount=100} @target ?!hna-hasbuff{key="重伤"}

场景 2:Buff 刷新

yaml
BuffRefresh:
  Skills:
  # 如果目标已有"力量提升" Buff,刷新时长
  - hna-buff{key="力量提升";time=200;level=1} @target ?hna-hasbuff{key="力量提升"}
  - message{m="&a力量提升已刷新!"} @target ?hna-hasbuff{key="力量提升"}
  # 如果目标没有"力量提升" Buff,施加新的
  - hna-buff{key="力量提升";time=100;level=1} @target ?!hna-hasbuff{key="力量提升"}
  - message{m="&a获得力量提升!"} @target ?!hna-hasbuff{key="力量提升"}

场景 3:Buff 叠加

yaml
StackBuff:
  Skills:
  # 如果目标有"连击" Buff 且等级 < 5,提升等级
  - hna-buff{key="连击";time=100;level=2} @target ?hna-hasbuff{key="连击";level=<5}
  # 如果目标有"连击" Buff 且等级 >= 5,触发特殊效果
  - hna-damage{amount=500} @target ?hna-hasbuff{key="连击";level=>=5}
  - hna-removebuff{key="连击"} @target ?hna-hasbuff{key="连击";level=>=5}
  - message{m="&c连击爆发!"} @target ?hna-hasbuff{key="连击";level=>=5}

场景 4:Buff 驱散

yaml
Dispel:
  Skills:
  # 检查并驱散增益 Buff
  - hna-removebuff{key="力量提升"} @target ?hna-hasbuff{key="力量提升"}
  - message{m="&e力量提升被驱散!"} @target ?hna-hasbuff{key="力量提升"}
  - hna-removebuff{key="护体"} @target ?hna-hasbuff{key="护体"}
  - message{m="&e护体被驱散!"} @target ?hna-hasbuff{key="护体"}

场景 5:Buff 时间判断

yaml
BuffTimeCheck:
  Skills:
  # 如果"重伤" Buff 剩余时间 <= 20 tick,延长时间
  - hna-buff{key="重伤";time=100;level=1} @target ?hna-hasbuff{key="重伤";remaining=<=20}
  - message{m="&c重伤时间延长!"} @target ?hna-hasbuff{key="重伤";remaining=<=20}

完整技能示例

yaml
ComboSystem:
  Skills:
  # 没有连击,施加 1 级连击
  - hna-buff{key="连击";time=60;level=1} @Self ?!hna-hasbuff{key="连击"}
  - hna-damage{amount=100} @target ?!hna-hasbuff{key="连击"}
  - message{m="&e连击 x1"} @Self ?!hna-hasbuff{key="连击"}
  
  # 有连击且等级 < 3
  - hna-buff{key="连击";time=60;level=2} @Self ?hna-hasbuff{key="连击";level=<3}
  - hna-damage{amount=150} @target ?hna-hasbuff{key="连击";level=<3}
  - message{m="&e连击 x2"} @Self ?hna-hasbuff{key="连击";level=<3}
  
  # 有连击且等级 >= 3
  - hna-damage{amount=300} @target ?hna-hasbuff{key="连击";level=>=3}
  - hna-removebuff{key="连击"} @Self ?hna-hasbuff{key="连击";level=>=3}
  - message{m="&c连击终结!"} @Self ?hna-hasbuff{key="连击";level=>=3}
  - effect:particles{p=EXPLOSION_LARGE;a=20} @target ?hna-hasbuff{key="连击";level=>=3}

注意事项

  1. 这是条件,不是技能:必须在 Conditions 字段或使用内联条件 ?condition
  2. key 参数必须与目标身上的 Buff key 完全匹配
  3. 不写 key 参数时条件永远为 false
  4. levelremaining 参数可选
  5. 等级和时间判断支持 >=, >, <=, <, ==, != 操作符
  6. 需要明确的目标选择器
  7. 推荐使用内联条件:代码更简洁,逻辑更清晰

内联条件语法

  • ?condition - 条件为真时执行
  • ?!condition - 条件为假时执行(注意感叹号)
  • ?condition1 ?condition2 - 多个条件都为真时执行(AND)

与其他条件的区别

条件用途
hna-hasbuff判断是否有某个 Buff
hna-hasot判断是否有某个 周期效果
hna-attribute判断任意属性的值

调试方法

text
/hnattr buffs
/hnattr source

相关文档

HN 系列插件文档