From 94acab2a5c150b9267b626f9aa55af9a51d07533 Mon Sep 17 00:00:00 2001 From: pan Date: Thu, 3 Sep 2026 14:30:05 +0800 Subject: [PATCH] =?UTF-8?q?feat(skill):=20=E6=B7=BB=E5=8A=A0=E6=8A=80?= =?UTF-8?q?=E8=83=BDbuff=E9=99=84=E5=8A=A0=E6=A6=82=E7=8E=87=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E4=B8=8E=E5=88=A4=E5=AE=9A=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 新增SkillOverrides接口的buff_chance字段,配置buff附加概率 2. 在web常量中添加buff_chance的配置项说明 3. 在HeroAtkSystem中实现基于buff_chance的buff触发判定,默认100%触发 --- assets/script/game/common/config/SkillSet.ts | 1 + assets/script/game/hero/HeroAtkSystem.ts | 11 +++++++---- put/web/src/constants.js | 1 + 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/assets/script/game/common/config/SkillSet.ts b/assets/script/game/common/config/SkillSet.ts index f571857c..b9e59e32 100644 --- a/assets/script/game/common/config/SkillSet.ts +++ b/assets/script/game/common/config/SkillSet.ts @@ -177,6 +177,7 @@ export interface SkillOverrides { timed_buff_id?: number; buff_value?: number; buff_duration?: number; + buff_chance?: number; call_hero?: number; /** 单次施法召唤的技能实体个数(覆盖 prefab 上 SkillView.summon_count;>1 视为召唤类,不再参与风怒等额外触发) */ summon_count?: number; diff --git a/assets/script/game/hero/HeroAtkSystem.ts b/assets/script/game/hero/HeroAtkSystem.ts index d956fdf3..f4b72e27 100644 --- a/assets/script/game/hero/HeroAtkSystem.ts +++ b/assets/script/game/hero/HeroAtkSystem.ts @@ -260,10 +260,13 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpda // 命中附带 debuff(如灼烧 DoT):仅普攻路径,复用友方 timed_buff_id 机制; // 施法者 ap/完整属性快照取自伤害事件,供 BuffSystem tick 缩放与暴击/冰冻/击晕判定 if (!isDot && skillConf.timed_buff_id) { - const buffOverrides: BuffApplyOverrides = { source_attrs: damageEvent.Attrs }; - if (skillConf.buff_value !== undefined) buffOverrides.value = skillConf.buff_value; - if (skillConf.buff_duration !== undefined) buffOverrides.duration = skillConf.buff_duration; - buffManager.applyBuff(target, skillConf.timed_buff_id, casterEid, damageEvent.Attrs[Attrs.ap] || 0, buffOverrides); + const buffChance = skillConf.buff_chance ?? 100; + if (buffChance >= 100 || Math.random() * 100 < buffChance) { + const buffOverrides: BuffApplyOverrides = { source_attrs: damageEvent.Attrs }; + if (skillConf.buff_value !== undefined) buffOverrides.value = skillConf.buff_value; + if (skillConf.buff_duration !== undefined) buffOverrides.duration = skillConf.buff_duration; + buffManager.applyBuff(target, skillConf.timed_buff_id, casterEid, damageEvent.Attrs[Attrs.ap] || 0, buffOverrides); + } } diff --git a/put/web/src/constants.js b/put/web/src/constants.js index 21c34808..e5ede170 100644 --- a/put/web/src/constants.js +++ b/put/web/src/constants.js @@ -111,6 +111,7 @@ export const OVERRIDE_KEYS = [ { key: 'timed_buff_id', label: 'timed_buff_id 计时buff' }, { key: 'buff_value', label: 'buff_value 修饰数值' }, { key: 'buff_duration', label: 'buff_duration 持续时间' }, + { key: 'buff_chance', label: 'buff_chance 附加概率' }, { key: 'summon_count', label: 'summon_count 召唤数' }, { key: 'num', label: 'num 额外释放次数' }, { key: 'call_hero', label: 'call_hero 召唤英雄id' },