5 Commits

Author SHA1 Message Date
94d5aa8920 refactor(hero): 重构天赋触发机制和属性类型
将天赋触发值从布尔类型改为数值类型以支持更灵活的触发条件
修改天赋配置描述和数值以更准确反映效果
优化天赋触发逻辑,支持同时检查多个天赋
添加天赋触发后的具体效果处理
2025-11-19 16:51:36 +08:00
bcaa377cf6 refactor(英雄技能): 重构天赋触发逻辑和技能施放系统
- 将HeroAttrsComp中的isDSill和isWFuny改为talTrigger结构体
- 移除TalComp中不再使用的checkTriggers和checkIsTrigger方法
- 优化SACastSystem中的技能施放逻辑,分离天赋处理代码块
- 为Skill.load方法添加damage参数
- 重命名executeCast返回变量为castSucess以提高可读性
2025-11-19 16:03:19 +08:00
e577ed976c feat(技能系统): 添加目标数量配置并优化目标选择逻辑
- 在SkillSet枚举中添加t_num字段用于配置技能目标数量
- 修改sTargets方法,根据技能配置中的t_num确定最大目标数量
- 重构findNearbyEnemies方法,实现基于距离和位置偏差的目标排序
- 添加对技能范围配置的灵活处理,支持range和dis字段
2025-11-19 15:39:57 +08:00
209d550e87 fix(SACastSystem): 修复技能目标选择逻辑并添加默认值
当sDamageTargets未找到目标时,回退到使用sDefaultTargets获取默认目标
同时为createSkill方法的isWFuny参数添加默认值false
2025-11-19 15:37:34 +08:00
5935b20094 refactor(game): 统一游戏地平线高度并优化技能目标选择
将GameSet中的GAME_LINE从0调整为120,并在英雄和怪物位置配置中使用该常量
简化SACastSystem中的目标选择逻辑,移除未使用的治疗和BUFF目标选择方法
使用BoxSet.GAME_LINE作为技能目标的默认Y坐标
2025-11-19 14:59:50 +08:00
8 changed files with 142 additions and 199 deletions

View File

@@ -14,19 +14,11 @@ export enum BoxSet {
DEFAULT = 1,
MONSTER = 2,
HERO = 4,
// MONSTER_SKILL = 8,
// HERO_SKILL = 16,
// PLAYER=32,
// BOSS=64,
// BOX_WIDTH = 64,
// BOX_HEIGHT = 64,
//地图边界
LETF_END = -420,
RIGHT_END = 420,
//游戏地平线
GAME_LINE = 0,
GAME_LINE = 120,
//攻击距离
}

View File

@@ -107,6 +107,7 @@ export enum EType {
- ap: 攻击力百分比
- cd: 冷却时间
- hit_num: 范围攻击 伤害敌人数量
- t_num: 目标数量
- hit: 穿刺个数
- hitcd: 持续伤害的伤害间隔
- speed: 移动速度

View File

@@ -80,8 +80,8 @@ export interface 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,
desc:"普通攻击3次后, 给于目标150%伤害"},
7001:{uuid:7001,name:"风怒",triType:TriType.ATK,Trigger:3,target:TalTarget.ENEMY,effet:TalEffet.WFUNY,value:50,attrs:TalAttrs.NON,
desc:"普通攻击3次后, 立即给与目标150%伤害的额外打击"},
7002:{uuid:7002,name:"溅射",triType:TriType.ATK,Trigger:3,target:TalTarget.ENEMY,effet:TalEffet.SPLASH,value:50,attrs:TalAttrs.NON,
desc:"普通攻击3次后, 会对目标100码内的敌人造成30%伤害"},
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%的暴击率"},
7009:{uuid:7009,name:"眩晕",triType:TriType.ATK,Trigger:3,target:TalTarget.ENEMY,effet:TalEffet.BUFF,value:5,attrs:TalAttrs.STUN_CHANCE,
desc:"普通攻击3次后, 获得5%的眩晕率"},
7010:{uuid:7010,name:"熟练",triType:TriType.ATK,Trigger:10,target:TalTarget.SELF,effet:TalEffet.D_SKILL,value:2,attrs:TalAttrs.NON,
desc:"普通攻击10次后, 获得下2次一般技能触发2次"},
7010:{uuid:7010,name:"熟练",triType:TriType.ATK,Trigger:10,target:TalTarget.SELF,effet:TalEffet.D_SKILL,value:0,attrs:TalAttrs.NON,
desc:"普通攻击10次后, 次一般技能额外释放1次,伤害100%"},
/*** 受伤触发 ***/
7101:{uuid:7101,name:"反击",triType:TriType.DMG,Trigger:3,target:TalTarget.ENEMY,effet:TalEffet.DMG,value:50,attrs:TalAttrs.NON,

View File

@@ -1,5 +1,5 @@
import { v3 } from "cc"
import { FacSet } from "./GameSet"
import { BoxSet, FacSet } from "./GameSet"
import { smc } from "../SingletonModuleComp"
import { BuffConf } from "./SkillSet"
@@ -46,23 +46,23 @@ export const getMonList = ()=>{
}
export const HeroPos={
0:{pos:v3(-240,120,0)},
1:{pos:v3(0,120,0)},
2:{pos:v3(0,120,0)},
0:{pos:v3(-240,BoxSet.GAME_LINE,0)},
1:{pos:v3(0,BoxSet.GAME_LINE,0)},
2:{pos:v3(0,BoxSet.GAME_LINE,0)},
}
export const MonSet = {
0:{pos:v3(240,130,0)},
1:{pos:v3(240,110,0)},
2:{pos:v3(300,130,0)},
3:{pos:v3(300,110,0)},
4:{pos:v3(320,130,0)},
5:{pos:v3(320,110,0)},
6:{pos:v3(360,130,0)},
7:{pos:v3(360,110,0)},
8:{pos:v3(400,130,0)},
9:{pos:v3(400,110,0)},
10:{pos:v3(440,130,0)},
11:{pos:v3(440,110,0)},
0:{pos:v3(240,BoxSet.GAME_LINE+10,0)},
1:{pos:v3(240,BoxSet.GAME_LINE-10,0)},
2:{pos:v3(300,BoxSet.GAME_LINE+10,0)},
3:{pos:v3(300,BoxSet.GAME_LINE-10,0)},
4:{pos:v3(320,BoxSet.GAME_LINE+10,0)},
5:{pos:v3(320,BoxSet.GAME_LINE-10,0)},
6:{pos:v3(360,BoxSet.GAME_LINE+10,0)},
7:{pos:v3(360,BoxSet.GAME_LINE-10,0)},
8:{pos:v3(400,BoxSet.GAME_LINE+10,0)},
9:{pos:v3(400,BoxSet.GAME_LINE-10,0)},
10:{pos:v3(440,BoxSet.GAME_LINE+10,0)},
11:{pos:v3(440,BoxSet.GAME_LINE-10,0)},
}
export enum MonStart {

View File

@@ -6,7 +6,7 @@ import { HeroSkillsComp } from "./HeroSkills";
import { talConf, TalAttrs } from "../common/config/TalSet";
interface talTrigger{
isTrigger:boolean
value:number
count:number
}
@ecs.register('HeroAttrs')
@@ -36,8 +36,8 @@ export class HeroAttrsComp extends ecs.Comp {
Attrs: any = []; // 最终属性数组经过Buff计算后
NeAttrs: any = []; // 负面状态数组
//=====================天赋触发标签=====================
isDSill:number
isWFuny:number
tal_DSill:talTrigger={value:0,count:0}
tal_WFuny:talTrigger={value:0,count:0}
/** 天赋buff数组 - 触发过期,数量可叠加 */
BUFFS_TAL: Record<number, Array<{tal:number,value: number, BType: BType,count:number}>> = {};

View File

@@ -8,6 +8,7 @@ import { Skill } from "../skill/Skill";
import { smc } from "../common/SingletonModuleComp";
import { TalComp } from "./TalComp";
import { TalEffet, TriType } from "../common/config/TalSet";
import { BoxSet } from "../common/config/GameSet";
/**
* ==================== 自动施法系统 ====================
@@ -76,13 +77,13 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
if (!this.checkCastConditions(skills, heroAttrs, skill.s_uuid)) return false
// 4. 执行施法
const ok = this.executeCast(e, skill.s_uuid, heroView,hset);
const castSucess = this.executeCast(e, skill.s_uuid, heroView,hset);
// 5. 扣除资源和重置CD
if (ok) {
if (castSucess) {
heroAttrs.mp -= skill.cost;
skills.resetCD(skill.s_uuid);
}
return ok;
return castSucess;
}
public manualCast(e: ecs.Entity, s_uuid: number): boolean {
if (!e) return false
@@ -133,8 +134,8 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
*/
private executeCast(casterEntity: ecs.Entity, s_uuid: number, heroView: HeroViewComp,hset:HSSet): boolean {
const heroAttrs=casterEntity.get(HeroAttrsComp)
let isDSill=heroAttrs.isDSill > 0
let isWFuny=heroAttrs.isWFuny > 0
let isDSill=heroAttrs.tal_DSill.count > 0
let isWFuny=heroAttrs.tal_WFuny.count > 0
const config = SkillSet[s_uuid];
if (!config) {
console.error("[SACastSystem] 技能配置不存在:", s_uuid);
@@ -143,16 +144,16 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
// 1. 播放施法动画
heroView.playSkillEffect(s_uuid);
/**********************天赋处理*************************************************************************/
// 2. 更新攻击类型的天赋触发值
if(casterEntity.has(TalComp)){
const talComp = casterEntity.get(TalComp);
if (hset === HSSet.atk) talComp.updateCur(TriType.ATK);
if (hset != HSSet.atk) talComp.updateCur(TriType.SKILL);
}
/**********************天赋处理*************************************************************************/
// 获取目标位置
let targets = this.sTargets(heroView);
let targets = this.sTargets(heroView, s_uuid);
if (targets.length === 0) {
console.warn("[SACastSystem] 没有找到有效目标");
return false;
@@ -160,28 +161,29 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
// 2. 延迟创建技能实体(等待动画)
const delay = 0.3
heroView.scheduleOnce(() => {
//风怒wfuny 只针对 普通攻击起效
if (hset === HSSet.atk&&isWFuny){
this.createSkill(s_uuid, heroView,targets,isWFuny);
heroAttrs.isWFuny --
}else{
this.createSkill(s_uuid, heroView,targets,false);
}
this.createSkill(s_uuid, heroView,targets);
}, delay);
if(isDSill){
targets = this.sTargets(heroView);
//风怒wfuny 只针对 普通攻击起效
if (hset === HSSet.atk&&isWFuny){
heroView.playSkillEffect(s_uuid);
//需要再添加 风怒动画
this.createSkill(s_uuid, heroView,targets);
heroAttrs.tal_WFuny.count --
}
// 双技能 只针对 技能起效
if(hset === HSSet.skill&&isDSill){
targets = this.sTargets(heroView, s_uuid);
if (targets.length === 0) {
console.warn("[SACastSystem] 没有找到有效目标");
return false;
}
heroAttrs.isDSill --
heroView.playSkillEffect(s_uuid);
//需要再添加 双技能动画
heroView.scheduleOnce(() => {
this.createSkill(s_uuid, heroView,targets,isWFuny);
isWFuny=false
this.createSkill(s_uuid, heroView,targets);
}, delay);
heroAttrs.tal_DSill.count --
}
@@ -192,7 +194,7 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
/**
* 创建技能实体
*/
private createSkill(s_uuid: number, caster: HeroViewComp,targets,isWFuny:boolean) {
private createSkill(s_uuid: number, caster: HeroViewComp,targets:Vec3[]=[],damage:number=0) {
// 检查节点有效性
if (!caster.node || !caster.node.isValid) {
console.warn("[SACastSystem] 施法者节点无效");
@@ -217,26 +219,23 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
const targetPos = targets[0]; // 使用第一个目标位置
// console.log(`[SACastSystem]: ${s_uuid}, 起始位置: ${startPos}, 目标位置: ${targetPos}`);
// 加载技能实体(包括预制体、组件初始化等)
skill.load(startPos, parent, s_uuid, targetPos, caster);
skill.load(startPos, parent, s_uuid, targetPos, caster,damage);
}
/**
* 选择目标位置
*/
private sTargets(caster: HeroViewComp): Vec3[] {
// 简化版:选择最前方的敌人
const targets: Vec3[] = [];
// 这里可以调用 SkillConComp 的目标选择逻辑
// 暂时返回默认位置
if (caster == null) return targets;
if (caster.ent == null) return targets;
private sTargets(caster: HeroViewComp, s_uuid: number): Vec3[] {
const heroAttrs = caster.ent.get(HeroAttrsComp);
const fac = heroAttrs?.fac ?? 0;
const defaultX = fac === 0 ? 400 : -400;
targets.push(v3(defaultX, 0, 0));
if (!heroAttrs) return [];
const config = SkillSet[s_uuid];
if (!config) return this.sDefaultTargets(caster, heroAttrs.fac);
const maxTargets = Math.max(1, Number((config as any).t_num ?? 1));
const targets = this.sDamageTargets(caster, config, maxTargets);
if (targets.length === 0) {
targets.push(...this.sDefaultTargets(caster, heroAttrs.fac));
}
return targets;
}
@@ -248,8 +247,8 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
const heroAttrs = caster.ent.get(HeroAttrsComp);
if (!heroAttrs) return targets;
// 寻找最近的敌人
const enemyPositions = this.findNearbyEnemies(caster, heroAttrs.fac, config.range || 300);
const range = Number((config as any).range ?? config.dis ?? 300);
const enemyPositions = this.findNearbyEnemies(caster, heroAttrs.fac, range);
// 选择最多maxTargets个目标
for (let i = 0; i < Math.min(maxTargets, enemyPositions.length); i++) {
@@ -264,82 +263,49 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
return targets;
}
/**
* 选择治疗技能目标
*/
private sHealTargets(caster: HeroViewComp, config: any, maxTargets: number): Vec3[] {
const targets: Vec3[] = [];
const heroAttrs = caster.ent.get(HeroAttrsComp);
if (!heroAttrs) return targets;
// 寻找血量最低的友军
const allyPositions = this.findLowHealthAllies(caster, heroAttrs.fac, config.range || 200);
for (let i = 0; i < Math.min(maxTargets, allyPositions.length); i++) {
targets.push(allyPositions[i]);
}
// 如果没有找到友军,治疗自己
if (targets.length === 0 && caster.node) {
targets.push(caster.node.position.clone());
}
return targets;
}
/**
* 选择BUFF技能目标
*/
private sBuffTargets(caster: HeroViewComp, config: any, maxTargets: number): Vec3[] {
// BUFF技能通常施放在自己或友军身上
return this.sHealTargets(caster, config, maxTargets);
}
/**
* 选择DEBUFF技能目标
*/
private sDebuffTargets(caster: HeroViewComp, config: any, maxTargets: number): Vec3[] {
// DEBUFF技能通常施放在敌人身上
return this.sDamageTargets(caster, config, maxTargets);
}
/**
* 选择默认目标
*/
private sDefaultTargets(caster: HeroViewComp, faction: number): Vec3[] {
private sDefaultTargets(caster: HeroViewComp, fac: number): Vec3[] {
const targets: Vec3[] = [];
const defaultX = faction === 0 ? 400 : -400;
targets.push(v3(defaultX, 0, 0));
const defaultX = fac === 0 ? 400 : -400;
targets.push(v3(defaultX, BoxSet.GAME_LINE, 1));
return targets;
}
/**
* 查找附近的敌人
*/
private findNearbyEnemies(caster: HeroViewComp, faction: number, range: number): Vec3[] {
// 简化实现实际应该查询ECS中的敌方实体
private findNearbyEnemies(caster: HeroViewComp, fac: number, range: number): Vec3[] {
const enemies: Vec3[] = [];
// 模拟敌人位置
const enemyX = faction === 0 ? 300 : -300;
enemies.push(v3(enemyX, 0, 0));
enemies.push(v3(enemyX + 50, 20, 0));
if (!caster || !caster.node) return enemies;
const currentPos = caster.node.position;
const results: { pos: Vec3; dist: number; laneBias: number }[] = [];
ecs.query(ecs.allOf(HeroAttrsComp, HeroViewComp)).some(e => {
const model = e.get(HeroAttrsComp);
const view = e.get(HeroViewComp);
if (!model || !view || !view.node) return false;
if (model.is_dead) return false;
if (model.fac === fac) return false;
const pos = view.node.position;
const dist = Math.abs(currentPos.x - pos.x);
if (dist <= range) {
const laneBias = Math.abs(currentPos.y - pos.y);
results.push({ pos: pos.clone(), dist, laneBias });
}
return false;
});
results.sort((a, b) => {
if (a.laneBias !== b.laneBias) return a.laneBias - b.laneBias;
return a.dist - b.dist;
});
for (const r of results) enemies.push(r.pos);
return enemies;
}
/**
* 查找血量低的友军
*/
private findLowHealthAllies(caster: HeroViewComp, faction: number, range: number): Vec3[] {
// 简化实现实际应该查询ECS中的友方实体并按血量排序
const allies: Vec3[] = [];
// 如果自己血量低,优先治疗自己
return allies;
}
/**
* 检查技能攻击范围内是否有敌人

View File

@@ -1,5 +1,6 @@
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
import { TalAttrs, talConf, TalEffet, TalTarget, TriType} from "../common/config/TalSet";
import { HeroAttrsComp } from "./HeroAttrsComp";
import { HeroViewComp } from "./HeroViewComp";
/**
@@ -56,30 +57,30 @@ export class TalComp extends ecs.Comp {
/**
* 为英雄添加一个新天赋
* @param talUuid 要添加的天赋ID
* @param uuid 要添加的天赋ID
*
* 添加流程:
* 1. 检查天赋是否已存在
* 2. 检查天赋配置是否存在
* 3. 创建并初始化天赋数据
*/
addTal(talUuid: number) {
addTal(uuid: number) {
// 检查天赋是否已存在
if (this.Tals[talUuid]) {
console.error(`[TalComp]天赋已存在,天赋ID:${talUuid}`);
if (this.Tals[uuid]) {
console.error(`[TalComp]天赋已存在,天赋ID:${uuid}`);
return;
}
// 获取天赋配置
const tConf = talConf[talUuid];
const tConf = talConf[uuid];
if (!tConf) {
console.error(`[TalComp]天赋配置不存在,天赋ID:${talUuid}`);
console.error(`[TalComp]天赋配置不存在,天赋ID:${uuid}`);
return;
}
// 创建并初始化天赋数据
this.Tals[talUuid] = {
uuid: talUuid,
this.Tals[uuid] = {
uuid: uuid,
name: tConf.name,
triType: tConf.triType,
target: tConf.target,
@@ -96,39 +97,6 @@ export class TalComp extends ecs.Comp {
checkTal() {
return Object.keys(this.Tals).length > 0;
}
/**
* 检查并触发指定类型的天赋
* @param triType 要检查的天赋触发类型
* @returns 触发的天赋对象集合若没有触发则返回false
*
* 检查逻辑:
* 1. 遍历所有同类型天赋
* 2. 检查累积值是否达到触发条件
* 3. 触发后重置累积值
* 4. 收集并返回所有触发的天赋
*/
checkTriggers(effet: TalEffet) {
// 存储所有触发的天赋
let Triggers: Record<string, TalSlot> = {};
// 遍历所有天赋
for (let uuid in this.Tals) {
const talent = this.Tals[uuid];
// 匹配天赋类型
if (talent.effet == effet) {
// 修复触发条件逻辑:累积值达到或超过触发阈值时触发
// 原逻辑中 `talent.Trigger-talent.Trigger` 总是为0导致任何累积值都能触发
if (talent.cur >= (talent.Trigger - talent.Trigger_add)) { // 修复触发条件,累积值达到或超过触发阈值时触发
console.log(`[TalComp]天赋触发,天赋ID:${uuid}`);
// 重置累积值
talent.cur = 0;
// 添加到触发列表
Triggers[uuid] = talent;
}
}
}
// 判断是否有天赋被触发
return Triggers;
}
getTriggers() {
// 存储所有触发的天赋
let Triggers: Record<string, TalSlot> = {};
@@ -146,50 +114,38 @@ export class TalComp extends ecs.Comp {
// 判断是否有天赋被触发
return Triggers;
}
checkIsTrigger() {
let res = {
isDSill:false,
isWFuny:false,
}
for(let uuid in this.Tals){
let trigger=this.Tals[uuid]
if(trigger.effet==TalEffet.WFUNY) res.isWFuny=true
if(trigger.effet==TalEffet.D_SKILL) res.isDSill=true
}
return res
}
/**
* 更新天赋的效果数值
* @param talUuid 天赋ID
* @param uuid 天赋ID
* @param val 要增减的数值
*
* 功能:
* - 用于调整天赋的实际效果数值
* - 可通过正负数来增加或减少效果
*/
updateVal(talUuid: number, val: number) {
updateVal(uuid: number, val: number) {
// 检查天赋是否存在
if (!this.Tals[talUuid]) {
console.error(`[TalComp]天赋不存在,天赋ID:${talUuid}`);
if (!this.Tals[uuid]) {
console.error(`[TalComp]天赋不存在,天赋ID:${uuid}`);
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]) {
console.error(`[TalComp]天赋不存在,天赋ID:${talUuid}`);
if (!this.Tals[uuid]) {
console.error(`[TalComp]天赋不存在,天赋ID:${uuid}`);
return;
}
// 更新天赋触发阈值
this.Tals[talUuid].Trigger_add += val;
if (this.Tals[talUuid].Trigger-this.Tals[talUuid].Trigger_add <= 1) {
this.Tals[talUuid].Trigger_add = this.Tals[talUuid].Trigger-1;
this.Tals[uuid].Trigger_add += val;
if (this.Tals[uuid].Trigger-this.Tals[uuid].Trigger_add <= 1) {
this.Tals[uuid].Trigger_add = this.Tals[uuid].Trigger-1;
}
}
/**
@@ -206,14 +162,42 @@ export class TalComp extends ecs.Comp {
for (let uuid in this.Tals) {
const talent = this.Tals[uuid];
// 找到第一个匹配类型的天赋并更新
// 找到所有匹配类型的天赋并更新
if (talent.triType == triType) {
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;
}
}
/**
* 重置组件状态
*

View File

@@ -29,7 +29,7 @@ export class Skill extends ecs.Entity {
this.addComponents<SMoveDataComp>(SMoveDataComp);
}
load(startPos: Vec3, parent: Node, s_uuid: number, targetPos: Vec3,
caster:HeroViewComp) {
caster:HeroViewComp,damage:number=0) {
const config = SkillSet[s_uuid];
if (!config) {