feat(skill-system): 新增计时debuff机制,支持技能命中敌方附加减益效果

本次提交完整实现了技能对敌附加debuff的完整流程:
1.  新增TimedDebuffSnapshot数据结构,用于透传debuff配置
2.  在SkillConfig和SkillOverrides中新增debuff相关配置项
3.  实现HeroAtkSystem中debuff的判定与施加逻辑
4.  完善后台配置、前端编辑器的debuff配置支持
5.  调整了buff目标判定逻辑,修复了原有默认目标的语义混淆问题
6.  优化了BuffSystem的调试日志,新增了debuff分类标识
7.  批量更新了现有英雄技能的debuff配置示例
This commit is contained in:
pan
2026-09-08 16:37:13 +08:00
parent f5908a9adf
commit be17d18ff3
16 changed files with 214 additions and 124 deletions

View File

@@ -22,8 +22,8 @@ export enum DTType {
/**
* 计时 buff(timed_buff_id)的施加目标。
* 缺省(undefined)时按技能主效果推导:伤害技能挂被命中者,辅助技能挂友方目标。
* 显式配置后打破 TGroup 默认绑定,实现"伤害技能命中后给自己回血"等跨阵营效果。
* 缺省(undefined)时按技能主效果推导:伤害技能挂施法者自身(增益语义),辅助技能挂友方目标。
* 显式配置后可切换到全体友方/全体敌方等;命中后对敌减益请用 timed_debuff_id(目标固定为被命中者)。
*/
export enum BuffTarget {
Hit = 0, // 被命中者(敌方技能的默认行为)
@@ -169,8 +169,13 @@ export interface SkillConfig {
buff_value?: number, // 覆写计时 buff 的修饰数值(modifiers.value / tick.damage_or_heal),由药水卡自定义档位
buff_duration?: number, // 覆写计时 buff 的持续时间(秒),不配置则用 BuffList 默认值
buff_chance?: number, // 计时 buff 施加概率(百分点,缺省 100)
/** 计时 buff 施加目标覆写:缺省按技能主效果推导(伤害→被命中者,辅助→友方) */
/** 计时 buff 施加目标覆写:缺省按技能主效果推导(伤害→施法者自身,辅助→友方目标) */
buff_target?: BuffTarget,
// ---- 命中敌方后施加的计时 debuff(仅伤害路径 HeroAtkSystem 结算,目标固定为被命中者) ----
timed_debuff_id?: number, // 计时 debuff 配置 id(指向 BuffList),命中敌人后施加
debuff_value?: number, // 覆写 debuff 的修饰数值(modifiers.value / tick.damage_or_heal)
debuff_duration?: number, // 覆写 debuff 的持续时间(秒),不配置则用 BuffList 默认值
debuff_chance?: number, // debuff 施加概率(百分点,缺省 100)
call_hero?: number, // 召唤技能召唤英雄id(可选)
summon_count?: number, // 单次施法召唤的技能实体个数(未配置时回退 prefab 上 SkillView.summon_count)
is_accel?: boolean, // 是否逐渐加速飞行
@@ -202,8 +207,13 @@ export interface SkillOverrides {
buff_value?: number;
buff_duration?: number;
buff_chance?: number;
/** 计时 buff 施加目标覆写:缺省按技能主效果推导(伤害→被命中者,辅助→友方) */
/** 计时 buff 施加目标覆写:缺省按技能主效果推导(伤害→施法者自身,辅助→友方目标) */
buff_target?: BuffTarget;
/** 命中敌方后施加的计时 debuff id(指向 BuffList),目标固定为被命中者,仅伤害路径结算 */
timed_debuff_id?: number;
debuff_value?: number;
debuff_duration?: number;
debuff_chance?: number;
call_hero?: number;
/** 单次施法召唤的技能实体个数(覆盖 prefab 上 SkillView.summon_count;>1 视为召唤类,不再参与风怒等额外触发) */
summon_count?: number;