添加 GameScoreStats 接口用于记录游戏单局的各种统计数据,包括战斗、伤害、生存和资源统计 在 SingletonModuleComp 中实现 scores 对象来存储这些统计数据
245 lines
9.5 KiB
TypeScript
245 lines
9.5 KiB
TypeScript
|
||
/**
|
||
* Buff类型枚举
|
||
* VALUE: 数值型 - 直接加减数值
|
||
* RATIO: 百分比型 - 按百分比计算
|
||
*/
|
||
export enum BType {
|
||
VALUE = 0, //数值型
|
||
RATIO = 1, //百分比型
|
||
BOOLEAN = 2, // 布尔型
|
||
}
|
||
|
||
export enum NeAttrs {
|
||
IN_FROST = 0, // 冰冻状态
|
||
IN_STUN = 1, // 眩晕状态
|
||
IN_BURN = 2, // 灼烧状态
|
||
IN_POISON = 3, // 中毒状态
|
||
}
|
||
|
||
// ========== 属性枚举 ==========
|
||
/**
|
||
* 英雄属性枚举
|
||
* 定义所有可用的战斗属性类型
|
||
* 按逻辑分组排序:基础生存 → 攻击属性 → 防御属性 → 特殊效果 → 基础属性
|
||
*/
|
||
export enum Attrs {
|
||
// ========== 基础生存属性 (0-9) ==========
|
||
HP_MAX = 0, // 最大生命值
|
||
MP_MAX = 1, // 最大魔法值
|
||
SHIELD_MAX = 2, // 最大护盾值
|
||
HP_REGEN = 3, // 生命回复
|
||
MP_REGEN = 4, // 魔法回复
|
||
LUCK = 5, // 幸运值
|
||
|
||
// ========== 攻击属性 (10-19) ==========
|
||
AP = 10, // 攻击力
|
||
DIS = 12, // 攻击距离
|
||
AS = 13, // 攻击速度(减少技能skills[0]CD)
|
||
SS = 14, // 技能速度 (减少skills[0] 以外的cd)
|
||
SKILL_DURATION = 15, // 技能持续时间
|
||
AREA_OF_EFFECT = 16, // 作用范围
|
||
|
||
// ========== 防御属性 (20-29) ==========
|
||
DEF = 20, // 防御 伤害减免
|
||
DODGE = 22, // 闪避率
|
||
THORNS = 25, // 反伤
|
||
CRITICAL_RES = 26, // 暴击抗性
|
||
CON_RES = 27, // 控制抗性
|
||
|
||
// ========== 暴击与命中属性 (30-39) ==========
|
||
CRITICAL = 30, // 暴击率
|
||
CRITICAL_DMG = 31, // 暴击伤害
|
||
HIT = 32, // 命中率
|
||
|
||
|
||
// ========== 特殊效果属性 (50-59) ==========
|
||
LIFESTEAL = 50, // 吸血比率
|
||
MANASTEAL = 51, // 吸蓝比率
|
||
FREEZE_CHANCE = 52, // 冰冻概率
|
||
BURN_CHANCE = 53, // 燃烧概率
|
||
STUN_CHANCE = 54, // 眩晕概率
|
||
BACK_CHANCE = 55, // 击退概率
|
||
SLOW_CHANCE = 56, // 减速概率
|
||
POISON_CHANCE = 57, // 中毒概率
|
||
SILENCE_CHANCE = 58, // 沉默概率
|
||
EXPLOSION_CHANCE = 59, // 爆炸概率
|
||
|
||
// ========== 增益效果属性 (60-69) ==========
|
||
BUFF_UP = 60, // Buff效果提升
|
||
DBUFF_UP = 61, // Debuff效果提升
|
||
SHIELD_UP = 62, // 护盾效果提升
|
||
SPEED = 63, // 移动速度加成
|
||
EXP_GAIN = 64, // 经验获取
|
||
GOLD_GAIN = 65, // 金币获取
|
||
DROP_CHANCE = 66, // 掉落率
|
||
REVIVE_COUNT = 67, // 复活次数
|
||
REVIVE_TIME = 68, // 复活时间
|
||
INVINCIBLE_TIME = 69, // 无敌时间
|
||
|
||
// ========== 武器进化相关 (70-79) ==========
|
||
PUNCTURE = 70, // 穿刺次数
|
||
PUNCTURE_DMG = 71, // 穿刺伤害
|
||
MOVE_SPEED = 74, // 移动速度
|
||
BURN = 75, // 易伤效果
|
||
WFUNY = 77, // 风怒
|
||
|
||
// ========== 负面状态相关 (80-89) ==========
|
||
DMG_INVUL = 80, //易伤
|
||
// ========== 怪物特殊属性 (90-99)==========
|
||
ATK_TRI_RESET = 90, // 英雄攻击触发计数重置
|
||
DMG_TRI_RESET = 91, // 英雄伤害触发计数重置
|
||
BOOM = 92, // 自爆怪
|
||
|
||
}
|
||
|
||
/**
|
||
* 初始化英雄属性对象
|
||
* 遍历 Attrs 枚举的所有数字值,返回一个属性初始值为 0 的对象
|
||
* @returns 属性映射对象 { 属性ID: 0 }
|
||
*/
|
||
export const getAttrs = () => {
|
||
// 遍历枚举的数字值(枚举会生成双向映射)
|
||
let reAttrs = {};
|
||
Object.keys(Attrs).forEach(key => {
|
||
if (!isNaN(Number(key))) {
|
||
reAttrs[Number(key)] = 0;
|
||
}
|
||
});
|
||
return reAttrs;
|
||
}
|
||
|
||
export const getNeAttrs = () => {
|
||
let reAttrs = {};
|
||
Object.keys(NeAttrs).forEach(key => {
|
||
if (!isNaN(Number(key))) {
|
||
reAttrs[Number(key)] = {
|
||
value: 0,
|
||
time: 0,
|
||
};
|
||
}
|
||
});
|
||
return reAttrs;
|
||
}
|
||
/**
|
||
* 属性类型配置表
|
||
* 用于区分每个属性是数值型还是百分比型
|
||
* - VALUE: 数值型属性(如生命值、攻击力等绝对数值)
|
||
* - RATIO: 百分比型属性(如暴击率、闪避率等百分比数值)
|
||
* 按新的Attrs枚举顺序重新组织
|
||
*/
|
||
export const AttrsType: Record<Attrs, BType> = {
|
||
// ========== 基础生存属性(数值型) ==========
|
||
[Attrs.HP_MAX]: BType.VALUE, // 最大生命值 - 数值型
|
||
[Attrs.MP_MAX]: BType.VALUE, // 最大魔法值 - 数值型
|
||
[Attrs.SHIELD_MAX]: BType.VALUE, // 最大护盾值 - 数值型
|
||
[Attrs.HP_REGEN]: BType.VALUE, // 生命回复 - 数值型
|
||
[Attrs.MP_REGEN]: BType.VALUE, // 魔法回复 - 数值型
|
||
[Attrs.LUCK]: BType.VALUE, // 幸运 - 数值型
|
||
|
||
// ========== 攻击属性(数值型) ==========
|
||
[Attrs.AP]: BType.VALUE, // 攻击力 - 数值型
|
||
[Attrs.DIS]: BType.VALUE, // 攻击距离 - 数值型
|
||
[Attrs.AS]: BType.RATIO, // 攻击速度 - 百分比型
|
||
[Attrs.SS]: BType.RATIO, // 技能速度 - 百分比型
|
||
[Attrs.SKILL_DURATION]: BType.RATIO, // 技能持续时间 - 百分比型
|
||
[Attrs.AREA_OF_EFFECT]: BType.VALUE, // 作用范围 - 数值型
|
||
|
||
// ========== 防御属性(混合类型) ==========
|
||
[Attrs.DEF]: BType.VALUE, // 物理防御 - 数值型
|
||
[Attrs.DODGE]: BType.RATIO, // 闪避率 - 百分比型
|
||
[Attrs.THORNS]: BType.RATIO, // 反伤 - 百分比型
|
||
|
||
// ========== 暴击与命中属性(百分比型) ==========
|
||
[Attrs.CRITICAL]: BType.RATIO, // 暴击率 - 百分比型
|
||
[Attrs.CRITICAL_DMG]: BType.RATIO, // 暴击伤害 - 百分比型
|
||
[Attrs.HIT]: BType.RATIO, // 命中率 - 百分比型
|
||
[Attrs.CRITICAL_RES]: BType.RATIO, // 暴击抗性 - 百分比型
|
||
[Attrs.CON_RES]: BType.RATIO, // 控制抗性 - 百分比型
|
||
|
||
|
||
|
||
|
||
// ========== 特殊效果属性(百分比型) ==========
|
||
[Attrs.LIFESTEAL]: BType.RATIO, // 吸血比率 - 百分比型
|
||
[Attrs.MANASTEAL]: BType.RATIO, // 吸蓝 - 百分比型
|
||
[Attrs.FREEZE_CHANCE]: BType.RATIO, // 冰冻概率 - 百分比型
|
||
[Attrs.BURN_CHANCE]: BType.RATIO, // 燃烧概率 - 百分比型
|
||
[Attrs.STUN_CHANCE]: BType.RATIO, // 眩晕概率 - 百分比型
|
||
[Attrs.BACK_CHANCE]: BType.RATIO, // 击退概率 - 百分比型
|
||
[Attrs.SLOW_CHANCE]: BType.RATIO, // 减速概率 - 百分比型
|
||
[Attrs.POISON_CHANCE]: BType.RATIO, // 中毒概率 - 百分比型
|
||
[Attrs.SILENCE_CHANCE]: BType.RATIO, // 沉默概率 - 百分比型
|
||
[Attrs.EXPLOSION_CHANCE]: BType.RATIO, // 爆炸概率 - 百分比型
|
||
|
||
// ========== 增益效果属性(百分比型) ==========
|
||
[Attrs.BUFF_UP]: BType.RATIO, // Buff效果提升 - 百分比型
|
||
[Attrs.DBUFF_UP]: BType.RATIO, // Debuff效果提升 - 百分比型
|
||
[Attrs.SHIELD_UP]: BType.RATIO, // 护盾效果提升 - 百分比型
|
||
[Attrs.SPEED]: BType.RATIO, // 移动速度加成 - 百分比型
|
||
[Attrs.EXP_GAIN]: BType.RATIO, // 经验获取 - 百分比型
|
||
[Attrs.GOLD_GAIN]: BType.RATIO, // 金币获取 - 百分比型
|
||
[Attrs.DROP_CHANCE]: BType.RATIO, // 掉落率 - 百分比型
|
||
[Attrs.REVIVE_COUNT]: BType.VALUE, // 复活次数 - 数值型
|
||
[Attrs.REVIVE_TIME]: BType.RATIO, // 复活时间 - 百分比型
|
||
[Attrs.INVINCIBLE_TIME]: BType.RATIO, // 无敌时间 - 百分比型
|
||
|
||
// ========== 武器进化相关(混合类型) ==========
|
||
[Attrs.PUNCTURE]: BType.VALUE, // 穿刺次数 - 数值型
|
||
[Attrs.PUNCTURE_DMG]: BType.RATIO, // 穿刺伤害 - 百分比型
|
||
[Attrs.MOVE_SPEED]: BType.VALUE, // 移动速度 - 数值型
|
||
[Attrs.BURN]: BType.RATIO, // 易伤效果 - 百分比型
|
||
[Attrs.WFUNY]: BType.RATIO, // 未知特殊属性 - 百分比型
|
||
|
||
|
||
// ========== 负面状态相关(混合类型) ==========
|
||
[Attrs.DMG_INVUL]: BType.RATIO, //易伤
|
||
|
||
// ========== 怪物独有特殊属性 (90-99)==========
|
||
[Attrs.ATK_TRI_RESET]: BType.BOOLEAN, // 英雄攻击触发计数重置
|
||
[Attrs.DMG_TRI_RESET]: BType.BOOLEAN, // 英雄伤害触发计数重置
|
||
[Attrs.BOOM]: BType.BOOLEAN, // 自爆怪
|
||
|
||
};
|
||
|
||
/**
|
||
* 判断属性是否为百分比型
|
||
* @param attrType 属性类型
|
||
* @returns true: 百分比型, false: 数值型
|
||
*/
|
||
export const isRatioAttr = (attrType: Attrs): boolean => {
|
||
return AttrsType[attrType] === BType.RATIO;
|
||
};
|
||
|
||
/**
|
||
* 游戏单局统计数据接口
|
||
*/
|
||
export interface GameScoreStats {
|
||
score: number; // 基础得分
|
||
|
||
// 战斗统计
|
||
crt_count: number; // 暴击次数
|
||
wf_count: number; // 风怒次数
|
||
dod_count: number; // 闪避次数
|
||
back_count: number; // 击退次数
|
||
stun_count: number; // 击晕次数
|
||
freeze_count: number; // 冰冻次数
|
||
|
||
// 伤害统计
|
||
total_dmg: number; // 总伤害
|
||
atk_count: number; // 攻击次数 (用于计算平均伤害)
|
||
avg_dmg: number; // 平均伤害
|
||
thorns_dmg: number; // 反伤伤害
|
||
crit_dmg_total: number; // 暴击伤害总额
|
||
|
||
// 生存统计
|
||
heal_total: number; // 治疗总量
|
||
lifesteal_total: number;// 吸血总量
|
||
|
||
// 资源统计
|
||
exp_total: number; // 经验总数
|
||
gold_total: number; // 金币总数
|
||
}
|
||
|
||
|