fix(英雄): 修复复活配置类型错误并优化复活流程
将 HeroAttrsComp 和 heroSet 中的 revive 字段从数组类型改为单一对象类型,因为每个英雄只能配置一个复活技能。同时优化 HeroAtkSystem 中的复活逻辑,将技能配置提取到变量中复用,并延迟 0.5 秒执行 alive() 方法以确保复活动画能够完整播放。
This commit is contained in:
@@ -194,15 +194,16 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
|
||||
let canRevive = false;
|
||||
let maxReviveCount = 0;
|
||||
let reviveHpPercent = 50; // 默认恢复50%
|
||||
if (TAttrsComp.revive && TAttrsComp.revive.length > 0) {
|
||||
const reviveConf = TAttrsComp.revive[0];
|
||||
let reviveSkillConf: any = null; // 提取出来的复活技能配置
|
||||
if (TAttrsComp.revive) {
|
||||
const reviveConf = TAttrsComp.revive;
|
||||
maxReviveCount = reviveConf.r_num + Math.floor((TAttrsComp.lv - 1) * reviveConf.upr);
|
||||
if (TAttrsComp.revived_count < maxReviveCount) {
|
||||
canRevive = true;
|
||||
// 从配置表中读取对应的复活技能配置,ap 字段代表恢复生命值的百分比
|
||||
const skillConf = SkillSet[reviveConf.s_uuid];
|
||||
if (skillConf && skillConf.ap) {
|
||||
reviveHpPercent = skillConf.ap;
|
||||
reviveSkillConf = SkillSet[reviveConf.s_uuid];
|
||||
if (reviveSkillConf && reviveSkillConf.ap) {
|
||||
reviveHpPercent = reviveSkillConf.ap;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -215,10 +216,17 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
|
||||
TAttrsComp.dirty_hp = true;
|
||||
|
||||
// 触发复活动画
|
||||
if (targetView) {
|
||||
targetView.alive()
|
||||
targetView.playReady(skillConf.readyAnm);
|
||||
targetView.skill_name('',skillConf.uuid)
|
||||
if (targetView && reviveSkillConf) {
|
||||
targetView.playReady(reviveSkillConf.readyAnm);
|
||||
targetView.skill_name('', reviveSkillConf.uuid);
|
||||
// 延迟 0.5 秒后恢复状态,让特效有时间播放,同时也能体现“正在复活”的过程
|
||||
targetView.scheduleOnce(() => {
|
||||
if (targetView.node && targetView.node.isValid) {
|
||||
targetView.alive();
|
||||
}
|
||||
}, 0.5);
|
||||
} else if (targetView) {
|
||||
targetView.alive();
|
||||
}
|
||||
mLogger.log(this.debugMode, 'HeroAtkSystem', ` Hero waiting to revive! Lives revived: ${TAttrsComp.revived_count}/${maxReviveCount}, Hp restored: ${reviveHpPercent}%`);
|
||||
return reDate;
|
||||
|
||||
@@ -34,7 +34,7 @@ export class HeroAttrsComp extends ecs.Comp {
|
||||
fend?: number[];
|
||||
atking?: {s_uuid: number, t_num: number}[];
|
||||
atked?: {s_uuid: number, t_num: number}[];
|
||||
revive?: {s_uuid: number, r_num: number, upr: number}[];
|
||||
revive?: {s_uuid: number, r_num: number, upr: number};
|
||||
|
||||
// ==================== 特殊属性 ====================
|
||||
critical: number = 0; // 暴击率
|
||||
|
||||
Reference in New Issue
Block a user