feat(天赋系统): 重构天赋触发机制并添加天赋点数系统

- 移除升级触发类型(TriType.LUP)及相关逻辑,改为通过英雄配置定义天赋点数获取规则
- 新增天赋点数接口(ITalPts)和配置字段,支持攻击、受击等不同触发条件
- 在天赋配置中添加点数获取(Pts)和消耗(CPts)字段
- 移除必杀技触发类型(TriType.MAX)的处理逻辑
- 优化TalComp组件结构,移除不必要的heroView引用
- 添加天赋系统设计文档(taldev.md)
This commit is contained in:
walkpan
2026-02-21 23:45:23 +08:00
parent 366a469fac
commit 650bcccc58
5 changed files with 44 additions and 50 deletions

View File

@@ -6,11 +6,10 @@ import { CardKind } from "./GameSet";
* 天赋类型枚举,也是触发条件
*/
export enum TriType {
LUP = 1, // 等级升触发
ATK = 2, //普通攻击触发
DMG = 3, // 受伤触发
ATK = 1, // 等级升触发
DMG = 2, //普通攻击触发
ATKED=3,
SKILL = 4, // 技能触发
MAX = 5, // 必杀触发
HPL = 6, // 失去生命值触发
HPA = 7, // 获得生命值触发
INIT = 8, // 初始触发,如:多1个技能
@@ -37,9 +36,9 @@ export enum TalEffet {
C_MSKILL=11, // 必杀技能必暴 次数 叠加 如额外5次 必杀技能必暴
C_ATK=12, // 普工必爆 次数 叠加 如额外5次 普工必爆
C_SKILL=13, // 一般技能必暴 次数 叠加 如额外5次 一般技能必暴
}
export enum TalTarget {
SELF = 1, // 自己触发
ENEMY = 2, // 敌人触发
@@ -58,6 +57,7 @@ export enum TalAttrs {
REVIVE_COUNT=Attrs.REVIVE_COUNT, // 复活次数
WFUNY=Attrs.WFUNY, // 风怒
}
/**
* 天赋配置接口
* 定义一个完整的天赋效果
@@ -75,6 +75,8 @@ export interface ItalConf {
value: number; // 触发的效果值如增加10%攻击力, 触发的技能uuid,增加1个技能uuid
attrs?:TalAttrs //触发的attrs效果的对应attrs
Trigger:number //触发值
Pts:number //添加的天赋点数
CPts:number //消耗的天赋点数
desc: string; // 天赋描述(说明触发条件和效果)
count:number //执行次数,及可以触发的次数
}
@@ -98,43 +100,39 @@ export interface ItalConf {
export const talConf: Record<number, ItalConf> = {
/*** 普通攻击触发 ***/
7001:{uuid:7001,name:"风怒",icon:"7001",kind:CardKind.Atk,triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.WFUNY,vType:BType.RATIO, value:50,attrs:TalAttrs.NON,
desc:"普通攻击3次后, 立即给与目标150%伤害的额外打击"},
Pts:2,CPts:0,desc:"普通攻击3次后, 立即给与目标150%伤害的额外打击"},
7003:{uuid:7003,name:"回血",icon:"7001",kind:CardKind.Atk,triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.SELF,effet:TalEffet.HP,vType:BType.RATIO, value:1,attrs:TalAttrs.NON,
desc:"普通攻击3次后, 会回复1%的生命值"},
Pts:2,CPts:0,desc:"普通攻击3次后, 会回复1%的生命值"},
7004:{uuid:7004,name:"回血(大)",icon:"7001",kind:CardKind.Atk,triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.SELF,effet:TalEffet.HP,vType:BType.RATIO, value:2,attrs:TalAttrs.NON,
desc:"普通攻击5次后, 会回复2%的生命值"},
Pts:2,CPts:0,desc:"普通攻击5次后, 会回复2%的生命值"},
7005:{uuid:7005,name:"冰冻",icon:"7001",kind:CardKind.Atk,triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.BUFF,vType:BType.RATIO, value:100,attrs:TalAttrs.FREEZE_CHANCE,
desc:"普通攻击3次后, 下一次攻击必定冻结目标"},
Pts:2,CPts:0,desc:"普通攻击3次后, 下一次攻击必定冻结目标"},
7006:{uuid:7006,name:"沉默",icon:"7001",kind:CardKind.Atk,triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.BUFF,vType:BType.RATIO, value:100,attrs:TalAttrs.SILENCE_CHANCE,
desc:"普通攻击3次后, 下一次攻击必定沉默目标"},
Pts:2,CPts:0,desc:"普通攻击3次后, 下一次攻击必定沉默目标"},
7007:{uuid:7007,name:"击退",icon:"7001",kind:CardKind.Atk,triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.BUFF,vType:BType.RATIO, value:100,attrs:TalAttrs.BACK_CHANCE,
desc:"普通攻击3次后, 下一次攻击必定击退目标"},
Pts:2,CPts:0,desc:"普通攻击3次后, 下一次攻击必定击退目标"},
7008:{uuid:7008,name:"会心",icon:"7001",kind:CardKind.Atk,triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.SELF,effet:TalEffet.BUFF,vType:BType.RATIO, value:100,attrs:TalAttrs.CRITICAL,
desc:"普通攻击3次后, 下一次攻击必定获得100%的暴击率"},
Pts:2,CPts:0,desc:"普通攻击3次后, 下一次攻击必定获得100%的暴击率"},
7009:{uuid:7009,name:"眩晕",icon:"7001",kind:CardKind.Atk,triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.BUFF,vType:BType.RATIO, value:100,attrs:TalAttrs.STUN_CHANCE,
desc:"普通攻击3次后, 下一次攻击必定获得100%的眩晕率"},
Pts:2,CPts:0,desc:"普通攻击3次后, 下一次攻击必定获得100%的眩晕率"},
7010:{uuid:7010,name:"熟练",icon:"7001",kind:CardKind.Atk,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%"},
Pts:2,CPts:0,desc:"普通攻击10次后, 下次一般技能额外释放1次,伤害100%"},
/*** 受伤触发 ***/
7101:{uuid:7101,name:"反击",icon:"7001",kind:CardKind.Atted,triType:TriType.DMG,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.ATK_DMG,vType:BType.RATIO, value:50,attrs:TalAttrs.NON,
desc:"被攻击3次后, 给于目标50%的伤害"},
7102:{uuid:7102,name:"护盾",icon:"7001",kind:CardKind.Atted,triType:TriType.DMG,Trigger:30,count:1,target:TalTarget.SELF,effet:TalEffet.SHIELD,vType:BType.RATIO, value:20,attrs:TalAttrs.NON,
desc:"被攻击30次后, 获得20%的生命值护盾"},
7103:{uuid:7103,name:"减伤",icon:"7001",kind:CardKind.Atted,triType:TriType.DMG,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.DEF,vType:BType.RATIO, value:50,attrs:TalAttrs.NON,
desc:"被攻击3次后, 下1次伤害减50%"},
7104:{uuid:7104,name:"复苏",icon:"7001",kind:CardKind.Atted,triType:TriType.DMG,Trigger:100,count:1,target:TalTarget.SELF,effet:TalEffet.BUFF,vType:BType.VALUE, value:1,attrs:TalAttrs.REVIVE_COUNT,
desc:"被攻击100次后, 获得1次复活"},
7101:{uuid:7101,name:"反击",icon:"7001",kind:CardKind.Atted,triType:TriType.ATKED,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.ATK_DMG,vType:BType.RATIO, value:50,attrs:TalAttrs.NON,
Pts:2,CPts:0,desc:"被攻击3次后, 给于目标50%的伤害"},
7102:{uuid:7102,name:"护盾",icon:"7001",kind:CardKind.Atted,triType:TriType.ATKED,Trigger:30,count:1,target:TalTarget.SELF,effet:TalEffet.SHIELD,vType:BType.RATIO, value:20,attrs:TalAttrs.NON,
Pts:2,CPts:0,desc:"被攻击30次后, 获得20%的生命值护盾"},
7103:{uuid:7103,name:"减伤",icon:"7001",kind:CardKind.Atted,triType:TriType.ATKED,Trigger:3,count:1,target:TalTarget.ENEMY,effet:TalEffet.DEF,vType:BType.RATIO, value:50,attrs:TalAttrs.NON,
Pts:2,CPts:0,desc:"被攻击3次后, 下1次伤害减50%"},
7104:{uuid:7104,name:"复苏",icon:"7001",kind:CardKind.Atted,triType:TriType.ATKED,Trigger:100,count:1,target:TalTarget.SELF,effet:TalEffet.BUFF,vType:BType.VALUE, value:1,attrs:TalAttrs.REVIVE_COUNT,
Pts:2,CPts:0,desc:"被攻击100次后, 获得1次复活"},
/*** 失去血量触发 ***/
7201:{uuid:7201,name:"背水",icon:"7001",kind:CardKind.Hp,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次普通攻击暴击"},
Pts:2,CPts:0,desc:"每失去50%生命值,获得下10次普通攻击暴击"},
/*** 升级触发 ***/
7301:{uuid:7301,name:"勤勉",icon:"7001",kind:CardKind.Partner,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次技能必暴击"},
7302:{uuid:7302,name:"风怒",icon:"7001",kind:CardKind.Partner,triType:TriType.LUP,Trigger:1,count:1,target:TalTarget.SELF,effet:TalEffet.ATTR,vType:BType.RATIO, value:2,attrs:TalAttrs.WFUNY,
desc:"每升1级,永久增加2%的风怒概率"},
/*** 7400 回血量触发 ***/
/** 7500 一击必杀触发 */

View File

@@ -2,6 +2,8 @@ import { v3 } from "cc"
import { BoxSet, FacSet } from "./GameSet"
import { smc } from "../SingletonModuleComp"
import { BuffConf, SkillRange } from "./SkillSet"
import { Interface } from "readline"
import { TriType } from "./TalSet"
export enum AttrSet {
ATTR_MAX = 85,
@@ -92,6 +94,11 @@ export enum HRegen {
HP=0.5
}
export interface ITalPts {
TriType: TriType; //触发添加天赋点数类型
TriVal: number; //触发添加天赋点需求数值
TalPts: number; //添加天赋点数值
}
/**
* 不同职业升级属性加成配置
* 战士:高血量成长,低攻击成长
@@ -131,6 +138,7 @@ export interface heroInfo {
skills: number[]; // 携带技能ID列表
buff: BuffConf[]; // 自带buff配置通常为空由技能动态添加
tal: number[]; // 天赋ID列表
talPts?: ITalPts[]; // 天赋触发配置
info: string; // 描述文案
}
@@ -151,7 +159,7 @@ export const HeroInfo: Record<number, heroInfo> = {
5001:{uuid:5001,name:"盾战士",icon:"1001",path:"hk1", fac:FacSet.HERO, kind:1,as:1,
type:HType.warrior,lv:1,hp:300,mp:200,def:5,ap:25,speed:120,skills:[6001,6004],
rangeType: SkillRange.Melee,
buff:[],tal:[],info:"盾战士"},
buff:[],tal:[],talPts:[{TriType:TriType.ATK,TriVal:1,TalPts:1}],info:"盾战士"},
5002:{uuid:5002,name:"奥术法师",icon:"1001",path:"hm2", fac:FacSet.HERO, kind:2,as:1,
type:HType.mage,lv:1,hp:150,mp:135,def:0,ap:40,speed:95,skills:[6003,6101],

View File

@@ -0,0 +1,5 @@
天赋系统:
攻击,受攻击,治疗量,伤害量等触发天赋点数,天赋点数可以用于技能伤害加成,触发特殊特殊百分比加成:攻击,防御,生命值,冰冻几率,暴击率等
伤害加成例1技能伤害加成总天赋点数/10
属性加成例2每获得2点天赋点增加5攻击
属性加成例3每获得2点天赋点增加6攻击消耗1点天赋点数

View File

@@ -169,7 +169,6 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
const talComp = casterEntity.get(TalComp);
if (hset === HSSet.atk) talComp.updateCur(TriType.ATK);
if (hset === HSSet.skill) talComp.updateCur(TriType.SKILL);
if (hset === HSSet.max) talComp.updateCur(TriType.MAX);
}
/**********************天赋处理*************************************************************************/
// 根据技能类型执行不同逻辑

View File

@@ -9,6 +9,7 @@ import { BuffConf } from "../common/config/SkillSet";
import { TalAttrs, talConf, TalEffet, TalTarget, TriType} from "../common/config/TalSet";
import { HeroAttrsComp } from "./HeroAttrsComp";
import { HeroViewComp } from "./HeroViewComp";
import { ITalPts } from "../common/config/heroSet";
const { property } = _decorator;
@@ -49,26 +50,13 @@ export class TalComp extends ecs.Comp {
@property({ tooltip: "是否启用调试日志" })
private debugMode: boolean = false;
/** 英雄视图组件引用,运行时获取以避免循环引用 */
private heroView: any = null;
/** 英雄唯一标识符,用于从配置中获取英雄相关信息 */
private heroUuid: number = 0;
/** 天赋集合以天赋ID为键存储所有已获得的天赋 */
Tals: Record<number, TalSlot> = {};
/**
* 组件初始化方法
* @param heroUuid 英雄唯一标识符
*/
TalPts:Record<number,ITalPts> = {};
init(heroUuid: number) {
this.heroUuid = heroUuid;
// 从实体中获取英雄视图组件引用
this.heroView = this.ent.get(HeroViewComp);
// 初始化天赋集合
this.Tals = {};
this.TalPts = {};
// 监听升级事件
oops.message.on(GameEvent.CanUpdateLv, this.onLevelUp, this);
// 监听天赋选择事件
@@ -100,8 +88,6 @@ export class TalComp extends ecs.Comp {
mLogger.log(this.debugMode, 'TalComp', `[TalComp] 监听到升级事件,当前等级: ${args.lv}`);
// 更新升级类型的天赋进度 (默认每次升级触发一次val=1)
this.updateCur(TriType.LUP, 1);
}
/**
@@ -303,8 +289,6 @@ export class TalComp extends ecs.Comp {
oops.message.off(GameEvent.CanUpdateLv, this.onLevelUp, this);
oops.message.off(GameEvent.UseTalentCard, this.onUseTalentCard, this);
this.Tals = {};
this.heroUuid = 0;
this.heroView = null;
}