refactor(hero): 重构天赋触发机制和属性类型
将天赋触发值从布尔类型改为数值类型以支持更灵活的触发条件 修改天赋配置描述和数值以更准确反映效果 优化天赋触发逻辑,支持同时检查多个天赋 添加天赋触发后的具体效果处理
This commit is contained in:
@@ -80,8 +80,8 @@ 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,value:150,attrs:TalAttrs.NON,
|
7001:{uuid:7001,name:"风怒",triType:TriType.ATK,Trigger:3,target:TalTarget.ENEMY,effet:TalEffet.WFUNY,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,value:50,attrs:TalAttrs.NON,
|
7002:{uuid:7002,name:"溅射",triType:TriType.ATK,Trigger:3,target:TalTarget.ENEMY,effet:TalEffet.SPLASH,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,value:1,attrs:TalAttrs.NON,
|
7003:{uuid:7003,name:"回血",triType:TriType.ATK,Trigger:3,target:TalTarget.SELF,effet:TalEffet.HP,value:1,attrs:TalAttrs.NON,
|
||||||
@@ -98,8 +98,8 @@ export const talConf: Record<number, ItalConf> = {
|
|||||||
desc:"普通攻击3次后, 获得5%的暴击率"},
|
desc:"普通攻击3次后, 获得5%的暴击率"},
|
||||||
7009:{uuid:7009,name:"眩晕",triType:TriType.ATK,Trigger:3,target:TalTarget.ENEMY,effet:TalEffet.BUFF,value:5,attrs:TalAttrs.STUN_CHANCE,
|
7009:{uuid:7009,name:"眩晕",triType:TriType.ATK,Trigger:3,target:TalTarget.ENEMY,effet:TalEffet.BUFF,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,value:2,attrs:TalAttrs.NON,
|
7010:{uuid:7010,name:"熟练",triType:TriType.ATK,Trigger:10,target:TalTarget.SELF,effet:TalEffet.D_SKILL,value:0,attrs:TalAttrs.NON,
|
||||||
desc:"普通攻击10次后, 获得下2次一般技能触发2次"},
|
desc:"普通攻击10次后, 下次一般技能额外释放1次,伤害100%"},
|
||||||
|
|
||||||
/*** 受伤触发 ***/
|
/*** 受伤触发 ***/
|
||||||
7101:{uuid:7101,name:"反击",triType:TriType.DMG,Trigger:3,target:TalTarget.ENEMY,effet:TalEffet.DMG,value:50,attrs:TalAttrs.NON,
|
7101:{uuid:7101,name:"反击",triType:TriType.DMG,Trigger:3,target:TalTarget.ENEMY,effet:TalEffet.DMG,value:50,attrs:TalAttrs.NON,
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { HeroSkillsComp } from "./HeroSkills";
|
|||||||
import { talConf, TalAttrs } from "../common/config/TalSet";
|
import { talConf, TalAttrs } from "../common/config/TalSet";
|
||||||
|
|
||||||
interface talTrigger{
|
interface talTrigger{
|
||||||
value:boolean
|
value:number
|
||||||
count:number
|
count:number
|
||||||
}
|
}
|
||||||
@ecs.register('HeroAttrs')
|
@ecs.register('HeroAttrs')
|
||||||
@@ -36,8 +36,8 @@ export class HeroAttrsComp extends ecs.Comp {
|
|||||||
Attrs: any = []; // 最终属性数组(经过Buff计算后)
|
Attrs: any = []; // 最终属性数组(经过Buff计算后)
|
||||||
NeAttrs: any = []; // 负面状态数组
|
NeAttrs: any = []; // 负面状态数组
|
||||||
//=====================天赋触发标签=====================
|
//=====================天赋触发标签=====================
|
||||||
tal_DSill:talTrigger={value:false,count:0}
|
tal_DSill:talTrigger={value:0,count:0}
|
||||||
tal_WFuny:talTrigger={value:false,count:0}
|
tal_WFuny:talTrigger={value:0,count:0}
|
||||||
/** 天赋buff数组 - 触发过期,数量可叠加 */
|
/** 天赋buff数组 - 触发过期,数量可叠加 */
|
||||||
BUFFS_TAL: Record<number, Array<{tal:number,value: number, BType: BType,count:number}>> = {};
|
BUFFS_TAL: Record<number, Array<{tal:number,value: number, BType: BType,count:number}>> = {};
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||||||
import { TalAttrs, talConf, TalEffet, TalTarget, TriType} from "../common/config/TalSet";
|
import { TalAttrs, talConf, TalEffet, TalTarget, TriType} from "../common/config/TalSet";
|
||||||
|
import { HeroAttrsComp } from "./HeroAttrsComp";
|
||||||
import { HeroViewComp } from "./HeroViewComp";
|
import { HeroViewComp } from "./HeroViewComp";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -56,30 +57,30 @@ export class TalComp extends ecs.Comp {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 为英雄添加一个新天赋
|
* 为英雄添加一个新天赋
|
||||||
* @param talUuid 要添加的天赋ID
|
* @param uuid 要添加的天赋ID
|
||||||
*
|
*
|
||||||
* 添加流程:
|
* 添加流程:
|
||||||
* 1. 检查天赋是否已存在
|
* 1. 检查天赋是否已存在
|
||||||
* 2. 检查天赋配置是否存在
|
* 2. 检查天赋配置是否存在
|
||||||
* 3. 创建并初始化天赋数据
|
* 3. 创建并初始化天赋数据
|
||||||
*/
|
*/
|
||||||
addTal(talUuid: number) {
|
addTal(uuid: number) {
|
||||||
// 检查天赋是否已存在
|
// 检查天赋是否已存在
|
||||||
if (this.Tals[talUuid]) {
|
if (this.Tals[uuid]) {
|
||||||
console.error(`[TalComp]天赋已存在,天赋ID:${talUuid}`);
|
console.error(`[TalComp]天赋已存在,天赋ID:${uuid}`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取天赋配置
|
// 获取天赋配置
|
||||||
const tConf = talConf[talUuid];
|
const tConf = talConf[uuid];
|
||||||
if (!tConf) {
|
if (!tConf) {
|
||||||
console.error(`[TalComp]天赋配置不存在,天赋ID:${talUuid}`);
|
console.error(`[TalComp]天赋配置不存在,天赋ID:${uuid}`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 创建并初始化天赋数据
|
// 创建并初始化天赋数据
|
||||||
this.Tals[talUuid] = {
|
this.Tals[uuid] = {
|
||||||
uuid: talUuid,
|
uuid: uuid,
|
||||||
name: tConf.name,
|
name: tConf.name,
|
||||||
triType: tConf.triType,
|
triType: tConf.triType,
|
||||||
target: tConf.target,
|
target: tConf.target,
|
||||||
@@ -116,35 +117,35 @@ export class TalComp extends ecs.Comp {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新天赋的效果数值
|
* 更新天赋的效果数值
|
||||||
* @param talUuid 天赋ID
|
* @param uuid 天赋ID
|
||||||
* @param val 要增减的数值
|
* @param val 要增减的数值
|
||||||
*
|
*
|
||||||
* 功能:
|
* 功能:
|
||||||
* - 用于调整天赋的实际效果数值
|
* - 用于调整天赋的实际效果数值
|
||||||
* - 可通过正负数来增加或减少效果
|
* - 可通过正负数来增加或减少效果
|
||||||
*/
|
*/
|
||||||
updateVal(talUuid: number, val: number) {
|
updateVal(uuid: number, val: number) {
|
||||||
// 检查天赋是否存在
|
// 检查天赋是否存在
|
||||||
if (!this.Tals[talUuid]) {
|
if (!this.Tals[uuid]) {
|
||||||
console.error(`[TalComp]天赋不存在,天赋ID:${talUuid}`);
|
console.error(`[TalComp]天赋不存在,天赋ID:${uuid}`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更新天赋效果数值
|
// 更新天赋效果数值
|
||||||
this.Tals[talUuid].value_add += val;
|
this.Tals[uuid].value_add += val;
|
||||||
}
|
}
|
||||||
|
|
||||||
updateTrigger(talUuid: number, val: number) {
|
updateTrigger(uuid: number, val: number) {
|
||||||
// 检查天赋是否存在
|
// 检查天赋是否存在
|
||||||
if (!this.Tals[talUuid]) {
|
if (!this.Tals[uuid]) {
|
||||||
console.error(`[TalComp]天赋不存在,天赋ID:${talUuid}`);
|
console.error(`[TalComp]天赋不存在,天赋ID:${uuid}`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更新天赋触发阈值
|
// 更新天赋触发阈值
|
||||||
this.Tals[talUuid].Trigger_add += val;
|
this.Tals[uuid].Trigger_add += val;
|
||||||
if (this.Tals[talUuid].Trigger-this.Tals[talUuid].Trigger_add <= 1) {
|
if (this.Tals[uuid].Trigger-this.Tals[uuid].Trigger_add <= 1) {
|
||||||
this.Tals[talUuid].Trigger_add = this.Tals[talUuid].Trigger-1;
|
this.Tals[uuid].Trigger_add = this.Tals[uuid].Trigger-1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@@ -161,14 +162,42 @@ export class TalComp extends ecs.Comp {
|
|||||||
for (let uuid in this.Tals) {
|
for (let uuid in this.Tals) {
|
||||||
const talent = this.Tals[uuid];
|
const talent = this.Tals[uuid];
|
||||||
|
|
||||||
// 找到第一个匹配类型的天赋并更新
|
// 找到所有匹配类型的天赋并更新
|
||||||
if (talent.triType == triType) {
|
if (talent.triType == triType) {
|
||||||
talent.cur += val;
|
talent.cur += val;
|
||||||
break; // 只更新第一个匹配的天赋
|
this.checkTrigger(talent.uuid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
checkTrigger(uuid:number){
|
||||||
|
const talent = this.Tals[uuid];
|
||||||
|
if (talent.cur >= (talent.Trigger - talent.Trigger_add)) { // 修复触发条件,累积值达到或超过触发阈值时触发
|
||||||
|
console.log(`[TalComp]天赋触发,天赋ID:${uuid}`);
|
||||||
|
this.doTriggerTal(talent.uuid);
|
||||||
|
// 重置累积值
|
||||||
|
talent.cur = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
doTriggerTal(uuid: number) {
|
||||||
|
// 检查天赋是否存在
|
||||||
|
if (!this.Tals[uuid]) {
|
||||||
|
console.error(`[TalComp]天赋不存在,天赋ID:${uuid}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const talent = this.Tals[uuid];
|
||||||
|
const heroAttrs=this.ent.get(HeroAttrsComp);
|
||||||
|
switch(talent.effet){
|
||||||
|
case TalEffet.WFUNY:
|
||||||
|
heroAttrs.tal_WFuny.count += 1;
|
||||||
|
heroAttrs.tal_WFuny.value = talent.value+talent.value_add;
|
||||||
|
break;
|
||||||
|
case TalEffet.D_SKILL:
|
||||||
|
heroAttrs.tal_DSill.count += 1;
|
||||||
|
heroAttrs.tal_DSill.value = talent.value+talent.value_add;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 重置组件状态
|
* 重置组件状态
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user