feat(天赋系统): 添加天赋执行次数功能并实现必暴效果

为天赋系统添加count字段控制执行次数,并实现C_ATK、C_SKILL、C_MSKILL三种必暴效果类型
This commit is contained in:
2025-11-20 16:22:36 +08:00
parent ff4ce76482
commit b4fd807ddc
2 changed files with 37 additions and 18 deletions

View File

@@ -28,6 +28,9 @@ export enum TalEffet {
D_SKILL=8, //两次技能 D_SKILL=8, //两次技能
SHIELD=9, // 护盾 SHIELD=9, // 护盾
LDMG=10, // 减伤 LDMG=10, // 减伤
C_ATK=11, // 普工必爆
C_SKILL=12, // 一般技能必暴
C_MSKILL=13, // 必杀技能必暴
} }
export enum TalTarget { export enum TalTarget {
@@ -61,6 +64,7 @@ export interface ItalConf {
attrs?:TalAttrs //触发的attrs效果的对应attrs attrs?:TalAttrs //触发的attrs效果的对应attrs
Trigger:number //触发值 Trigger:number //触发值
desc: string; // 天赋描述(说明触发条件和效果) desc: string; // 天赋描述(说明触发条件和效果)
count:number //执行次数,及可以触发的次数
} }
// ========== 天赋配置表 ========== // ========== 天赋配置表 ==========
@@ -81,42 +85,42 @@ export interface ItalConf {
*/ */
export const talConf: Record<number, ItalConf> = { export const talConf: Record<number, ItalConf> = {
/*** 普通攻击触发 ***/ /*** 普通攻击触发 ***/
7001:{uuid:7001,name:"风怒",triType:TriType.ATK,Trigger:3,target:TalTarget.ENEMY,effet:TalEffet.WFUNY,vType:BType.RATIO, value:50,attrs:TalAttrs.NON, 7001:{uuid:7001,name:"风怒",triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.WFUNY,vType:BType.RATIO, value:50,attrs:TalAttrs.NON,
desc:"普通攻击3次后, 立即给与目标150%伤害的额外打击"}, desc:"普通攻击3次后, 立即给与目标150%伤害的额外打击"},
7002:{uuid:7002,name:"溅射",triType:TriType.ATK,Trigger:3,target:TalTarget.ENEMY,effet:TalEffet.SPLASH,vType:BType.RATIO, value:50,attrs:TalAttrs.NON, 7002:{uuid:7002,name:"溅射",triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.SPLASH,vType:BType.RATIO, value:50,attrs:TalAttrs.NON,
desc:"普通攻击3次后, 会对目标100码内的敌人造成30%伤害"}, desc:"普通攻击3次后, 会对目标100码内的敌人造成30%伤害"},
7003:{uuid:7003,name:"回血",triType:TriType.ATK,Trigger:3,target:TalTarget.SELF,effet:TalEffet.HP,vType:BType.RATIO, value:1,attrs:TalAttrs.NON, 7003:{uuid:7003,name:"回血",triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.SELF,effet:TalEffet.HP,vType:BType.RATIO, value:1,attrs:TalAttrs.NON,
desc:"普通攻击3次后, 会回复10%的生命值"}, desc:"普通攻击3次后, 会回复10%的生命值"},
7004:{uuid:7004,name:"回蓝",triType:TriType.ATK,Trigger:3,target:TalTarget.SELF,effet:TalEffet.MP,vType:BType.RATIO, value:1,attrs:TalAttrs.NON, 7004:{uuid:7004,name:"回蓝",triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.SELF,effet:TalEffet.MP,vType:BType.RATIO, value:1,attrs:TalAttrs.NON,
desc:"普通攻击3次后, 会回复10%的蓝值"}, desc:"普通攻击3次后, 会回复10%的蓝值"},
7005:{uuid:7005,name:"冰冻",triType:TriType.ATK,Trigger:3,target:TalTarget.ENEMY,effet:TalEffet.BUFF,vType:BType.RATIO, value:5,attrs:TalAttrs.FREEZE_CHANCE, 7005:{uuid:7005,name:"冰冻",triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.BUFF,vType:BType.RATIO, value:5,attrs:TalAttrs.FREEZE_CHANCE,
desc:"普通攻击3次后, 获得5%的冻结率"}, desc:"普通攻击3次后, 获得5%的冻结率"},
7006:{uuid:7006,name:"沉默",triType:TriType.ATK,Trigger:3,target:TalTarget.ENEMY,effet:TalEffet.BUFF,vType:BType.RATIO, value:5,attrs:TalAttrs.SILENCE_CHANCE, 7006:{uuid:7006,name:"沉默",triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.BUFF,vType:BType.RATIO, value:5,attrs:TalAttrs.SILENCE_CHANCE,
desc:"普通攻击3次后, 获得5%的沉默率"}, desc:"普通攻击3次后, 获得5%的沉默率"},
7007:{uuid:7007,name:"击退",triType:TriType.ATK,Trigger:3,target:TalTarget.ENEMY,effet:TalEffet.BUFF,vType:BType.RATIO, value:5,attrs:TalAttrs.BACK_CHANCE, 7007:{uuid:7007,name:"击退",triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.BUFF,vType:BType.RATIO, value:5,attrs:TalAttrs.BACK_CHANCE,
desc:"普通攻击3次后, 获得5%的击退率"}, desc:"普通攻击3次后, 获得5%的击退率"},
7008:{uuid:7008,name:"会心",triType:TriType.ATK,Trigger:3,target:TalTarget.SELF,effet:TalEffet.BUFF,vType:BType.RATIO, value:5,attrs:TalAttrs.CRITICAL, 7008:{uuid:7008,name:"会心",triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.SELF,effet:TalEffet.BUFF,vType:BType.RATIO, value:5,attrs:TalAttrs.CRITICAL,
desc:"普通攻击3次后, 获得5%的暴击率"}, desc:"普通攻击3次后, 获得5%的暴击率"},
7009:{uuid:7009,name:"眩晕",triType:TriType.ATK,Trigger:3,target:TalTarget.ENEMY,effet:TalEffet.BUFF,vType:BType.RATIO, value:5,attrs:TalAttrs.STUN_CHANCE, 7009:{uuid:7009,name:"眩晕",triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.BUFF,vType:BType.RATIO, value:5,attrs:TalAttrs.STUN_CHANCE,
desc:"普通攻击3次后, 获得5%的眩晕率"}, desc:"普通攻击3次后, 获得5%的眩晕率"},
7010:{uuid:7010,name:"熟练",triType:TriType.ATK,Trigger:10,target:TalTarget.SELF,effet:TalEffet.D_SKILL,vType:BType.RATIO, value:0,attrs:TalAttrs.NON, 7010:{uuid:7010,name:"熟练",triType:TriType.ATK,Trigger:10,count:1,target:TalTarget.SELF,effet:TalEffet.D_SKILL,vType:BType.RATIO, value:0,attrs:TalAttrs.NON,
desc:"普通攻击10次后, 下次一般技能额外释放1次,伤害100%"}, desc:"普通攻击10次后, 下次一般技能额外释放1次,伤害100%"},
/*** 受伤触发 ***/ /*** 受伤触发 ***/
7101:{uuid:7101,name:"反击",triType:TriType.DMG,Trigger:3,target:TalTarget.ENEMY,effet:TalEffet.DMG,vType:BType.RATIO, value:50,attrs:TalAttrs.NON, 7101:{uuid:7101,name:"反击",triType:TriType.DMG,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.DMG,vType:BType.RATIO, value:50,attrs:TalAttrs.NON,
desc:"被攻击3次后, 给于目标50%的伤害"}, desc:"被攻击3次后, 给于目标50%的伤害"},
7102:{uuid:7102,name:"护盾",triType:TriType.DMG,Trigger:3,target:TalTarget.SELF,effet:TalEffet.SHIELD,vType:BType.RATIO, value:20,attrs:TalAttrs.NON, 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%的生命值护盾"}, desc:"被攻击3次后, 获得20%的生命值护盾"},
7103:{uuid:7103,name:"减伤",triType:TriType.DMG,Trigger:3,target:TalTarget.ENEMY,effet:TalEffet.LDMG,vType:BType.RATIO, value:50,attrs:TalAttrs.NON, 7103:{uuid:7103,name:"减伤",triType:TriType.DMG,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.LDMG,vType:BType.RATIO, value:50,attrs:TalAttrs.NON,
desc:"被攻击3次后, 下1次伤害减50%"}, desc:"被攻击3次后, 下1次伤害减50%"},
/*** 失去血量触发 ***/ //需要重新设计,触发类型 /*** 失去血量触发 ***/
7201:{uuid:7201,name:"背水",triType:TriType.HPL,Trigger:50,target:TalTarget.SELF,effet:TalEffet.BUFF,vType:BType.VALUE, value:10,attrs:TalAttrs.AP, 7201:{uuid:7201,name:"背水",triType:TriType.HPL,Trigger:50,count:10,target:TalTarget.SELF,effet:TalEffet.C_ATK,vType:BType.VALUE, value:0,attrs:TalAttrs.NON,
desc:"每失去50%生命值,获得下10次普通攻击暴击"}, desc:"每失去50%生命值,获得下10次普通攻击暴击"},
/*** 升级触发 ***/ //需要重新设计,触发类型 /*** 升级触发 ***/
7301:{uuid:7301,name:"勤勉",triType:TriType.LUP,Trigger:1,target:TalTarget.SELF,effet:TalEffet.BUFF,vType:BType.VALUE, value:5,attrs:TalAttrs.AP, 7301:{uuid:7301,name:"勤勉",triType:TriType.LUP,Trigger:1,count:5,target:TalTarget.SELF,effet:TalEffet.C_SKILL,vType:BType.VALUE, value:0,attrs:TalAttrs.NON,
desc:"每升1级,获得下5次技能暴击"}, desc:"每升1级,获得下5次技能暴击"},
}; };

View File

@@ -18,6 +18,8 @@ export interface TalSlot {
vType:BType; // 数值型还是百分比型 vType:BType; // 数值型还是百分比型
value: number; // 触发的效果数值 value: number; // 触发的效果数值
value_add: number; // 触发的效果数值增量 value_add: number; // 触发的效果数值增量
count: number; // 执行次数,及可以触发的次数
count_add: number; // 执行次数增量
Trigger: number; // 天赋触发阈值 Trigger: number; // 天赋触发阈值
Trigger_add: number; // 天赋触发阈值减值 Trigger_add: number; // 天赋触发阈值减值
desc: string; // 天赋描述(说明触发条件和效果) desc: string; // 天赋描述(说明触发条件和效果)
@@ -91,6 +93,8 @@ export class TalComp extends ecs.Comp {
vType: tConf.vType, vType: tConf.vType,
value: tConf.value, // 效果数值初始为配置值 value: tConf.value, // 效果数值初始为配置值
value_add: 0, // 效果数值增量初始为0 value_add: 0, // 效果数值增量初始为0
count: 1, // 执行次数,及可以触发的次数
count_add:0, // 执行次数增量初始为0
Trigger: tConf.Trigger, // 触发阈值(后续可从配置中读取) Trigger: tConf.Trigger, // 触发阈值(后续可从配置中读取)
Trigger_add: 0, // 触发阈值增量初始为0 Trigger_add: 0, // 触发阈值增量初始为0
desc: tConf.desc, desc: tConf.desc,
@@ -176,7 +180,9 @@ export class TalComp extends ecs.Comp {
const talent = this.Tals[uuid]; const talent = this.Tals[uuid];
if (talent.cur >= (talent.Trigger - talent.Trigger_add)) { // 修复触发条件,累积值达到或超过触发阈值时触发 if (talent.cur >= (talent.Trigger - talent.Trigger_add)) { // 修复触发条件,累积值达到或超过触发阈值时触发
console.log(`[TalComp]天赋触发,天赋ID:${uuid}`); console.log(`[TalComp]天赋触发,天赋ID:${uuid}`);
this.doTriggerTal(talent.uuid); for(let i=0;i<(talent.count+talent.count_add);i++){
this.doTriggerTal(talent.uuid);
}
// 重置累积值 // 重置累积值
talent.cur = 0; talent.cur = 0;
@@ -198,6 +204,15 @@ export class TalComp extends ecs.Comp {
case TalEffet.D_SKILL: case TalEffet.D_SKILL:
heroAttrs.addTalent(TalEffet.D_SKILL, talent.value + talent.value_add); heroAttrs.addTalent(TalEffet.D_SKILL, talent.value + talent.value_add);
break; break;
case TalEffet.C_ATK:
heroAttrs.addTalent(TalEffet.C_ATK, talent.value + talent.value_add);
break;
case TalEffet.C_SKILL:
heroAttrs.addTalent(TalEffet.C_SKILL, talent.value + talent.value_add);
break;
case TalEffet.C_MSKILL:
heroAttrs.addTalent(TalEffet.C_MSKILL, talent.value + talent.value_add);
break;
case TalEffet.BUFF: case TalEffet.BUFF:
heroAttrs.addTalBuff(talent.uuid, talent.attrs, talent.vType, talent.value + talent.value_add); heroAttrs.addTalBuff(talent.uuid, talent.attrs, talent.vType, talent.value + talent.value_add);
break; break;