feat(天赋系统): 重构天赋触发机制并添加天赋点数系统
- 移除升级触发类型(TriType.LUP)及相关逻辑,改为通过英雄配置定义天赋点数获取规则 - 新增天赋点数接口(ITalPts)和配置字段,支持攻击、受击等不同触发条件 - 在天赋配置中添加点数获取(Pts)和消耗(CPts)字段 - 移除必杀技触发类型(TriType.MAX)的处理逻辑 - 优化TalComp组件结构,移除不必要的heroView引用 - 添加天赋系统设计文档(taldev.md)
This commit is contained in:
@@ -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 一击必杀触发 */
|
||||
|
||||
@@ -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],
|
||||
|
||||
5
assets/script/game/common/config/taldev.md
Normal file
5
assets/script/game/common/config/taldev.md
Normal file
@@ -0,0 +1,5 @@
|
||||
天赋系统:
|
||||
攻击,受攻击,治疗量,伤害量等触发天赋点数,天赋点数可以用于技能伤害加成,触发特殊特殊百分比加成:攻击,防御,生命值,冰冻几率,暴击率等
|
||||
伤害加成例1:技能伤害加成(总天赋点数/10)
|
||||
属性加成例2:每获得2点天赋点增加5攻击
|
||||
属性加成例3:每获得2点天赋点增加6攻击,消耗1点天赋点数
|
||||
@@ -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);
|
||||
}
|
||||
/**********************天赋处理*************************************************************************/
|
||||
// 根据技能类型执行不同逻辑
|
||||
|
||||
@@ -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);
|
||||
// 监听天赋选择事件
|
||||
@@ -99,9 +87,7 @@ export class TalComp extends ecs.Comp {
|
||||
// GameEvent.CanUpdateLv 事件参数 { lv: number }
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user