From cd0004e37cea7f0c03f070022659acdd3d68d0d7 Mon Sep 17 00:00:00 2001 From: panw Date: Fri, 27 Mar 2026 15:22:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=8A=A4=E7=9B=BE):=20=E5=B0=86=E6=8A=A4?= =?UTF-8?q?=E7=9B=BE=E6=9C=BA=E5=88=B6=E4=BB=8E=E6=95=B0=E5=80=BC=E5=90=B8?= =?UTF-8?q?=E6=94=B6=E6=94=B9=E4=B8=BA=E6=AC=A1=E6=95=B0=E5=85=8D=E7=96=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 护盾技能配置的 `ap` 字段现在表示免疫次数而非攻击力百分比 - 修改护盾计算逻辑,每次受到攻击消耗1点护盾值 - 更新日志和注释以反映新的护盾行为 --- assets/script/game/common/config/SkillSet.ts | 14 ++++----- assets/script/game/hero/HeroAtkSystem.ts | 30 ++++++-------------- assets/script/game/hero/HeroAttrsComp.ts | 5 ++-- assets/script/game/hero/SCastSystem.ts | 2 +- 4 files changed, 20 insertions(+), 31 deletions(-) diff --git a/assets/script/game/common/config/SkillSet.ts b/assets/script/game/common/config/SkillSet.ts index 18b8870e..5ce2570d 100644 --- a/assets/script/game/common/config/SkillSet.ts +++ b/assets/script/game/common/config/SkillSet.ts @@ -127,7 +127,7 @@ export interface SkillConfig { TGroup:TGroup, // 目标群体(敌方/友方/自身等) act:string, // 角色执行的动画 DTType:DTType, // 伤害类型(单体/范围) - ap:number, // 攻击百分比(角色攻击力) + ap:number, // 伤害/治疗技能为攻击百分比,护盾技能为免疫次数 hit_count:number, // 可命中次数 hitcd:number, // 持续伤害的伤害间隔(秒) speed:number, // 移动速度 @@ -259,8 +259,8 @@ export const SkillSet: Record = { //============================= ====== 辅助技能 ====== ========================== 6301:{ uuid:6301,name:"魔法盾",sp_name:"buff_wind",icon:"1255",TGroup:TGroup.Self,readyAnm:"up_hp",endAnm:"",act:"atk", - DTType:DTType.single,kind:SkillKind.Shield,ap:300,hit_count:1,hitcd:0.2,speed:720,with:0,ready:0.1,EAnm:0,DAnm:"", - RType:RType.fixed,EType:EType.animationEnd,buffs:[],info:"获得300%攻击力的护盾", + DTType:DTType.single,kind:SkillKind.Shield,ap:3,hit_count:1,hitcd:0.2,speed:720,with:0,ready:0.1,EAnm:0,DAnm:"", + RType:RType.fixed,EType:EType.animationEnd,buffs:[],info:"获得3次伤害免疫", }, 6302: { uuid:6302,name:"治疗",sp_name:"buff_wind",icon:"1292",TGroup:TGroup.Team,readyAnm:"",endAnm:"",act:"atk", @@ -269,8 +269,8 @@ export const SkillSet: Record = { }, 6303:{ uuid:6303,name:"护盾",sp_name:"buff_wind",icon:"1255",TGroup:TGroup.Self,readyAnm:"up_hp",endAnm:"",act:"atk", - DTType:DTType.single,kind:SkillKind.Shield,ap:300,hit_count:1,hitcd:0.2,speed:720,with:0,ready:0.1,EAnm:0,DAnm:"", - RType:RType.fixed,EType:EType.animationEnd,buffs:[],info:"随机1个友方获得300%攻击力的护盾", + DTType:DTType.single,kind:SkillKind.Shield,ap:3,hit_count:1,hitcd:0.2,speed:720,with:0,ready:0.1,EAnm:0,DAnm:"", + RType:RType.fixed,EType:EType.animationEnd,buffs:[],info:"随机1个友方获得3次伤害免疫", }, 6304: { uuid:6304,name:"群体治疗",sp_name:"buff_wind",icon:"1292",TGroup:TGroup.Team,readyAnm:"",endAnm:"",act:"atk", @@ -279,8 +279,8 @@ export const SkillSet: Record = { }, 6305:{ uuid:6305,name:"群体护盾",sp_name:"buff_wind",icon:"1255",TGroup:TGroup.Team,readyAnm:"up_hp",endAnm:"",act:"atk", - DTType:DTType.single,kind:SkillKind.Shield,ap:200,hit_count:3,hitcd:0.2,speed:720,with:0,ready:0.1,EAnm:0,DAnm:"", - RType:RType.fixed,EType:EType.animationEnd,buffs:[],info:"随机3个友方获得200%攻击力的护盾", + DTType:DTType.single,kind:SkillKind.Shield,ap:2,hit_count:3,hitcd:0.2,speed:720,with:0,ready:0.1,EAnm:0,DAnm:"", + RType:RType.fixed,EType:EType.animationEnd,buffs:[],info:"随机3个友方获得2次伤害免疫", }, //==========================buff 技能===================== 6401:{ diff --git a/assets/script/game/hero/HeroAtkSystem.ts b/assets/script/game/hero/HeroAtkSystem.ts index d859d5ce..b5cfe0b0 100644 --- a/assets/script/game/hero/HeroAtkSystem.ts +++ b/assets/script/game/hero/HeroAtkSystem.ts @@ -295,39 +295,27 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd * 护盾吸收伤害 * * 护盾吸收逻辑: - * 1. 如果护盾值 >= 伤害值:完全吸收,剩余伤害为0 - * 2. 如果护盾值 < 伤害值:部分吸收,剩余伤害 = 原伤害 - 护盾值 - * 3. 护盾被击破时,重置护盾最大值属性 + * 1. 护盾值大于 0 时,抵挡本次伤害 + * 2. 每次抵挡消耗 1 点护盾值 + * 3. 护盾归零时,重置护盾最大值属性 * * @param TAttrsComp 被攻击者的属性组件(包含当前护盾值) * @param damage 原始伤害值 * @returns {remainingDamage, absorbedDamage} 剩余伤害值和吸收的护盾值 */ private absorbShield(TAttrsComp: HeroAttrsComp, damage: number): {remainingDamage: number, absorbedDamage: number} { - if (TAttrsComp.shield <= 0) { mLogger.log(this.debugMode, 'HeroAtkSystem', " 护盾值小于等于0,无法吸收伤害"); return {remainingDamage: damage, absorbedDamage: 0}; - }; - - if (TAttrsComp.shield >= damage) { - TAttrsComp.shield -= damage; - if (TAttrsComp.shield <= 0) { - TAttrsComp.shield = 0; - TAttrsComp.shield_max = 0; - } - TAttrsComp.dirty_shield = true; - mLogger.log(this.debugMode, 'HeroAtkSystem', ` 护盾值完全吸收伤害 ${damage}`); - return {remainingDamage: 0, absorbedDamage: damage}; - } else { - const absorbedDamage = TAttrsComp.shield; - const remainingDamage = damage - TAttrsComp.shield; + } + TAttrsComp.shield = Math.max(0, TAttrsComp.shield - 1); + if (TAttrsComp.shield <= 0) { TAttrsComp.shield = 0; TAttrsComp.shield_max = 0; - TAttrsComp.dirty_shield = true; - mLogger.log(this.debugMode, 'HeroAtkSystem', ` 护盾值部分吸收伤害 ${absorbedDamage}`); - return {remainingDamage, absorbedDamage}; } + TAttrsComp.dirty_shield = true; + mLogger.log(this.debugMode, 'HeroAtkSystem', ` 护盾抵挡1次伤害,剩余次数 ${TAttrsComp.shield}`); + return {remainingDamage: 0, absorbedDamage: 1}; } /** diff --git a/assets/script/game/hero/HeroAttrsComp.ts b/assets/script/game/hero/HeroAttrsComp.ts index fdd893b5..ee95232c 100644 --- a/assets/script/game/hero/HeroAttrsComp.ts +++ b/assets/script/game/hero/HeroAttrsComp.ts @@ -93,14 +93,15 @@ export class HeroAttrsComp extends ecs.Comp { } add_shield(value:number){ const oldShield = this.shield; - let addValue = value; + const addValue = Math.max(0, Math.floor(value)); + if (addValue <= 0) return; this.shield += addValue; this.shield_max += addValue; if (this.shield < 0) this.shield = 0; if (this.shield_max < 0) this.shield_max = 0; this.dirty_shield = true; // 标记护盾需要更新 if (this.debugMode) { - mLogger.log(this.debugMode, 'HeroAttrs', ` 护盾变更: ${this.hero_name}, 变化=${addValue.toFixed(1)}, ${oldShield.toFixed(1)} -> ${this.shield.toFixed(1)}`); + mLogger.log(this.debugMode, 'HeroAttrs', ` 护盾次数变更: ${this.hero_name}, 变化=${addValue}, ${Math.floor(oldShield)} -> ${Math.floor(this.shield)}`); } } add_hp_max(value:number){ diff --git a/assets/script/game/hero/SCastSystem.ts b/assets/script/game/hero/SCastSystem.ts index b7b1a626..5371f89b 100644 --- a/assets/script/game/hero/SCastSystem.ts +++ b/assets/script/game/hero/SCastSystem.ts @@ -212,7 +212,7 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate model.add_hp(addHp); target.health(addHp); } else if (kind === SkillKind.Shield && sAp !== 0) { - const addShield = Math.floor(sAp*_cAttrsComp.ap/100); + const addShield = Math.max(0, Math.floor(sAp)); model.add_shield(addShield); } if (!config.buffs || config.buffs.length === 0) continue;