Skip to content

HNAttribute 的战斗层:

装备、Buff、周期效果统一成属性和伤害上下文,再进入战斗管线结算。

最终伤害由这些因素共同决定:

  • 装备属性
  • Buff 修饰
  • 周期伤害/治疗
  • 伤害类型
  • 战斗阶段公式
  • 显示层

一、战斗链路

  1. 监听攻击事件
  2. 识别攻击者与受击者
  3. 读取双方最终属性
  4. 根据攻击方式选择 Pipeline(melee / ranged / spell / dot)
  5. 按 Pipeline 的 stages 列表逐个执行 Stage
  6. collect_channels 自动收集伤害通道
  7. per_channel 按通道执行减伤(优先使用 DamageType 的 resist-formula)
  8. 生成最终伤害分段
  9. 交给显示层与原版伤害投递

配置选项:

yml
ignore-vanilla-armor: true  # 以自定义结算为主
disable-sweep-attack: true  # 关闭原版横扫 AOE

二、Buff 与周期效果如何参与战斗

Buff - 先变成属性修饰符,再参与战斗

例如:

  • 力量提升 → 提高 attack_damage
  • 钢铁护体 → 提高 defense

这些变化直接进入战斗公式,不是视觉特效。

周期效果 - 两种结果类型

  • heal: 直接改生命值
  • damage: 走内部伤害上下文

instance 模式与 hna-dot/hna-hot 已并入统一 runtime,持续伤害会带:

  • sourceType
  • damageType
  • tags
  • 来源/目标实体

DOT 不再只是"每秒扣血",而是有完整上下文的战斗来源。

三、默认伤害类型

类型 ID用途
physical近战/普通伤害
magic法术伤害

伤害类型不硬绑定属性,真正读取什么属性由 stage 公式决定。

装备上的:

text
攻击力: 120
火焰伤害: 25

会对应两条独立伤害来源:物理通道和火焰通道。

四、战斗上下文

默认定义了四种上下文:

  • player-mob - 玩家打怪
  • player-player - PVP
  • mob-player - 怪打玩家
  • mob-mob - 怪物互殴

五、默认管线

Pipeline用途Stage 序列
melee近战攻击hit -> dodge -> crit -> block -> collect -> damage -> resist -> crit_damage -> lifesteal -> thorns
ranged远程射击hit -> dodge -> crit -> collect -> damage -> resist -> crit_damage -> lifesteal
spell法术释放hit -> dodge -> crit -> collect -> damage -> resist -> crit_damage -> lifesteal -> thorns
dot持续伤害collect -> resist

关键 Stage 说明:

  • collect -- collect_channels 类型,自动收集攻击者身上所有 channel-role=damage 且值 > 0 的伤害通道
  • resist -- per_channel 类型,对每个通道分别执行减伤,优先使用 DamageType 的 resist-formula

六、排查顺序

改公式前先确认输入值:

  1. /hnattr inspect - 查看物品读取
  2. /hnattr lookup - 查看最终属性
  3. /hnattr source - 查看来源
  4. /hnattr trace <属性ID> - 追踪属性组成
  5. 再看 damage_types/*.ymlpipelines/*.yml

七、显示层

display.yml 控制三种显示:

  • BossBar
  • ActionBar
  • Hologram (默认开启)

显示模式:

  • merged - 合并显示总伤害
  • separate - 分别显示各伤害分段

元素服通常用 separate 看到"物理 + 火焰 + 冰霜"分别跳字。

八、原版属性同步

vanilla.yml 负责同步到原版层。

常见同步属性:

  • max_health - 血量上限
  • movement_speed - 移速
  • attack_speed - 攻速

九、周期伤害的特殊性

周期伤害走统一内部伤害上下文,不是简单 setHealth

排查 DOT/HOT 时关注:

  • source-type
  • damage-type
  • tags

调试命令:

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

十、调试路线

装备没生效:

text
/hnattr inspect
/hnattr lookup

属性没进战斗:

text
/hnattr trace attack_damage
/hnattr trace fire_damage

Buff 没进结算:

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

DOT/HOT 没跑:

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

十一、重点总结

  1. 战斗结果是"属性 + Pipeline + Stage + DamageType + 显示"共同作用的结果
  2. Pipeline 按攻击方式编排 Stage,DamageType 负责显示和可选减伤公式
  3. 属性通过 channel + channel-role 声明伤害通道归属,collect_channels 自动发现
  4. Buff 先改属性,再进入战斗,不是末尾特效
  5. DOT/HOT 已并入统一周期 runtime,可以当作实例来调试
  6. 排查问题先确认输入值与来源,再看公式

HN 系列插件文档