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