feat(战斗系统): 添加必杀技能类型并优化天赋触发逻辑

- 在TriType枚举中添加MAX类型用于必杀技能触发
- 重构SACastSystem中的技能处理逻辑,将普通攻击、技能和必杀技能分开处理
- 优化天赋触发条件判断,确保不同类型技能触发正确的天赋效果
- 调整技能动画播放和伤害计算逻辑,使风怒和双技能天赋能正确生效
This commit is contained in:
2025-11-24 15:52:28 +08:00
parent 8d2ec76b01
commit 6df4abadd1
2 changed files with 34 additions and 21 deletions

View File

@@ -9,10 +9,11 @@ export enum TriType {
ATK = 2, //普通攻击触发
DMG = 3, // 受伤触发
SKILL = 4, // 技能触发
HPL = 5, // 失去生命值触发
HPA = 6, // 获得生命值触发
INIT = 7, // 初始触发,如:多1个技能
DEAD = 8 // 基于死亡触发
MAX = 5, // 必杀触发
HPL = 6, // 失去生命值触发
HPA = 7, // 获得生命值触发
INIT = 8, // 初始触发,如:多1个技能
DEAD = 9, // 基于死亡触发
}

View File

@@ -143,11 +143,12 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
// 1. 播放施法动画
heroView.playSkillEffect(s_uuid);
/**********************天赋处理*************************************************************************/
// 2. 更新攻击类型的天赋触发值
// 2. 更新攻击类型的天赋触发值,技能和必杀级
if(casterEntity.has(TalComp)){
const talComp = casterEntity.get(TalComp);
if (hset === HSSet.atk) talComp.updateCur(TriType.ATK);
if (hset != HSSet.atk) talComp.updateCur(TriType.SKILL);
if (hset === HSSet.skill) talComp.updateCur(TriType.SKILL);
if (hset === HSSet.max) talComp.updateCur(TriType.MAX);
}
/**********************天赋处理*************************************************************************/
// 获取目标位置
@@ -156,43 +157,54 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
console.warn("[SACastSystem] 没有找到有效目标");
return false;
}
// 2. 延迟创建技能实体(等待动画)
// 2.1 普通攻击逻辑
if (hset === HSSet.atk){
let delay = 0.3
let ext_dmg = heroAttrs.useCountValTal(TalEffet.ATK_DMG);
heroView.scheduleOnce(() => {
this.createSkill(s_uuid, heroView,targets,ext_dmg);
}, delay);
//风怒wfuny 只针对 普通攻击起效
if (heroAttrs.useCountTal(TalEffet.WFUNY)){
let ext2_dmg = heroAttrs.useCountValTal(TalEffet.ATK_DMG);
let delay = 0.3
heroView.playSkillEffect(s_uuid);
//需要再添加 风怒动画
heroView.scheduleOnce(() => {
this.createSkill(s_uuid, heroView,targets,ext2_dmg);
},delay);
}
}
// 2.2 技能攻击逻辑
if(hset === HSSet.skill){
let delay = 0.3
let ext_dmg = heroAttrs.useCountValTal(TalEffet.SKILL_DMG);
heroView.scheduleOnce(() => {
this.createSkill(s_uuid, heroView,targets,ext_dmg);
}, delay);
}
//风怒wfuny 只针对 普通攻击起效
if (hset === HSSet.atk && heroAttrs.useCountTal(TalEffet.WFUNY)){
let delay = 0.3
heroView.playSkillEffect(s_uuid);
//需要再添加 风怒动画
heroView.scheduleOnce(() => {
this.createSkill(s_uuid, heroView,targets);
},delay);
}
// 双技能 只针对 技能起效
if(hset === HSSet.skill && heroAttrs.useCountTal(TalEffet.D_SKILL)){
if(heroAttrs.useCountTal(TalEffet.D_SKILL)){
let ext2_dmg = heroAttrs.useCountValTal(TalEffet.SKILL_DMG);
let delay = 0.3
heroView.playSkillEffect(s_uuid);
//需要再添加 双技能动画
heroView.scheduleOnce(() => {
this.createSkill(s_uuid, heroView,targets,ext2_dmg);
},delay);
}
}
// 2.3 必杀技能逻辑
if(hset === HSSet.max){
let delay = 0.3
heroView.playSkillEffect(s_uuid);
//需要再添加 最大伤害动画
heroView.scheduleOnce(() => {
this.createSkill(s_uuid, heroView,targets);
},delay);
}
return true;
}