refactor(game): 重构天赋系统,移除MP效果并添加属性永久加成

- 删除HeroAttrEvent.ts文件及相关MP效果处理
- 将TalEffet.STATS重命名为TalEffet.ATTR以更准确描述功能
- 调整部分天赋配置数值和触发条件
- 新增风怒属性永久加成功能
This commit is contained in:
panw
2026-01-04 15:59:33 +08:00
parent 190cbc4281
commit 7d503c2f79
6 changed files with 38 additions and 84 deletions

View File

@@ -0,0 +1,9 @@
{
"ver": "0.0.0",
"importer": "*",
"imported": false,
"uuid": "eaa91e98-d58c-40cb-88ee-f7122960909e",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "7f5508cb-d643-4082-b216-891c685366d3",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -25,18 +25,18 @@ export enum TalEffet {
THORNS=14, //反伤 百分比 次数+反伤加成如额外5次 反伤-20%
///////////////////////////////////////////////////////////////////////
HP=3, // 回血 百分比 直接触发回血20%
MP=4, //回蓝 百分比 直接触发回蓝20%
SHIELD=9, // 护盾 直接触发获得20%的生命值护盾
////////////////////////////////////////////////////////////////////////
BUFF = 5, // 数值叠加 触发后清零: 暴击率,闪避率等,触发后效果取消
////////////////////////////////////////////////////////////////////////////////
STATS=6, // 状态 待定
ATTR=6, // 属性 永久添加
WFUNY=7, // 风怒 次数 叠加 如额外5次 风怒
D_SKILL=8, //两次技能 次数 叠加如额外5次 两次技能
C_MSKILL=11, // 必杀技能必暴 次数 叠加 如额外5次 必杀技能必暴
C_ATK=12, // 普工必爆 次数 叠加 如额外5次 普工必爆
C_SKILL=13, // 一般技能必暴 次数 叠加 如额外5次 一般技能必暴
}
export enum TalTarget {
@@ -52,6 +52,10 @@ export enum TalAttrs {
SILENCE_CHANCE=Attrs.SILENCE_CHANCE, // 沉默概率
CRITICAL=Attrs.CRITICAL, // 暴击率
AP=Attrs.AP, // 攻击力
HP_MAX=Attrs.HP_MAX, // 最大生命值
THORNS=Attrs.THORNS, //反伤 百分比
REVIVE_COUNT=Attrs.REVIVE_COUNT, // 复活次数
WFUNY=Attrs.WFUNY, // 风怒
}
/**
* 天赋配置接口
@@ -93,10 +97,10 @@ export const talConf: Record<number, ItalConf> = {
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%伤害的额外打击"},
7003:{uuid:7003,name:"回血",triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.SELF,effet:TalEffet.HP,vType:BType.RATIO, value:10,attrs:TalAttrs.NON,
desc:"普通攻击3次后, 会回复10%的生命值"},
7004:{uuid:7004,name:"回",triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.SELF,effet:TalEffet.MP,vType:BType.RATIO, value:10,attrs:TalAttrs.NON,
desc:"普通攻击3次后, 会回复10%的蓝值"},
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次后, 会回复1%的生命值"},
7004:{uuid:7004,name:"回血(大)",triType:TriType.ATK,Trigger:3,count:1,target:TalTarget.SELF,effet:TalEffet.HP,vType:BType.RATIO, value:2,attrs:TalAttrs.NON,
desc:"普通攻击5次后, 会回复2%的生命值"},
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%的冻结率"},
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,
@@ -113,11 +117,12 @@ export const talConf: Record<number, ItalConf> = {
/*** 受伤触发 ***/
7101:{uuid:7101,name:"反击",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:"护盾",triType:TriType.DMG,Trigger:3,count:1,target:TalTarget.SELF,effet:TalEffet.SHIELD,vType:BType.RATIO, value:20,attrs:TalAttrs.NON,
desc:"被攻击3次后, 获得20%的生命值护盾"},
7102:{uuid:7102,name:"护盾",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:"减伤",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:"反伤",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次复活"},
/*** 失去血量触发 ***/
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,
@@ -125,8 +130,9 @@ export const talConf: Record<number, ItalConf> = {
/*** 升级触发 ***/
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次技能暴击"},
7302:{uuid:7302,name:"风怒",triType:TriType.LUP,Trigger:1,count:1,target:TalTarget.SELF,effet:TalEffet.ATTR,vType:BType.RATIO, value:2,attrs:TalAttrs.WFUNY,
desc:"每升1级,永久增加2%的风怒概率"},
};
// ========== 工具函数 ==========

View File

@@ -1,20 +0,0 @@
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
import { Attrs } from "../common/config/HeroAttrs";
export interface AttrEvent {
Attr: Attrs;
Value:number;
}
@ecs.register('HeroAttrEvent')
export class HeroAttrEvent extends ecs.Comp {
AttrEvents:AttrEvent[] = [];
addAttrEvent(event:AttrEvent){
this.AttrEvents.push(event);
}
reset() {
this.AttrEvents = [];
}
}

View File

@@ -1,50 +0,0 @@
import { Timer } from "db://oops-framework/core/common/timer/Timer";
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
import { smc } from "../common/SingletonModuleComp";
import { Attrs } from "../common/config/HeroAttrs";
import { HeroUpSet } from "../common/config/heroSet";
import { HeroSkillsComp } from "./HeroSkills";
import { HeroAttrsComp } from "./HeroAttrsComp";
import { HeroAttrEvent } from "./HeroAttrEvent";
/**
* ==================== 英雄属性更新系统 ====================
*
* 按照 ECS 设计理念:
* - SystemHeroAttrEventSystem处理属性更新事件
*
* 系统职责:
* 1. 处理当角色收到attr变更事件时更新角色属性并处理动画展示
*/
@ecs.register('HeroAttrEventSystem')
export class HeroAttrEventSystem extends ecs.ComblockSystem
implements ecs.ISystemUpdate, ecs.IEntityEnterSystem {
filter(): ecs.IMatcher {
return ecs.allOf(HeroAttrsComp,HeroAttrEvent);
}
entityEnter(e: ecs.Entity): void {
}
update(e: ecs.Entity): void {
if(!smc.mission.play ) return;
if(smc.mission.pause) return
const model = e.get(HeroAttrsComp);
if (!model || model.is_dead) return;
const event = e.get(HeroAttrEvent);
if (!event) return;
// 移除事件组件(事件处理完成)
}
/**
* 启用调试模式(调试时使用)
*/
enableDebug() {
}
/**
* 禁用调试模式(正式运行)
*/
disableDebug() {
}
}

View File

@@ -214,9 +214,6 @@ export class TalComp extends ecs.Comp {
case TalEffet.HP:
heroAttrs.add_hp(talent.value + talent.value_add,talent.vType == BType.VALUE);
break;
case TalEffet.MP:
heroAttrs.add_mp(talent.value + talent.value_add,talent.vType == BType.VALUE);
break;
case TalEffet.WFUNY:
heroAttrs.addCountTal(TalEffet.WFUNY, talent.value + talent.value_add);
break;
@@ -235,6 +232,9 @@ export class TalComp extends ecs.Comp {
case TalEffet.BUFF:
heroAttrs.addValueTal(talent.uuid, talent.attrs, talent.vType, talent.value + talent.value_add);
break;
case TalEffet.ATTR:
heroAttrs.addValueTal(talent.uuid, talent.attrs, talent.vType, talent.value + talent.value_add);
break;
}
}
/**