diff --git a/assets/script/game/common/config/heroSet.ts b/assets/script/game/common/config/heroSet.ts index dee968a1..6facbddf 100644 --- a/assets/script/game/common/config/heroSet.ts +++ b/assets/script/game/common/config/heroSet.ts @@ -147,6 +147,7 @@ export interface heroInfo { dis?: number; // 攻击距离(像素) speed?: number; // 移动速度(像素/秒) skills: Record ; // 携带技能ID列表 + evolve?: Record; // 等级进化配置,key=等级(2,3,...) info: string; // 描述文案 } /** @@ -159,6 +160,24 @@ export interface HSkillInfo { ccd:number; // 占位当前cd,用于cd计时 overrides?: SkillOverrides; // 角色专属参数覆盖 } +/** + * 英雄等级进化配置 + * 定义英雄在某等级时技能/属性的变化 + */ +export interface HeroEvolve { + /** 替换普攻技能(清除旧技能,添加新技能) */ + skill?: { s_uuid: number; cd?: number; overrides?: SkillOverrides }; + /** 覆盖触发技能(完全替换该类型的触发配置) */ + atking?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[]; + atked?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[]; + dead?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[]; + fstart?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[]; + fend?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[]; + revive?: { s_uuid: number; r_num: number; upr: number }; + /** 额外属性加成(在等级倍率基础上叠加) */ + ap_bonus?: number; + hp_bonus?: number; +} /* *=============英雄配置列表================ * 职业触发规则 (v3) @@ -217,6 +236,11 @@ export const HeroInfo: Record = { hp:450,ap:25, skills:{6001:{uuid:6001,lv:1,cd:AtkSpeedSet[AtkSpeedLv.VerySlow1].cd,ccd:0}}, atked:[{s_uuid:6301,t_num:2}], + evolve:{ + 2:{atked:[{s_uuid:6301,t_num:1,overrides:{TGroup:TGroup.Team,ap:3,hit_count:3}}]}, + 3:{atked:[{s_uuid:6301,t_num:1,overrides:{TGroup:TGroup.Team,ap:5,hit_count:5}}], + dead:[{s_uuid:6402,t_num:1,overrides:{ap:40}}],ap_bonus:20,hp_bonus:200}, + }, info:"高血量坦克,受击2次自动加护盾"}, 5008:{uuid:5008,name:"守护骑士",path:"hk2", fac:FacSet.HERO,pool_lv:3,lv:1,type:HType.Melee, @@ -250,6 +274,12 @@ export const HeroInfo: Record = { skills:{6007:{uuid:6007,lv:1,cd:AtkSpeedSet[AtkSpeedLv.Slow1].cd,ccd:0}}, field:[6405], atking:[{s_uuid:6405,t_num:2}], + evolve:{ + 2:{atking:[{s_uuid:6105,t_num:3,overrides:{ap:100,frz:20}}]}, + 3:{skill:{s_uuid:6105,overrides:{frz:15,hit_count:6}}, + atking:[{s_uuid:6105,t_num:1,overrides:{ap:150,frz:35,hit_count:8}}], + ap_bonus:30}, + }, info:"驻场提供冰冻光环,每2次普攻叠加冰冻概率"}, 5107:{uuid:5107,name:"霜寒法师",path:"hm5", fac:FacSet.HERO,pool_lv:2,lv:1,type:HType.Long, @@ -282,6 +312,11 @@ export const HeroInfo: Record = { hp:120,ap:40, skills:{6004:{uuid:6004,lv:1,cd:AtkSpeedSet[AtkSpeedLv.Mid1].cd,ccd:0}}, atking:[{s_uuid:6302,t_num:2}], + evolve:{ + 2:{atking:[{s_uuid:6302,t_num:1,overrides:{ap:250}}]}, + 3:{atking:[{s_uuid:6302,t_num:1,overrides:{ap:400}}], + revive:{s_uuid:6501,r_num:1,upr:0.5},hp_bonus:100}, + }, info:"每2次普攻后治疗全队,恢复攻击力300%的生命值"}, 5304:{uuid:5304,name:"神圣医师",path:"hh2", fac:FacSet.HERO,pool_lv:2,lv:1,type:HType.Long, diff --git a/assets/script/game/hero/Hero.ts b/assets/script/game/hero/Hero.ts index 94fc9f85..220eb505 100644 --- a/assets/script/game/hero/Hero.ts +++ b/assets/script/game/hero/Hero.ts @@ -159,6 +159,37 @@ export class Hero extends ecs.Entity { // 最终技能等级 = 初始技能等级 + 英雄等级增量,且下限为 0 model.skills[skill.uuid] = { ...skill, lv: Math.max(0,skill.lv + hero_lv - 2), ccd: 0 }; } + + // 应用等级进化配置(从 lv2 开始逐级覆盖) + if (hero.evolve) { + for (let elv = 2; elv <= hero_lv; elv++) { + const evo = hero.evolve[elv]; + if (!evo) continue; + // 替换普攻技能 + if (evo.skill) { + const oldSkill = Object.values(model.skills)[0]; + model.skills = {}; + model.skills[evo.skill.s_uuid] = { + uuid: evo.skill.s_uuid, + lv: Math.max(0, 1 + hero_lv - 2), + cd: evo.skill.cd ?? oldSkill?.cd ?? 1, + ccd: 0, + overrides: evo.skill.overrides, + }; + } + // 覆盖触发技能 + if (evo.atking) model.atking = evo.atking; + if (evo.atked) model.atked = evo.atked; + if (evo.dead) model.dead = evo.dead; + if (evo.fstart) model.fstart = evo.fstart; + if (evo.fend) model.fend = evo.fend; + if (evo.revive) model.revive = evo.revive; + // 额外属性加成 + if (evo.ap_bonus) model.ap += evo.ap_bonus; + if (evo.hp_bonus) { model.hp += evo.hp_bonus; model.hp_max += evo.hp_bonus; } + } + } + // 缓存技能射程等派生数据,减少战斗帧内重复计算 model.updateSkillDistanceCache();