feat(评分系统): 实现多维度游戏评分统计与结算

- 扩展 GameScoreStats 数据结构,新增战绩、输出、防御、构建和效率五个维度的统计字段
- 在战斗、治疗、购卡、刷新等关键节点实时采集评分数据
- 实现评分数据重置机制,确保每局数据独立
- 重构总分计算逻辑,采用五维加权评分模型
- 新增初始金币收入统计,完善资源利用效率评估
This commit is contained in:
walkpan
2026-04-25 21:52:59 +08:00
parent 83d5792b48
commit b588fd06a0
9 changed files with 220 additions and 28 deletions

View File

@@ -144,12 +144,20 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
if (isCrit) {
damage = Math.floor(damage * (1 + FightSet.CRIT_DAMAGE / 100));
reDate.isCrit=true;
if (damageEvent.Attrs.fac === FacSet.HERO) {
// 【评分系统 - 输出分】统计暴击次数与暴击造成的总伤害
smc.vmdata.scores.crt_count++;
smc.vmdata.scores.crit_dmg_total += damage;
}
}
mLogger.log(this.debugMode, 'HeroAtkSystem', " after crit",damage)
// 护盾吸收
const shieldResult = this.absorbShield(TAttrsComp, damage);
damage = shieldResult.remainingDamage;
if (shieldResult.absorbedDamage > 0) {
// 【评分系统 - 防御分】统计护盾成功抵挡伤害的次数
smc.vmdata.scores.shield_block_count += shieldResult.absorbedDamage;
}
mLogger.log(this.debugMode, 'HeroAtkSystem', " after shield",damage)
// 显示护盾吸收飘字
if (shieldResult.absorbedDamage > 0 && targetView) {
@@ -160,6 +168,14 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
// TAttrsComp.hp -= damage; // 应用伤害到数据层
TAttrsComp.add_hp(-damage); // 使用 add_hp 以触发 dirty_hp 和 UI 更新
if (damageEvent.Attrs.fac === FacSet.HERO) {
// 【评分系统 - 输出分】统计团队造成的总伤害以及单次最高伤害记录
smc.vmdata.scores.total_dmg += damage;
if (damage > smc.vmdata.scores.highest_dmg) {
smc.vmdata.scores.highest_dmg = damage;
}
}
// 增加受击计数并触发 atked 技能
TAttrsComp.atked_count++;
this.checkAndTriggerAtkedSkills(TAttrsComp, targetView);
@@ -301,6 +317,10 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
for (let i = 0; i < triggerCount; i++) {
TAttrsComp.dead.forEach((uuid: number) => {
if (TAttrsComp.fac === FacSet.HERO) {
// 【评分系统 - 防御分】统计死亡触发技能的生效次数
smc.vmdata.scores.dead_trigger_count++;
}
oops.message.dispatchEvent(GameEvent.TriggerSkill, {
s_uuid: uuid,
heroAttrs: TAttrsComp,

View File

@@ -429,6 +429,10 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
const addHp = Math.floor(sAp*_cAttrsComp.ap/100);
model.add_hp(addHp);
target.health(addHp);
if (_cAttrsComp.fac === FacSet.HERO) {
// 【评分系统 - 防御分】统计团队造成的总治疗量
smc.vmdata.scores.heal_total += addHp;
}
} else if (kind === SkillKind.Shield && sAp !== 0) {
const addShield = Math.max(0, Math.floor(sAp));
model.add_shield(addShield);