From db300bd30252d501ddbe3b54b71412c8fc43bd4c Mon Sep 17 00:00:00 2001 From: pan Date: Fri, 24 Jul 2026 10:19:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(hero):=20=E6=96=B0=E5=A2=9E=E9=A9=BB?= =?UTF-8?q?=E5=9C=BA=E5=85=89=E7=8E=AF=E7=B3=BB=E7=BB=9F=E4=B8=8E=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 为英雄属性组件添加Field触发类型字段,支持存储驻场光环UUID列表 2. 扩展英雄进化配置,支持覆盖驻场光环配置 3. 优化FieldSkillHelper,优先使用进化后的驻场光环配置 4. 新增占卜师战前强攻限时Buff与援护弓手、占卜师、治愈牧师的6级进化驻场光环配置 5. 补充对应英雄的技能描述与进化逻辑注释 --- assets/script/game/common/config/BuffSet.ts | 19 ++++++++++ assets/script/game/common/config/heroSet.ts | 42 +++++++++++++++++++-- assets/script/game/hero/FieldSkillHelper.ts | 6 ++- assets/script/game/hero/Hero.ts | 3 ++ assets/script/game/hero/HeroAttrsComp.ts | 2 + 5 files changed, 66 insertions(+), 6 deletions(-) diff --git a/assets/script/game/common/config/BuffSet.ts b/assets/script/game/common/config/BuffSet.ts index 328d97e3..fee79023 100644 --- a/assets/script/game/common/config/BuffSet.ts +++ b/assets/script/game/common/config/BuffSet.ts @@ -74,4 +74,23 @@ export const BuffList: Record = { is_control: true, control_kind: 'stun', info: "击晕目标,无法行动", }, + // 占卜师战前攻击强化(限时版,三档成长:+30/5s → +60/7s → +90/10s) + 7111: { + id: 7111, name: "战前强攻", icon: "Stat_Attack_03", + category: BuffCategory.Buff, duration: 5, max_stack: 0, + modifiers: [{ attr: Attrs.ap, op: ModOp.Flat, value: 30 }], + info: "攻击力 +30,持续 5 秒", + }, + 7112: { + id: 7112, name: "战前强攻", icon: "Stat_Attack_03", + category: BuffCategory.Buff, duration: 7, max_stack: 0, + modifiers: [{ attr: Attrs.ap, op: ModOp.Flat, value: 60 }], + info: "攻击力 +60,持续 7 秒", + }, + 7113: { + id: 7113, name: "战前强攻", icon: "Stat_Attack_03", + category: BuffCategory.Buff, duration: 10, max_stack: 0, + modifiers: [{ attr: Attrs.ap, op: ModOp.Flat, value: 90 }], + info: "攻击力 +90,持续 10 秒", + }, }; diff --git a/assets/script/game/common/config/heroSet.ts b/assets/script/game/common/config/heroSet.ts index 7103eacc..0566af72 100644 --- a/assets/script/game/common/config/heroSet.ts +++ b/assets/script/game/common/config/heroSet.ts @@ -196,6 +196,8 @@ export interface HeroEvolve { 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 }[]; + /** 覆盖驻场光环(FieldSkillSet uuid 列表,存活期间全局生效) */ + field?: number[]; revive?: { s_uuid: number; r_num: number; upr: number }; /** 额外属性加成(在等级倍率基础上叠加) */ ap_bonus?: number; @@ -312,7 +314,16 @@ export const HeroInfo: Record = { uuid: 5031, name: "援护弓手", path: "ha1", fac: FacSet.HERO, pool_lv: 1, lv: 1, type: HType.Long, hp: 143, ap: 40, skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal2].cd, ccd: 0 } }, atking: [{ s_uuid: 6401, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 1, ap: 8 } }], - info: "每攻击5次为随机1名队友永久提升攻击力8点" + // 成长主线:AP增益 8→10→12,5级 hit_count 1→2(2英雄环境=全队);6级追加全队攻速光环 + // 注意:evolve.atking 为整体替换且逐级顺序应用,高级别需写完整数组;field 为驻场光环覆盖 + evolve: { + 2: { atking: [{ s_uuid: 6401, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 1, ap: 10 } }] }, + 3: { hp_bonus: 60 }, + 4: { atking: [{ s_uuid: 6401, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 1, ap: 12 } }] }, + 5: { atking: [{ s_uuid: 6401, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 2, ap: 12 } }] }, + 6: { field: [7006] }, + }, + info: "每攻击5次为随机队友永久提升攻击力(8→10→12,5级起2名);6级起全队攻击速度+10%" }, // 5032: { // uuid: 5032, name: "战术弓手", path: "ha2", fac: FacSet.HERO, pool_lv: 3, lv: 1, type: HType.Long, hp: 430, ap: 120, @@ -378,8 +389,17 @@ export const HeroInfo: Record = { 5051: { uuid: 5051, name: "占卜师", path: "hm1", fac: FacSet.HERO, pool_lv: 1, lv: 1, type: HType.Long, hp: 143, ap: 40, skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Mid3].cd, ccd: 0 } }, - fstart: [{ s_uuid: 6401, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 15 } }], - info: "战斗开始时为全队永久提升攻击力15点" + // 战前计时 buff:每波开始全队 AP 限时提升(+30/5s → +60/7s → +90/10s),6级追加暴击驻场光环 + // 通过 overrides.timed_buff_id 切换 BuffList 中的限时 buff 配置,走 buffManager 限时路径 + fstart: [{ s_uuid: 6401, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7111 } }], + evolve: { + 2: { hp_bonus: 80 }, + 3: { fstart: [{ s_uuid: 6401, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7112 } }] }, + 4: { hp_bonus: 80 }, + 5: { fstart: [{ s_uuid: 6401, t_num: 1, overrides: { TGroup: TGroup.Team, timed_buff_id: 7113 } }] }, + 6: { field: [7204] }, + }, + info: "战斗开始时全队攻击力限时提升(+30/5s→+60/7s→+90/10s);6级起全队暴击率+20%(驻场)" }, // 5052: { // uuid: 5052, name: "护盾牧师", path: "hm2", fac: FacSet.HERO, pool_lv: 2, lv: 1, type: HType.Long, hp: 287, ap: 80, @@ -432,7 +452,21 @@ export const HeroInfo: Record = { uuid: 5071, name: "治愈牧师", path: "hh1", fac: FacSet.HERO, pool_lv: 1, lv: 1, type: HType.Long, hp: 143, ap: 40, skills: { 6001: { uuid: 6001, lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal3].cd, ccd: 0 } }, atking: [{ s_uuid: 6302, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 200 } }], - info: "每攻击5次治疗全队200%AP" + // 成长主线:治疗量 200→250→300%,5级 hit_count 1→2(全队);6级追加护盾 atking,攻防一体 + // 注意:evolve.atking 为整体替换且逐级顺序应用,高级别需写完整数组 + evolve: { + 2: { atking: [{ s_uuid: 6302, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 250 } }] }, + 3: { hp_bonus: 80 }, + 4: { atking: [{ s_uuid: 6302, t_num: 5, overrides: { TGroup: TGroup.Team, ap: 300 } }] }, + 5: { atking: [{ s_uuid: 6302, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 2, ap: 300 } }] }, + 6: { + atking: [ + { s_uuid: 6302, t_num: 5, overrides: { TGroup: TGroup.Team, hit_count: 2, ap: 300 } }, + { s_uuid: 6301, t_num: 7, overrides: { TGroup: TGroup.Team, ap: 3 } }, + ] + }, + }, + info: "每攻击5次治疗最缺血队友(200→300%,5级起全队);6级起每攻击7次为全队添加3层护盾" }, // 5072: { // uuid: 5072, name: "小金库", path: "hh2", fac: FacSet.HERO, pool_lv: 2, lv: 1, type: HType.Long, hp: 287, ap: 80, diff --git a/assets/script/game/hero/FieldSkillHelper.ts b/assets/script/game/hero/FieldSkillHelper.ts index 1be84600..2c646e7b 100644 --- a/assets/script/game/hero/FieldSkillHelper.ts +++ b/assets/script/game/hero/FieldSkillHelper.ts @@ -19,12 +19,14 @@ export class FieldSkillHelper { let total = 0; // 1. 统计英雄带来的驻场技能加成 + // 读 model.field(运行时):优先使用 evolve 覆盖后的驻场配置,未升级时回退到 heroInfo 基础配置 ecs.query(ecs.allOf(HeroAttrsComp)).forEach((entity: ecs.Entity) => { const model = entity.get(HeroAttrsComp); if (!model || model.is_dead || model.fac !== FacSet.HERO) return; const heroConfig = HeroInfo[model.hero_uuid]; - if (heroConfig && heroConfig.field) { - for (const skillUuid of heroConfig.field) { + const fields = model.field ?? heroConfig?.field; + if (fields) { + for (const skillUuid of fields) { const skillConfig = FieldSkillSet[skillUuid]; if (skillConfig && skillConfig.type === type) { total += skillConfig.value; diff --git a/assets/script/game/hero/Hero.ts b/assets/script/game/hero/Hero.ts index 53590d48..00a12d33 100644 --- a/assets/script/game/hero/Hero.ts +++ b/assets/script/game/hero/Hero.ts @@ -133,6 +133,7 @@ export class Hero extends ecs.Entity { model.fend = hero.fend; model.atking = hero.atking; model.atked = hero.atked; + model.field = hero.field; model.revive = hero.revive; // 基础属性按等级倍率初始化 @@ -186,6 +187,8 @@ export class Hero extends ecs.Entity { if (evo.dead) model.dead = evo.dead; if (evo.fstart) model.fstart = evo.fstart; if (evo.fend) model.fend = evo.fend; + // 覆盖驻场光环(存活期间全局生效) + if (evo.field) model.field = evo.field; if (evo.revive) model.revive = evo.revive; // 额外属性加成 if (evo.ap_bonus) model.ap += evo.ap_bonus; diff --git a/assets/script/game/hero/HeroAttrsComp.ts b/assets/script/game/hero/HeroAttrsComp.ts index 52ff2f6e..4442f57e 100644 --- a/assets/script/game/hero/HeroAttrsComp.ts +++ b/assets/script/game/hero/HeroAttrsComp.ts @@ -44,6 +44,8 @@ export class HeroAttrsComp extends ecs.Comp { [SkillTriggerType.FEnd]?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[]; [SkillTriggerType.Atking]?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[]; [SkillTriggerType.Atked]?: { s_uuid: number; t_num: number; overrides?: SkillOverrides }[]; + /** 驻场光环(FieldSkillSet uuid 列表,随 evolve 覆盖,存活期间全局生效) */ + [SkillTriggerType.Field]?: number[]; [SkillTriggerType.Revive]?: { s_uuid: number, r_num: number, upr: number }; // ==================== 特殊属性 ====================