refactor(天赋系统): 重构天赋效果枚举和属性处理逻辑

- 重新组织TalEffet枚举,按功能分类并添加注释说明
- 移除冗余的DMG_RED属性
- 为HeroAttrsComp添加详细的JSDoc注释
- 优化天赋buff处理方法,区分数值型和计数型天赋
This commit is contained in:
2025-11-27 16:12:12 +08:00
parent cdfcf1f8f1
commit 0692d58e01
2 changed files with 53 additions and 15 deletions

View File

@@ -19,19 +19,24 @@ export enum TriType {
export enum TalEffet {
ATK_DMG=1, // 伤害
SKILL_DMG=2, // 技能伤害
HP=3, // 回血 百分比
MP=4, //回蓝 百分比
BUFF = 5, // 暴击率,闪避率等,可叠加的触发后清零
STATS=6, // 状态
WFUNY=7, // 风怒
D_SKILL=8, //两次技能
SHIELD=9, // 护盾
DMG_RED=10, // 减伤
C_MSKILL=11, // 必杀技能必暴
C_ATK=12, // 普工必爆
C_SKILL=13, // 一般技能必暴
ATK_DMG=1, // 伤害 次数+伤害加成如额外5次 伤害+20%
SKILL_DMG=2, // 技能伤害 次数+伤害加成如额外5次 伤害+20%
DMG_RED=10, // 减伤 次数+减伤加成如额外5次 伤害-20%
THORNS=14, //反伤 百分比 次数+反伤加成如额外5次 反伤-20%
///////////////////////////////////////////////////////////////////////
HP=3, // 回血 百分比 直接触发回血20%
MP=4, //回蓝 百分比 直接触发回蓝20%
SHIELD=9, // 护盾 直接触发获得20%的生命值护盾
////////////////////////////////////////////////////////////////////////
BUFF = 5, // 数值叠加 触发后清零: 暴击率,闪避率等,触发后效果取消
////////////////////////////////////////////////////////////////////////////////
STATS=6, // 状态 待定
WFUNY=7, // 风怒 次数 叠加 如额外5次 风怒
D_SKILL=8, //两次技能 次数 叠加如额外5次 两次技能
C_MSKILL=11, // 必杀技能必暴 次数 叠加 如额外5次 必杀技能必暴
C_ATK=12, // 普工必爆 次数 叠加 如额外5次 普工必爆
C_SKILL=13, // 一般技能必暴 次数 叠加 如额外5次 一般技能必暴
}
export enum TalTarget {
@@ -48,7 +53,6 @@ export enum TalAttrs {
CRITICAL=Attrs.CRITICAL, // 暴击率
AP=Attrs.AP, // 攻击力
MP=Attrs.MAP, // 魔法攻击力
DMG_RED=Attrs.DMG_RED, // 魔法防御
}
/**
* 天赋配置接口
@@ -112,7 +116,7 @@ export const talConf: Record<number, ItalConf> = {
desc:"被攻击3次后, 给于目标50%的伤害"},
7102:{uuid:7102,name:"护盾",triType:TriType.DMG,Trigger:3,count:1,target:TalTarget.SELF,effet:TalEffet.SHIELD,vType:BType.RATIO, value:20,attrs:TalAttrs.NON,
desc:"被攻击3次后, 获得20%的生命值护盾"},
7103:{uuid:7103,name:"减伤",triType:TriType.DMG,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.DMG_RED,vType:BType.RATIO, value:50,attrs:TalAttrs.DMG_RED,
7103:{uuid:7103,name:"减伤",triType:TriType.DMG,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.DMG_RED,vType:BType.RATIO, value:50,attrs:TalAttrs.NON,
desc:"被攻击3次后, 下1次伤害减50%"},

View File

@@ -441,6 +441,13 @@ export class HeroAttrsComp extends ecs.Comp {
}
/**
* 添加数值型天赋buff 数值会进行累加count 时叠加层数
* @param t_uuid 天赋唯一标识
* @param attrIndex 属性索引
* @param bType buff类型(VALUE:数值型, RATIO:百分比型)
* @param value buff值
*/
addValueTal(t_uuid: number, attrIndex?: number, bType?: BType, value: number = 0) {
if (attrIndex === undefined || bType === undefined) return;
const buff = this.BUFFS_TAL[t_uuid];
@@ -452,6 +459,12 @@ export class HeroAttrsComp extends ecs.Comp {
}
this.recalculateSingleAttr(attrIndex);
}
/**
* 添加计数型天赋每次添加数值已最新额覆盖久的count为可用次数
* @param eff 天赋效果ID
* @param value 天赋值
*/
addCountTal(eff: number, value: number) {
const t = this.Talents[eff] || { value: 0, count: 0 };
t.value = value;
@@ -459,18 +472,34 @@ export class HeroAttrsComp extends ecs.Comp {
this.Talents[eff] = t;
}
/**
* 使用计数型天赋,如风怒 ,必爆等天赋,只需要返回是否暴击的,使用这个方法
* @param eff 天赋效果ID
* @returns 是否使用成功
*/
useCountTal(eff: number): boolean {
const t = this.Talents[eff];
if (!t || t.count <= 0) return false;
t.count -= 1;
return true;
}
/**
* 使用计数型天赋并返回天赋值如额外5次 伤害+20% 5次受伤免伤20% 使用这个方法
* @param eff 天赋效果ID
* @returns 天赋值
*/
useCountValTal(eff: number): number {
const t = this.Talents[eff];
if (!t || t.value <= 0) return 0;
t.count -= 1;
return t.value;
}
/**
* 根据UUID移除数值型天赋buff
* @param t_uuid 天赋唯一标识
*/
useValueTalByUuid(t_uuid: number) {
const buff = this.BUFFS_TAL[t_uuid];
if (!buff) return;
@@ -478,6 +507,11 @@ export class HeroAttrsComp extends ecs.Comp {
delete this.BUFFS_TAL[t_uuid];
this.recalculateSingleAttr(attrIndex);
}
/**
* 根据属性索引移除数值型天赋buff
* @param attrIndex 属性索引
*/
useValueTalByAttr(attrIndex: number) {
let changed = false;
for (const key in this.BUFFS_TAL) {