主题
HNAttribute 的战斗层:
装备、Buff、周期效果统一成属性和伤害上下文,再进入战斗管线结算。
最终伤害由这些因素共同决定:
- 装备属性
- Buff 修饰
- 周期伤害/治疗
- 伤害类型
- 战斗阶段公式
- 显示层
一、战斗链路
- 监听攻击事件
- 识别攻击者与受击者
- 读取双方最终属性
- 根据攻击方式选择 Pipeline(melee / ranged / spell / dot)
- 按 Pipeline 的 stages 列表逐个执行 Stage
collect_channels自动收集伤害通道per_channel按通道执行减伤(优先使用 DamageType 的 resist-formula)- 生成最终伤害分段
- 交给显示层与原版伤害投递
配置选项:
yml
ignore-vanilla-armor: true # 以自定义结算为主
disable-sweep-attack: true # 关闭原版横扫 AOE二、Buff 与周期效果如何参与战斗
Buff - 先变成属性修饰符,再参与战斗
例如:
力量提升→ 提高attack_damage钢铁护体→ 提高defense
这些变化直接进入战斗公式,不是视觉特效。
周期效果 - 两种结果类型
heal: 直接改生命值damage: 走内部伤害上下文
instance 模式与 hna-dot/hna-hot 已并入统一 runtime,持续伤害会带:
sourceTypedamageTypetags- 来源/目标实体
DOT 不再只是"每秒扣血",而是有完整上下文的战斗来源。
三、默认伤害类型
| 类型 ID | 用途 |
|---|---|
physical | 近战/普通伤害 |
magic | 法术伤害 |
伤害类型不硬绑定属性,真正读取什么属性由 stage 公式决定。
装备上的:
text
攻击力: 120
火焰伤害: 25会对应两条独立伤害来源:物理通道和火焰通道。
四、战斗上下文
默认定义了四种上下文:
player-mob- 玩家打怪player-player- PVPmob-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
六、排查顺序
改公式前先确认输入值:
/hnattr inspect- 查看物品读取/hnattr lookup- 查看最终属性/hnattr source- 查看来源/hnattr trace <属性ID>- 追踪属性组成- 再看
damage_types/*.yml和pipelines/*.yml
七、显示层
display.yml 控制三种显示:
- BossBar
- ActionBar
- Hologram (默认开启)
显示模式:
merged- 合并显示总伤害separate- 分别显示各伤害分段
元素服通常用 separate 看到"物理 + 火焰 + 冰霜"分别跳字。
八、原版属性同步
vanilla.yml 负责同步到原版层。
常见同步属性:
max_health- 血量上限movement_speed- 移速attack_speed- 攻速
九、周期伤害的特殊性
周期伤害走统一内部伤害上下文,不是简单 setHealth。
排查 DOT/HOT 时关注:
source-typedamage-typetags
调试命令:
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_damageBuff 没进结算:
text
/hnattr buffs
/hnattr source
/hnattr trace <属性ID>DOT/HOT 没跑:
text
/hnattr periodic list
/hnattr periodic inspect <key>
/hnattr periodic debug detail <key>十一、重点总结
- 战斗结果是"属性 + Pipeline + Stage + DamageType + 显示"共同作用的结果
- Pipeline 按攻击方式编排 Stage,DamageType 负责显示和可选减伤公式
- 属性通过 channel + channel-role 声明伤害通道归属,collect_channels 自动发现
- Buff 先改属性,再进入战斗,不是末尾特效
- DOT/HOT 已并入统一周期 runtime,可以当作实例来调试
- 排查问题先确认输入值与来源,再看公式
