feat(护盾): 将护盾机制从数值吸收改为次数免疫
- 护盾技能配置的 `ap` 字段现在表示免疫次数而非攻击力百分比 - 修改护盾计算逻辑,每次受到攻击消耗1点护盾值 - 更新日志和注释以反映新的护盾行为
This commit is contained in:
@@ -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};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user