feat(评分系统): 实现多维度游戏评分统计与结算
- 扩展 GameScoreStats 数据结构,新增战绩、输出、防御、构建和效率五个维度的统计字段 - 在战斗、治疗、购卡、刷新等关键节点实时采集评分数据 - 实现评分数据重置机制,确保每局数据独立 - 重构总分计算逻辑,采用五维加权评分模型 - 新增初始金币收入统计,完善资源利用效率评估
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user