refactor(英雄属性): 重构属性系统为扁平结构并移除技能组件

- 将 Attrs 枚举从数字索引改为字符串键值对,直接映射到 HeroAttrsComp 的字段
- 删除 HeroSkillsComp 组件,将攻击和技能计时器移至 HeroAttrsComp
- 移除复杂的属性类型映射和初始化函数,简化属性访问逻辑
- 更新 HeroViewComp 以直接使用模型字段而非通过 Attrs 枚举
- 重命名 NeAttrs 为 Debuff 并调整相关配置接口
This commit is contained in:
walkpan
2026-03-11 19:36:47 +08:00
parent bbcee36dec
commit 0ce299b0d8
5 changed files with 72 additions and 445 deletions

View File

@@ -10,11 +10,12 @@ export enum BType {
BOOLEAN = 2, // 布尔型
}
export enum NeAttrs {
export enum Debuff {
IN_FROST = 0, // 冰冻状态
IN_STUN = 1, // 眩晕状态
}
// ========== 属性枚举 ==========
/**
* 英雄属性枚举
@@ -22,125 +23,42 @@ export enum NeAttrs {
* 按逻辑分组排序:基础生存 → 攻击属性 → 防御属性 → 特殊效果 → 基础属性
*/
export enum Attrs {
// ========== 基础生存属性 (0-9) ==========
HP_MAX = 0, // 最大生命值
SHIELD_MAX = 2, // 最大护盾值
SPEED = 3, // 移动速度
// ========== 攻击属性 (10-19) ==========
AP = 10, // 攻击力
DIS = 12, // 攻击距离
AS = 13, // 攻击速度减少技能skills[0]CD
SS = 14, // 技能速度 (减少skills[0] 以外的cd)
// ========== 暴击与命中属性 (30-39) ==========
CRITICAL = 30, // 暴击率
CRITICAL_DMG = 31, // 暴击伤害
// ==================== 基础属性 ====================
ap = "ap", // 基础攻击
hp = "hp", // 基础血量
hp_max = "hp_max", // 最大血量
speed = "speed", // 基础移动速度
dis = "dis", // 基础距离
shield = "shield", // 当前护盾
shield_max = "shield_max", // 最大护盾值
// ==================== 攻击属性 ====================
a_cd = "a_cd", // 攻击计时
s_cd = "s_cd", // 技能计时
a_cd_max = "a_cd_max", // 攻击CD
s_cd_max = "s_cd_max", // 技能CD
// ========== 特殊效果属性 (50-59) ==========
FREEZE_CHANCE = 52, // 冰冻概
STUN_CHANCE = 54, // 眩晕概率
BACK_CHANCE = 55, // 击退概率
SLOW_CHANCE = 56, // 减速概率
// ==================== 暴击与命中属性 ====================
critical = "critical", // 暴击
critical_dmg = "critical_dmg", // 暴击伤害
// ========== 增益效果属性 (60-69) ==========
REVIVE_COUNT = 67, // 复活次数
REVIVE_TIME = 68, // 复活时间
INVINCIBLE_TIME = 69, // 无敌时间
// ========== 武器进化相关 (70-79) ==========
PUNCTURE = 70, // 穿刺次数
PUNCTURE_DMG = 71, // 穿刺伤害
WFUNY = 77, // 风怒
BOOM = 92, // 自爆怪
// ==================== 特殊效果属性 ====================
freeze_chance = "freeze_chance", // 冰冻概率
stun_chance = "stun_chance", // 眩晕概率
back_chance = "back_chance", // 击退概率
slow_chance = "slow_chance", // 减速概率
// ==================== 增益效果属性 ====================
revive_count = "revive_count", // 复活次数
revive_time = "revive_time", // 复活时间
invincible_time = "invincible_time",// 无敌时间
// ==================== 武器进化相关 ====================
puncture = "puncture", // 穿刺次数
puncture_dmg = "puncture_dmg", // 穿刺伤害
wfuny = "wfuny", // 风怒
}
export const defaultAttrs = {
[Attrs.BACK_CHANCE]:0,
}
/**
* 初始化英雄属性对象
* 遍历 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.SHIELD_MAX]: BType.VALUE, // 最大护盾值 - 数值型
// ========== 攻击属性(数值型) ==========
[Attrs.AP]: BType.VALUE, // 攻击力 - 数值型
[Attrs.DIS]: BType.VALUE, // 攻击距离 - 数值型
[Attrs.AS]: BType.RATIO, // 攻击速度 - 百分比型
[Attrs.SS]: BType.RATIO, // 技能速度 - 百分比型
// ========== 暴击与命中属性(百分比型) ==========
[Attrs.CRITICAL]: BType.RATIO, // 暴击率 - 百分比型
[Attrs.CRITICAL_DMG]: BType.RATIO, // 暴击伤害 - 百分比型
// ========== 特殊效果属性(百分比型) ==========
[Attrs.FREEZE_CHANCE]: BType.RATIO, // 冰冻概率 - 百分比型
[Attrs.STUN_CHANCE]: BType.RATIO, // 眩晕概率 - 百分比型
[Attrs.BACK_CHANCE]: BType.RATIO, // 击退概率 - 百分比型
[Attrs.SLOW_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.WFUNY]: BType.RATIO, // 未知特殊属性 - 百分比型
[Attrs.BOOM]: BType.BOOLEAN, // 自爆怪
};
/**
* 判断属性是否为百分比型
* @param attrType 属性类型
* @returns true: 百分比型, false: 数值型
*/
export const isRatioAttr = (attrType: Attrs): boolean => {
return AttrsType[attrType] === BType.RATIO;
};
/**
* 游戏单局统计数据接口
*/