From d2fbac11cdfb29b3040739b0271b7b2e11f86d88 Mon Sep 17 00:00:00 2001 From: panw Date: Wed, 18 Mar 2026 10:13:50 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=8A=80=E8=83=BD):=20=E4=B8=BA=E6=8A=80?= =?UTF-8?q?=E8=83=BD=E9=85=8D=E7=BD=AE=E6=B7=BB=E5=8A=A0=E9=A2=9D=E5=A4=96?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E5=AD=97=E6=AE=B5=E5=B9=B6=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E5=88=B0=E6=8A=80=E8=83=BD=E5=AE=9E=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 SkillConfig 接口中新增暴击率、冰冻概率等六个可选属性字段,用于技能配置时提供额外加成。 在 Skill 类中,读取这些配置字段并累加到施法者基础属性上,影响技能的实际效果。 --- assets/script/game/common/config/SkillSet.ts | 6 ++++++ assets/script/game/skill/Skill.ts | 21 +++++++++++++------- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/assets/script/game/common/config/SkillSet.ts b/assets/script/game/common/config/SkillSet.ts index 7beb03d6..665c1fe0 100644 --- a/assets/script/game/common/config/SkillSet.ts +++ b/assets/script/game/common/config/SkillSet.ts @@ -177,6 +177,12 @@ export interface SkillConfig { EType:EType, // 结束条件(动画结束/时间结束/距离结束/碰撞/次数结束) time?:number, // timeEnd 持续时间(秒) kind?:SkillKind, // 主效果类型 + crt?:number, // 额外暴击率 + frz?:number, // 额外冰冻概率 + stn?:number, // 额外眩晕概率 + bck?:number, // 额外击退概率 + slw?:number, // 额外减速概率 + pct?:number, // 额外穿刺次数 buffs:number[], // 对施法者的buff配置列表(Buff UUID 列表) debuffs:number[], // 对目标的debuff配置列表(Buff UUID 列表) call_hero?:number, // 召唤技能召唤英雄id(可选) diff --git a/assets/script/game/skill/Skill.ts b/assets/script/game/skill/Skill.ts index fc562dea..85b97768 100644 --- a/assets/script/game/skill/Skill.ts +++ b/assets/script/game/skill/Skill.ts @@ -193,21 +193,28 @@ export class Skill extends ecs.Entity { sDataCom.caster=caster sDataCom.casterEid=caster.ent.eid sDataCom.Attrs = {}; + const addCrt = config.crt ?? 0; + const addFrz = config.frz ?? 0; + const addStn = config.stn ?? 0; + const addBck = config.bck ?? 0; + const addSlw = config.slw ?? 0; + const addPct = config.pct ?? 0; + const totalPuncture = cAttrsComp.puncture + addPct; sDataCom.Attrs[Attrs.ap] = cAttrsComp.ap; - sDataCom.Attrs[Attrs.critical] = cAttrsComp.critical; + sDataCom.Attrs[Attrs.critical] = cAttrsComp.critical + addCrt; sDataCom.Attrs[Attrs.critical_dmg] = cAttrsComp.critical_dmg; - sDataCom.Attrs[Attrs.freeze_chance] = cAttrsComp.freeze_chance; - sDataCom.Attrs[Attrs.stun_chance] = cAttrsComp.stun_chance; - sDataCom.Attrs[Attrs.back_chance] = cAttrsComp.back_chance; - sDataCom.Attrs[Attrs.slow_chance] = cAttrsComp.slow_chance; - sDataCom.Attrs[Attrs.puncture] = cAttrsComp.puncture; + sDataCom.Attrs[Attrs.freeze_chance] = cAttrsComp.freeze_chance + addFrz; + sDataCom.Attrs[Attrs.stun_chance] = cAttrsComp.stun_chance + addStn; + sDataCom.Attrs[Attrs.back_chance] = cAttrsComp.back_chance + addBck; + sDataCom.Attrs[Attrs.slow_chance] = cAttrsComp.slow_chance + addSlw; + sDataCom.Attrs[Attrs.puncture] = totalPuncture; sDataCom.Attrs[Attrs.puncture_dmg] = cAttrsComp.puncture_dmg; sDataCom.s_uuid=s_uuid sDataCom.fac=cAttrsComp.fac sDataCom.ext_dmg=ext_dmg sDataCom.hit_count = 0 - sDataCom.max_hit_count = Math.max(1, config.hit_count + cAttrsComp.puncture) + sDataCom.max_hit_count = Math.max(1, config.hit_count + totalPuncture) SView.init(); }