refactor(mission): 重构关卡结算与刷怪统计逻辑
1. 新增整局跨回合刷怪统计与重置能力,替换原小节统计 2. 修改奖励配置为整局5回合累计结算逻辑 3. 调整失败奖励判定为整局维度统计 4. 重构胜利/失败奖励计算逻辑,适配多回合关卡
This commit is contained in:
@@ -629,11 +629,8 @@ export class MissionComp extends CCComp {
|
||||
settle_title: this._settleTitle,
|
||||
// 关卡难度度量(= 大关号,驱动胜利奖励随进度增长)
|
||||
mon_lv: getMonsterLv(this.currentStage),
|
||||
// 失败奖励判定数据:本关坚持时间 + 击杀统计(kills=已刷出-存活)
|
||||
defeat_stats: {
|
||||
clear_time: this.clearTime,
|
||||
...this.querySectionKillStats(),
|
||||
},
|
||||
// 失败奖励判定数据:整局坚持时间 + 整局击杀统计(kills=跨回合累计击杀,total=整局已刷出)
|
||||
defeat_stats: this.queryMissionKillStats(),
|
||||
});
|
||||
} else {
|
||||
// play 已为 false(fight_end 强制结束)→ 直接清理
|
||||
@@ -838,6 +835,8 @@ export class MissionComp extends CCComp {
|
||||
|
||||
// 重置所有的战局得分数据,防止上一局的数据污染
|
||||
smc.resetScores();
|
||||
// 重置整局刷怪统计(跨回合累计的已刷出总数),回合间不重置
|
||||
ecs.query(ecs.allOf(MissionMonCompComp)).forEach(e => e.get(MissionMonCompComp).resetMissionStats());
|
||||
|
||||
smc.vmdata.mission_data.coin = Math.max(0, Math.floor(FightSet.INIT_COIN));
|
||||
// 银币为局外持久货币,每局不重置,仅通过日常积攒,无需初始化
|
||||
@@ -1023,14 +1022,24 @@ export class MissionComp extends CCComp {
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询本节击杀统计(转交结算弹窗做失败奖励判定)
|
||||
* @returns { kills, total },查询不到 MissionMonComp 时返回 0/0
|
||||
* 查询整局(整关 5 回合)击杀统计与坚持时间,供结算弹窗做失败奖励判定。
|
||||
* Why: 一关一局后,失败奖励按整局累计口径计算,不再只看当前回合——
|
||||
* clear_time 用整关战斗总时长 fight_time(跨回合累计,整关重置一次);
|
||||
* kills 用 scores 跨回合累计的分类击杀数之和(melee/remote/elite/boss);
|
||||
* total 用整局已刷出怪物总数(MissionMonComp 跨回合累计)。
|
||||
*/
|
||||
private querySectionKillStats(): { kills: number; total: number } {
|
||||
private queryMissionKillStats(): { clear_time: number; kills: number; total: number } {
|
||||
const s = smc.vmdata.scores;
|
||||
const kills = (s.melee_kill_count || 0) + (s.remote_kill_count || 0)
|
||||
+ (s.elite_kill_count || 0) + (s.boss_kill_count || 0);
|
||||
const entities = ecs.query(ecs.allOf(MissionMonCompComp));
|
||||
const comp = entities[0]?.get(MissionMonCompComp);
|
||||
if (!comp) return { kills: 0, total: 0 };
|
||||
return comp.getSectionKillStats();
|
||||
const total = comp ? comp.getTotalSpawnedCount() : kills;
|
||||
return {
|
||||
clear_time: smc.vmdata.mission_data.fight_time,
|
||||
kills,
|
||||
total: Math.max(total, kills),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user