Skip to content

这页只做一件事:给已经在用 MythicMobs 的人提供快速可抄的写法和默认心智。

如果你现在想看原理,不要在这页硬啃:


快速导航


一、怪物属性标签

当前默认按顺序读取:

yaml
Attribute
attribute

所以你可以写:

yaml
Attribute:
  - "攻击力: 100"
  - "火焰伤害: 20"
  - "火焰抗性: 10"

如果你服里用别的标签名,例如:

  • Stats
  • Attr
  • HNAttribute

就去改:

yaml
plugins/HNAttribute/mythicmobs.yml

怪物按类型受伤倍率

现在怪物还可以直接写:

yaml
damage-modifiers:
  physical: 0.8
  fire: 1.5
  ice: 0.5

含义是:

  • physical: 0.8 → 物理伤害最终只吃 80%
  • fire: 1.5 → 火伤最终吃 150%
  • ice: 0.5 → 冰伤最终只吃 50%

最短可抄示例:

yaml
ElementDummy:
  Type: ZOMBIE
  Attribute:
    - "攻击力: 100"
    - "火焰抗性: 20"
  damage-modifiers:
    physical: 0.8
    fire: 1.5
    ice: 0.5

它和抗性属性有什么区别

  • fire_resistance / ice_resistance:属于 HNAttribute 通道公式里的属性层
  • damage-modifiers:属于怪物配置里的按伤害类型最终倍率层

可以把它理解成:

  1. 先按 *_damage / *_resistance 走正常通道结算
  2. 再按这个怪自己配置的 damage-modifiers 乘一次对应类型倍率

所以它很适合做:

  • 怪物模板级弱点 / 抗性糖
  • Boss 某阶段对某元素额外脆弱
  • 不想额外加一堆属性时,直接在 MythicMobs 配表

补充一点:只要这次伤害明确标了 damage-type,像 hna-damage{dt=fire}、带 damage-type=fire 的 DOT,也会吃到这个倍率。


二、当前可用 Mechanics / Conditions

Mechanics

yaml
- hna-damage{amount=100} @target
- hna-buff{key="力量提升";time=100;level=1} @target
- hna-removebuff{key="力量提升"} @target
- hna-clearbuff @target
- hna-dot{amount=2;duration=60;interval=20;mode=refresh;key="burn-dot"} @target
- hna-hot{amount=2;duration=60;interval=20;mode=refresh;key="regen-hot"} @target
- hna-clearot{key="burn-dot"} @target
- hna-cleardot{source=caster} @target
- hna-clearhot{source=caster} @target
- hna-triggerot{all=true;type=all} @target
- hna-triggerdot{source=caster} @target
- hna-triggerhot{source=caster} @target
- hna-detonateot{all=true;type=all;stacks=all} @target
- hna-detonatedot{source=caster;stacks=2;aggregate=true} @target
- hna-detonatehot{source=caster;consume=false} @target

Conditions

yaml
- hna-attribute{attribute=attack_damage;value=50;operator=>=} true
- hna-attribute{attribute=current_mana;value=30;operator=>=} true
- hna-hasbuff{key="重伤"} true
- hna-hasbuff{key="重伤";level=>=2} true
- hna-hasbuff{key="重伤";remaining=>20} true
- hna-hasot{key="burn-dot"} true
- hna-hasot{tag="dot"} true
- hna-hasot{source=caster;key="burn-dot"} true

命名说明

主文档统一使用:

  • hna-clearot
  • hna-triggerot
  • hna-detonateot

这页后面的示例也统一按 ot 命名来写。


三、目标选择器要注意什么

当前这一批 HNAttribute Mythic mechanics,有一个很重要的实现约束:

  • 只作用于 Mythic 明确选出来的实体目标
  • 如果没有 entityTargets,技能会直接返回
  • 不会再回退到 trigger
  • 也不会因为 trigger 恰好是自己,就回打自己 / 给自己挂 DOT/HOT

所以现在最稳的写法是:

  1. 想打自己或给自己加效果 → @Self
  2. 想打目标 → @target 或其他可靠目标器
  3. 目标器本身无效时,先修目标器,不要指望 HNAttribute 自动兜底

例如:

  • @MIRMobsInRadius,不是“半径内任意实体”
  • 如果你想找半径内任意实体,优先用 @EIR
  • @MIR{r=30} 这类没写类型的写法,当前版本下通常会报配置错误

四、hna-damage

最短写法

yaml
- hna-damage{a=100} @target

适合什么场景

  • 固定值伤害
  • 百分比伤害
  • 接入 HNAttribute 战斗管线

你最常写的参数

  • amount / a:基础伤害;不写或 <= 0 时,回退为走 HNAttribute 战斗管线
  • multiplier / m:最终倍率,默认 1.0
  • percent / p:是否按目标最大生命百分比结算,默认 false
  • source-type / st:来源类型,默认 skill
  • damage-type / dt:伤害类型,默认 physical
  • tags / t:附加标签;系统会自动补一个 mythic
  • pi:是否尽量绕过伤害间隔,默认 false
  • pk:是否尽量抑制击退,默认 false

三种最常见写法

1)固定伤害

yaml
- hna-damage{amount=100} @target

2)百分比伤害

yaml
- hna-damage{amount=10;percent=true} @target

3)走 HNAttribute 战斗管线

yaml
- hna-damage{m=1.2;source-type=skill;damage-type=fire;tags=mythic,skill} @target
- hna-damage{m=1.2;st=skill;dt=fire;t=mythic,skill;pi=true;pk=true} @target

显式伤害参与战斗管线(新增)

从 2.2.0 版本开始,固定值和百分比伤害可以通过 participate-pipeline 参数进入战斗管线,继续走命中、闪避、格挡、增减伤、暴击等阶段。

基本用法

yaml
# 固定值伤害参与管线
- hna-damage{a=100;pp=true;st=skill;dt=physical} @target

# 百分比伤害参与管线
- hna-damage{a=12;p=true;pp=true;st=skill;dt=physical} @target

参数说明

  • pp / participate-pipeline:是否参与战斗管线,默认 false
  • 开启后,显式伤害会作为管线输入,继续经过增减伤、暴击等阶段
  • 系统会自动附加标签:
    • explicit-damage:所有显式伤害
    • fixed-damage:固定值伤害
    • percent-damage:百分比伤害

与默认行为的区别

不开启 pp=true(默认):

  • 固定值/百分比伤害直接结算
  • 不经过战斗管线的增减伤、暴击等阶段
  • 保持原有的直接伤害语义

开启 pp=true

  • 显式伤害作为管线输入
  • 继续走命中、闪避、格挡判定
  • 经过增减伤、暴击等阶段
  • 可被管线配置的标签规则控制

实际应用场景

yaml
# 场景1:斩杀技能,按百分比但仍吃增伤和暴击
- hna-damage{a=15;p=true;pp=true;st=skill;dt=physical} @target

# 场景2:固定值技能伤害,需要吃增伤但不暴击(通过管线配置控制)
- hna-damage{a=200;pp=true;st=skill;dt=magic;t=no-crit} @target

# 场景3:真实伤害,不参与管线(默认行为)
- hna-damage{a=100;st=skill;dt=true} @target

一句话理解

hna-damage 不是 Mythic 原版 damage{} 的同义替代,而是 HNAttribute 自己的伤害入口。

元素赋予 / 技能临时元素伤害

这里先记住一个默认语义:

fire_damage 是“火焰通道数值”,不是内置的“火焰赋予开关”。

也就是说,在当前默认战斗模型里:

  • 只要 fire 通道被启用
  • 且攻击方的 fire_damage > 0
  • 这次结算就可能产出火焰分量

当前系统没有内置 fire_imbue 这一层布尔开关

如果你想做“平时有 fire_damage 数值,但必须开火焰赋予以后才允许打出火伤”,推荐这样配:

  1. 自己增加一个独立属性,例如 fire_imbue
  2. pipelines/*.yml 的相关 stage 里,对 fire 类型或 self_fire_damage 做门控

例如可以新增一个按通道门控的 Stage:

yaml
# stages/fire_gate.yml
id: fire_gate
type: per_channel
description: "火焰通道门控"
formula: |-
  if (channel_type == 'fire' && self_fire_imbue <= 0) {
    return 0
  }
  return channel_value

然后把它加入你实际使用的 pipelines/*.yml

yaml
# pipelines/melee.yml
id: melee
stages:
  - hit
  - dodge
  - crit
  - block
  - collect
  - damage
  - fire_gate
  - resist
  - crit_damage
  - lifesteal
  - thorns

这样就变成:

  • 平时 fire_damage 只是“你有多少潜在火焰通道值”
  • fire_imbue > 0 时,才真的放行 fire 通道

如果你只是想打一发“明确是火属性”的技能伤害

最直接就写:

yaml
- hna-damage{a=100;damage-type=fire;source-type=skill} @target

或者短写:

yaml
- hna-damage{a=100;dt=fire;st=skill} @target

这更适合:

  • 火球术
  • 一次性火焰斩击
  • Boss 某个技能临时转成火属性

如果你想做“开技能期间临时带火”

通常有两种思路:

  1. **赋予流:**先给自己临时加 fire_imbue,让普攻 / 常规战斗管线在持续时间内放行火通道
  2. **技能直伤流:**技能本身直接用 hna-damage{dt=fire},不改平A语义

你可以按玩法选:

  • 想做“武器附魔一段时间” → 用 fire_imbue + pipeline 门控
  • 想做“这一招就是火属性” → 直接用 hna-damage{dt=fire}

排查时先看什么

text
/hnattr source
/hnattr trace attack_damage

五、Buff 相关 Mechanics

hna-buff

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

关键参数:

  • key / id:Buff key;不写不会施加
  • time / duration:持续时间;默认 0
  • level / lv / amplifier:Buff 等级;默认 1

hna-removebuff

yaml
- hna-removebuff{key="力量提升"} @target

关键参数:

  • key / id:Buff key;不写不会移除

hna-clearbuff

yaml
- hna-clearbuff @target

作用:清掉目标当前全部 Buff。

最稳的排查方式

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

六、属性判断条件 hna-attribute

最短写法

yaml
- hna-attribute{attribute=attack_damage;value=50;operator=>=} true
- hna-attribute{attr=max_health;v=100;op=>} true

适合什么场景

  • 判断任意属性的值(max_health、max_mana、attack_damage 等)
  • 技能释放前置条件(如法力值足够)
  • 根据属性值触发不同技能分支
  • Boss 阶段判断(如生命值低于某个值)

你最常写的参数

  • attribute / attr / a:属性 ID(如 max_manaattack_damagemana_deficit 等)
  • value / amount / v:比较的目标值
  • operator / op / o:比较操作符,默认 >=
    • >= / ge:大于等于
    • > / gt:大于
    • <= / le:小于等于
    • < / lt:小于
    • == / eq / =:等于
    • != / ne:不等于

常见使用场景

1)法力值判断

yaml
# 检查是否有至少 30 点法力值
- hna-attribute{attribute=current_mana;value=30;operator=>=} true

# 检查当前法力值是否大于 50
- hna-attribute{attribute=current_mana;value=50;operator=>} true

# 检查最大法力值是否达到 100
- hna-attribute{attribute=max_mana;value=100;operator=>=} true

2)攻击力判断

yaml
# 检查攻击力是否达到 50
- hna-attribute{attribute=attack_damage;value=50;operator=>=} true

# 检查火焰伤害是否大于 20
- hna-attribute{attribute=fire_damage;value=20;operator=>} true

3)生命值判断

yaml
# 检查最大生命值是否大于 100
- hna-attribute{attribute=max_health;value=100;operator=>} true

# 检查当前生命值是否低于 50(配合 current_health 属性)
- hna-attribute{attribute=current_health;value=50;operator=<} true

4)抗性判断

yaml
# 检查火焰抗性是否达到 30
- hna-attribute{attribute=fire_resistance;value=30;operator=>=} true

完整技能示例

yaml
FireballSkill:
  Skills:
  # 先检查法力值是否足够(至少需要 30 点)
  - hna-attribute{attribute=current_mana;value=30;operator=>=} true
  # 法力值足够,释放火球术
  - hna-damage{amount=100;damage-type=fire;source-type=skill} @target
  # 消耗 30 点法力值
  - hna-attribute{attribute=current_mana;amount=-30;source=fireball_cost} @self

与其他条件的区别

  • hna-attribute:判断任意属性的值(通用)
  • hna-hasbuff:判断是否有某个 Buff
  • hna-hasot:判断是否有某个周期效果

一句话理解

hna-attribute 是通用的属性值判断条件,可以用于任何属性,不限于法力值。


七、hna-dot / hna-hot

最短 DOT

yaml
- hna-dot{amount=2;duration=60;interval=20;mode=refresh;key="burn-dot"} @target
- hna-dot{a=2;d=60;i=20;m=refresh;k="burn-dot"} @target

最短 HOT

yaml
- hna-hot{amount=2;duration=60;interval=20;mode=refresh;key="regen-hot"} @target
- hna-hot{a=2;d=60;i=20;m=refresh;k="regen-hot"} @target

起手只记这几个参数

  • amount / a:每跳数值;默认 0
  • duration / d / t:总持续时间;默认 60
  • interval / i:跳动间隔;默认 20
  • delay / dl:初始延迟;默认 0
  • mode / m:重施策略;默认 refresh
  • key / k:实例 key;不写时回退到 damage-type
  • percent / p:是否按目标最大生命百分比解释 amount;默认 false
  • participate-pipeline / pp:DOT 每跳是否参与战斗管线;默认 false
  • source-type / sthna-dot 默认 dothna-hot 默认 internal
  • damage-type / dthna-dot 默认 dothna-hot 默认 internal
  • tags / t:系统会自动补 mythicdot / hot
  • max-stacks / ms:最大层数;默认 1
  • stop-on-caster-death / siv:来源失效时是否停止实例;默认 true

DOT/HOT 参与战斗管线(新增)

从 2.2.0 版本开始,DOT/HOT 每跳可以通过 participate-pipeline 参数进入战斗管线。

基本用法

yaml
# DOT 每跳参与管线
- hna-dot{a=5;d=60;i=20;pp=true;st=dot;dt=fire} @target

# 百分比 DOT 参与管线
- hna-dot{a=3;p=true;d=60;i=20;pp=true;st=dot;dt=poison} @target

参数说明

  • pp / participate-pipeline:每跳是否参与战斗管线,默认 false
  • 开启后,每跳伤害会作为显式伤害输入进入管线
  • 系统会自动附加标签:
    • participate-pipeline
    • explicit-damage
    • fixed-damagepercent-damage

与默认行为的区别

不开启 pp=true(默认):

  • DOT 每跳直接结算,不经过战斗管线
  • 保持原有的周期伤害语义
  • 适合纯粹的持续伤害效果

开启 pp=true

  • 每跳伤害进入战斗管线
  • 可被增减伤、暴击等阶段影响
  • 可通过管线配置的标签规则控制

实际应用场景

yaml
# 场景1:灼烧 DOT,每跳吃增伤但不暴击
- hna-dot{a=8;d=100;i=20;pp=true;st=dot;dt=fire;k="burn"} @target

# 场景2:流血 DOT,按百分比且参与管线
- hna-dot{a=2;p=true;d=80;i=20;pp=true;st=dot;dt=physical;k="bleed"} @target

# 场景3:普通中毒,不参与管线(默认行为)
- hna-dot{a=5;d=60;i=20;st=dot;dt=poison;k="poison"} @target

最稳起手模板

yaml
- hna-dot{amount=2;duration=60;interval=20;mode=refresh;key="tutorial-dot"} @target

当前实现要特别注意什么

  1. hna-dot / hna-hot 没有显式实体目标就直接返回
  2. DOT 每跳默认走的是无击退内部伤害
  3. HOT 每跳走的是普通周期治疗
  4. 从 2.2.0 开始,可通过 pp=true 让 DOT 每跳参与战斗管线

八、周期清理 Mechanics

hna-clearot

yaml
- hna-clearot{key="burn-dot"} @target
- hna-clearot{tag="dot"} @target
- hna-clearot{source=caster;key="burn-dot"} @target
- hna-clearot{all=true} @target

关键参数:

  • key:按 key 清理;支持 * 前缀匹配
  • tag:按标签清理,如 dot / hot
  • source:可写 caster / trigger / all
  • all:是否清理所有匹配实例,默认 false

hna-cleardot

yaml
- hna-cleardot @target
- hna-cleardot{source=caster} @target

只清 DOT;source 默认 all

hna-clearhot

yaml
- hna-clearhot @target
- hna-clearhot{source=caster} @target

只清 HOT;source 默认 all


九、周期结算 / 引爆 Mechanics

这一组现在只要先记住两套语义:

  • trigger* = 立刻多跳一次
  • detonate* = 把未来若干跳一次性合并结算

A. hna-triggerot / hna-triggerdot / hna-triggerhot

最短写法:

yaml
- hna-triggerot{all=true;type=all} @target
- hna-triggerdot{source=caster} @target
- hna-triggerhot{source=caster} @target

你最常写的参数:

  • all:是否忽略 key,直接处理所有匹配实例;默认 false
  • key / k:只处理某个 key;支持 * 前缀匹配
  • source:来源过滤;默认 all
  • type:动作类型过滤;triggerot 默认 alltriggerdot 默认 dottriggerhot 默认 hot
  • amp-attr / amp-owner / amp-base:DOT 放大参数,只对 DAMAGE 生效

当前语义:

  1. 找到匹配实例
  2. 立刻执行一次正常 tick
  3. 正常扣掉 1 次 repeat

也就是说,它是“补跳一跳”,不是“提前清算后面全部”。

B. hna-detonateot / hna-detonatedot / hna-detonatehot

最短写法:

yaml
- hna-detonateot{all=true;type=all;stacks=all} @target
- hna-detonatedot{source=caster;stacks=2;aggregate=true} @target
- hna-detonatehot{source=caster;consume=false} @target

你最常写的参数:

  • all:是否忽略 key,直接处理所有匹配实例;默认 false
  • key / k:只处理某个 key;支持 * 前缀匹配
  • source:来源过滤;默认 all
  • type:动作类型过滤;detonateot 默认 alldetonatedot 默认 dotdetonatehot 默认 hot
  • stacks:提前清算多少次剩余 repeat;默认 1,可写 all
  • consume:是否真的消耗这些剩余 repeat;默认 true
  • aggregate:是否按“来源 + action 签名”聚合成更少的结算段;默认 false
  • amp-*:仍只对 DAMAGE 生效

当前语义:

  1. 找到匹配实例
  2. stacks 计算要提前结算多少次剩余 repeat
  3. 把这几次未来跳动的值一次性合并执行
  4. consume=true 时才真正扣掉剩余 repeat

一句话理解:

  • trigger* = 补跳
  • detonate* = 提前清算

十、DOT / HOT 的核心差异

它们共用同一套 periodic runtime,核心差异只有一个:

  • hna-dot = 周期实例 + DAMAGE action
  • hna-hot = 周期实例 + HEAL action

在当前实现里:

  • DOT 默认 source-type=dot
  • DOT 默认 damage-type=dot
  • HOT 默认 source-type=internal
  • HOT 默认 damage-type=internal
  • DOT 自动补 dot 标签
  • HOT 自动补 hot 标签

如果你想看更完整的 runtime 解释,直接去看:


十一、最推荐的排查顺序

怪物属性没读到

  1. mythicmobs.yml 的标签名
  2. 看怪物配置里是不是写到了正确节点
  3. 开启 /hnattr debug debug,攻击怪物后看控制台输出的战斗管线日志,确认怪物侧属性是否被正确注入

注意:/hnattr inspect/hnattr trace 等命令只能查玩家属性,不能直接查怪物。怪物属性需要通过战斗 debug 日志间接验证。

Buff 没挂上

text
/hnattr buffs
/hnattr source

DOT / HOT 没跑起来

text
/hnattr periodic list
/hnattr periodic inspect <key>
/hnattr periodic debug detail <key>

结算语句体感不对

先分清你想要的是哪一种:

  1. 立刻额外跳一次hna-triggerot / hna-triggerdot / hna-triggerhot
  2. 一次性提前清算未来若干跳hna-detonateot / hna-detonatedot / hna-detonatehot

十二、最该记住的重点

  1. MythicMobs 这边现在已经不只是 hna-damage,还包括 Buff、条件、周期实例、即时结算与引爆能力。
  2. damage-modifiers 可以直接给怪物模板加"按伤害类型最终倍率"的配置糖。
  3. fire_damage 默认只是火焰通道数值,不等于内置的"火焰赋予开关"。
  4. hna-attribute 是通用的属性值判断条件,可以用于任何属性(max_health、max_mana、attack_damage 等)。
  5. hna-dot / hna-hot 已经是统一 periodic runtime 的入口之一。
  6. trigger* 的语义是"立即多跳一次"。
  7. detonate* 的语义是"把未来若干跳一次性合并结算"。
  8. 从 2.2.0 开始,固定值/百分比伤害和 DOT/HOT 可通过 pp=true 参与战斗管线。
  9. 显式伤害会自动附加 explicit-damagefixed-damagepercent-damage 标签,可在管线配置中控制。
  10. 最终排查不要只看 Mythic 技能链,要回到 HNAttribute 的运行时命令上看。

HN 系列插件文档