From 382f6d2b32355aa9e254982c8d8a72608c4a9825 Mon Sep 17 00:00:00 2001 From: panw Date: Tue, 24 Mar 2026 10:25:12 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=8A=80=E8=83=BD):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=8A=80=E8=83=BD=E7=AD=89=E7=BA=A7=E8=AE=A1=E7=AE=97=E9=94=99?= =?UTF-8?q?=E8=AF=AF=EF=BC=8C=E9=BB=98=E8=AE=A4=E7=AD=89=E7=BA=A7=E4=BB=8E?= =?UTF-8?q?1=E6=94=B9=E4=B8=BA0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将技能相关计算的默认等级从1统一修正为0,确保等级计算逻辑的一致性。具体包括: - HeroAttrsComp.getSkillLevel() 方法在无效技能ID时返回0 - Hero实体构建技能模型时使用Math.max确保最低等级为0 - SDataCom组件初始化skill_lv为0 - Skill实体加载时skill_lv参数默认值改为0,计算时使用Math.max(0, skill_lv) --- assets/script/game/hero/Hero.ts | 4 ++-- assets/script/game/hero/HeroAttrsComp.ts | 4 ++-- assets/script/game/skill/SDataCom.ts | 4 ++-- assets/script/game/skill/Skill.ts | 14 +++++++------- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/assets/script/game/hero/Hero.ts b/assets/script/game/hero/Hero.ts index 425af663..4b2999b4 100644 --- a/assets/script/game/hero/Hero.ts +++ b/assets/script/game/hero/Hero.ts @@ -83,8 +83,8 @@ export class Hero extends ecs.Entity { for (const key in hero.skills) { const skill = hero.skills[key]; if (!skill) continue; - //用于增量 计算最终技能等级:英雄等级与技能初始等级均从1开始,需各减1抵消,故-2 - model.skills[skill.uuid] = { ...skill, lv: skill.lv + hero_lv - 2, ccd: skill.cd }; + //用于增量 计算最终技能等级:英雄等级与技能初始等级均从1开始,需各减1抵消,故-2,最低等级时0 + model.skills[skill.uuid] = { ...skill, lv: Math.max(0,skill.lv + hero_lv - 2), ccd: skill.cd }; } model.updateSkillDistanceCache(); diff --git a/assets/script/game/hero/HeroAttrsComp.ts b/assets/script/game/hero/HeroAttrsComp.ts index 33774450..29b2d39c 100644 --- a/assets/script/game/hero/HeroAttrsComp.ts +++ b/assets/script/game/hero/HeroAttrsComp.ts @@ -139,8 +139,8 @@ export class HeroAttrsComp extends ecs.Comp { return this.frost_end_time > 0 } getSkillLevel(skillId: number): number { - if (!skillId) return 1; - return this.skills[skillId]?.lv ?? 1; + if (!skillId) return 0; + return this.skills[skillId]?.lv ?? 0; } getSkillIds(): number[] { diff --git a/assets/script/game/skill/SDataCom.ts b/assets/script/game/skill/SDataCom.ts index 586db0aa..a2de7063 100644 --- a/assets/script/game/skill/SDataCom.ts +++ b/assets/script/game/skill/SDataCom.ts @@ -11,7 +11,7 @@ export class SDataCom extends ecs.Comp { group:BoxSet=BoxSet.HERO fac: number = 0; // 0:hero 1:monster s_uuid:number=0 - skill_lv:number=1 + skill_lv:number=0 ext_dmg:number=0 //额外伤害 dmg_ratio:number=1 //伤害比例 hit_count:number=0 //击中数量 @@ -21,7 +21,7 @@ export class SDataCom extends ecs.Comp { this.group=BoxSet.HERO this.fac=0 this.s_uuid=0 - this.skill_lv=1 + this.skill_lv=0 this.casterEid = -1; this.hit_count=0 this.max_hit_count=0 diff --git a/assets/script/game/skill/Skill.ts b/assets/script/game/skill/Skill.ts index c6e2f69c..ec249583 100644 --- a/assets/script/game/skill/Skill.ts +++ b/assets/script/game/skill/Skill.ts @@ -101,7 +101,7 @@ export class Skill extends ecs.Entity { this.addComponents(SMoveDataComp); } load(startPos: Vec3, parent: Node, s_uuid: number, targetPos: Vec3, - caster:HeroViewComp,cAttrsComp:HeroAttrsComp, skill_lv:number=1, ext_dmg:number=0) { + caster:HeroViewComp,cAttrsComp:HeroAttrsComp, skill_lv:number=0, ext_dmg:number=0) { const config = SkillSet[s_uuid]; if (!config) { mLogger.error(this.debugMode, 'Skill', "[Skill] 技能配置不存在:", s_uuid); @@ -205,17 +205,17 @@ export class Skill extends ecs.Entity { sDataCom.casterEid=caster.ent.eid sDataCom.Attrs = {}; const SUp=SkillUpList[s_uuid] ? SkillUpList[s_uuid]:SkillUpList[1001]; - const sCrt = (config.crt ?? 0)+SUp.crt*skill_lv; - const sFrz = (config.frz ?? 0)+SUp.frz*skill_lv; - const sBck = (config.bck ?? 0)+SUp.bck*skill_lv; - const sAp =config.ap+SUp.ap*skill_lv; - const sHit=config.hit_count+SUp.hit_count*skill_lv + cAttrsComp.puncture + const sCrt = (config.crt ?? 0)+(SUp.crt*skill_lv); + const sFrz = (config.frz ?? 0)+(SUp.frz*skill_lv); + const sBck = (config.bck ?? 0)+(SUp.bck*skill_lv); + const sAp =config.ap+(SUp.ap*skill_lv); + const sHit=config.hit_count+(SUp.hit_count*skill_lv) + cAttrsComp.puncture sDataCom.Attrs[Attrs.ap] = Math.floor(cAttrsComp.ap*sAp/100); sDataCom.Attrs[Attrs.critical] = cAttrsComp.critical + sCrt; sDataCom.Attrs[Attrs.freeze_chance] = cAttrsComp.freeze_chance + sFrz; sDataCom.Attrs[Attrs.back_chance] = cAttrsComp.back_chance + sBck; sDataCom.s_uuid=s_uuid - sDataCom.skill_lv = Math.max(1, skill_lv); + sDataCom.skill_lv = Math.max(0, skill_lv); sDataCom.fac=cAttrsComp.fac sDataCom.ext_dmg=ext_dmg sDataCom.hit_count = 0