refactor(战斗系统): 统一伤害减免属性命名并优化伤害计算逻辑
- 将LDMG枚举值重命名为DAMAGE_REDUCTION以提高可读性 - 修改HeroAtkSystem中的dmgCount方法,直接接收HeroAttrsComp参数 - 在伤害计算中整合天赋系统的伤害减免效果
This commit is contained in:
@@ -28,7 +28,7 @@ export enum TalEffet {
|
||||
WFUNY=7, // 风怒
|
||||
D_SKILL=8, //两次技能
|
||||
SHIELD=9, // 护盾
|
||||
LDMG=10, // 减伤
|
||||
DAMAGE_REDUCTION=10, // 减伤
|
||||
C_MSKILL=11, // 必杀技能必暴
|
||||
C_ATK=12, // 普工必爆
|
||||
C_SKILL=13, // 一般技能必暴
|
||||
@@ -111,7 +111,7 @@ export const talConf: Record<number, ItalConf> = {
|
||||
desc:"被攻击3次后, 给于目标50%的伤害"},
|
||||
7102:{uuid:7102,name:"护盾",triType:TriType.DMG,Trigger:3,count:1,target:TalTarget.SELF,effet:TalEffet.SHIELD,vType:BType.RATIO, value:20,attrs:TalAttrs.NON,
|
||||
desc:"被攻击3次后, 获得20%的生命值护盾"},
|
||||
7103:{uuid:7103,name:"减伤",triType:TriType.DMG,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.LDMG,vType:BType.RATIO, value:50,attrs:TalAttrs.NON,
|
||||
7103:{uuid:7103,name:"减伤",triType:TriType.DMG,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.DAMAGE_REDUCTION,vType:BType.RATIO, value:50,attrs:TalAttrs.NON,
|
||||
desc:"被攻击3次后, 下1次伤害减50%"},
|
||||
|
||||
|
||||
|
||||
@@ -158,7 +158,7 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
|
||||
const isCrit = this.checkChance(damageEvent.Attrs[Attrs.CRITICAL]);
|
||||
if (isCrit) attackerModel?.useValueTalByAttr(Attrs.CRITICAL); // 清除施法者的暴击buff
|
||||
// 计算伤害
|
||||
let damage = this.dmgCount(damageEvent,targetAttrs.Attrs);
|
||||
let damage = this.dmgCount(damageEvent,targetAttrs);
|
||||
if (isCrit) {
|
||||
// 暴击伤害计算
|
||||
// 使用施法者的暴击伤害加成属性(damageEvent.Attrs 快照)
|
||||
@@ -228,9 +228,10 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
|
||||
* - 所有除法和乘法计算后都进行取整操作,确保游戏中的伤害值为整数
|
||||
* - 元素伤害只应用于魔法伤害部分
|
||||
*/
|
||||
private dmgCount(damageEvent:any,TAttrs:any){
|
||||
private dmgCount(damageEvent:any,TAttrsComp:HeroAttrsComp){
|
||||
// 1. 获取技能配置 - 如果技能不存在,直接返回0伤害
|
||||
const CAttrs=damageEvent.Attrs;
|
||||
const TAttrs=TAttrsComp.Attrs;
|
||||
let sConf = SkillSet[damageEvent.s_uuid];
|
||||
if (!sConf) return 0;
|
||||
|
||||
@@ -276,11 +277,12 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
|
||||
|
||||
// 8. 计算最终总伤害(物理伤害 + 魔法伤害)
|
||||
let total = apAfter + mapAfter;
|
||||
|
||||
// 9. 应用最终伤害减免效果(如特殊天赋、buff等提供的减免)
|
||||
// 9. 计算免伤
|
||||
let DMG_RED = TAttrs[Attrs.DAMAGE_REDUCTION]||0+TAttrsComp.useCountValTal(Attrs.DAMAGE_REDUCTION);
|
||||
// 10. 应用最终伤害减免效果(如特殊天赋、buff等提供的减免)
|
||||
total = Math.floor(total * (1 - ((TAttrs[Attrs.DAMAGE_REDUCTION]||0)/100)));
|
||||
|
||||
// 10. 确保伤害值非负,返回最终伤害
|
||||
// 11. 确保伤害值非负,返回最终伤害
|
||||
return Math.max(0,total);
|
||||
}
|
||||
|
||||
|
||||
@@ -208,8 +208,8 @@ export class TalComp extends ecs.Comp {
|
||||
case TalEffet.SKILL_DMG:
|
||||
heroAttrs.addCountTal(TalEffet.SKILL_DMG, talent.value + talent.value_add);
|
||||
break;
|
||||
case TalEffet.LDMG:
|
||||
heroAttrs.addCountTal(TalEffet.LDMG, talent.value + talent.value_add);
|
||||
case TalEffet.DAMAGE_REDUCTION:
|
||||
heroAttrs.addCountTal(TalEffet.DAMAGE_REDUCTION, talent.value + talent.value_add);
|
||||
break;
|
||||
case TalEffet.HP:
|
||||
heroAttrs.add_hp(talent.value + talent.value_add,talent.vType == BType.VALUE);
|
||||
|
||||
Reference in New Issue
Block a user