From 421f31fecfaf00992967ed2dc993c3e31448b098 Mon Sep 17 00:00:00 2001 From: pan Date: Thu, 3 Sep 2026 10:56:21 +0800 Subject: [PATCH] =?UTF-8?q?feat(hero&config):=20=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E8=8B=B1=E9=9B=84=E9=85=8D=E7=BD=AE=E4=B8=8E=E6=8A=A4=E7=9B=BE?= =?UTF-8?q?=E6=8A=80=E8=83=BD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增英雄配置表及元数据,更新配置文档说明,修复护盾技能计算逻辑,调整技能基础参数与描述 --- assets/script/game/common/config/SkillSet.ts | 16 ++-- .../script/game/common/config/英雄设计指引.md | 27 ++++--- .../script/game/common/config/英雄设计表.csv | 79 +++++++++++++++++++ .../game/common/config/英雄设计表.csv.meta | 11 +++ assets/script/game/hero/SCastSystem.ts | 3 +- 5 files changed, 114 insertions(+), 22 deletions(-) create mode 100644 assets/script/game/common/config/英雄设计表.csv create mode 100644 assets/script/game/common/config/英雄设计表.csv.meta diff --git a/assets/script/game/common/config/SkillSet.ts b/assets/script/game/common/config/SkillSet.ts index 9f3608c3..f571857c 100644 --- a/assets/script/game/common/config/SkillSet.ts +++ b/assets/script/game/common/config/SkillSet.ts @@ -320,7 +320,7 @@ export const SkillSet: Record = { 6202: { uuid: 6202, name: "大毒气", sp_name: "maxm4", icon: "Stat_Mana", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "max1", DTType: DTType.single, ap: 100, hit_count: 2, hitcd: 0.3, speed: 720, with: 90, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.remote, - RType: RType.linear, EType: EType.collision, bezier_start_y: 20, bezier_mid_y: 140, bezier_arc: 1.05,info: "一个大毒气弹", + RType: RType.linear, EType: EType.collision, bezier_start_y: 20, bezier_mid_y: 140, bezier_arc: 1.05, info: "一个大毒气弹", }, 6203: { uuid: 6203, name: "大能量波", sp_name: "maxm5", icon: "Stat_Mana", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "max1", @@ -330,14 +330,14 @@ export const SkillSet: Record = { 6204: { uuid: 6204, name: "大毒气弹", sp_name: "maxm6", icon: "Stat_Mana", TGroup: TGroup.Enemy, readyAnm: "", endAnm: "", act: "max1", DTType: DTType.single, ap: 100, hit_count: 2, hitcd: 0.3, speed: 720, with: 90, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.remote, - RType: RType.linear, EType: EType.collision, bezier_start_y: 20, bezier_mid_y: 140, bezier_arc: 1.05,info: "一个大毒气弹", + RType: RType.linear, EType: EType.collision, bezier_start_y: 20, bezier_mid_y: 140, bezier_arc: 1.05, info: "一个大毒气弹", }, //============================= ====== 辅助技能 回合技能 ====== ========================== 6301: { uuid: 6301, name: "护盾", sp_name: "buff_wind", icon: "Stat_Defense", TGroup: TGroup.Self, readyAnm: "up_blue", endAnm: "", act: "atk", - DTType: DTType.single, kind: SkillKind.Shield, ap: 3, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support, - RType: RType.fixed, EType: EType.animationEnd, info: "护盾动画", + DTType: DTType.single, kind: SkillKind.Shield, ap: 30, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support, + RType: RType.fixed, EType: EType.animationEnd, info: "获得施法者最大生命30%的护盾", }, 6302: { uuid: 6302, name: "治疗", sp_name: "buff_wind", icon: "Stat_Hp_01", TGroup: TGroup.Team, readyAnm: "up_green", endAnm: "", act: "atk", @@ -372,8 +372,8 @@ export const SkillSet: Record = { }, 6406: { uuid: 6406, name: "击退强化", sp_name: "buff_wind", icon: "Stat_Stun_01", TGroup: TGroup.Team, readyAnm: "up_blue", endAnm: "", act: "atk", - DTType: DTType.single, kind: SkillKind.Support, ap: 1, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support, - RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.knockback_chance, timed_buff_id: 7013, info: "全体友方击退距离限时提升, 持续5秒", + DTType: DTType.single, kind: SkillKind.Support, ap: 10, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support, + RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.knockback_chance, info: "全体友方击退距离永久提升10%", }, 6407: { uuid: 6407, name: "距推强化", sp_name: "buff_wind", icon: "Stat_Stun_01", TGroup: TGroup.Team, readyAnm: "up_blue", endAnm: "", act: "atk", @@ -395,8 +395,8 @@ export const SkillSet: Record = { */ 6410: { uuid: 6410, name: "冰冻强化", sp_name: "buff_wind", icon: "Stat_Freeze", TGroup: TGroup.Team, readyAnm: "up_blue", endAnm: "", act: "atk", - DTType: DTType.single, kind: SkillKind.Support, ap: 1, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support, - RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.freeze_chance, timed_buff_id: 7021, info: "全体友方冰冻概率限时提升, 持续5秒", + DTType: DTType.single, kind: SkillKind.Support, ap: 5, hit_count: 1, hitcd: 0.2, speed: 720, with: 0, ready: 0.2, EAnm: 0, DAnm: "", IType: IType.support, + RType: RType.fixed, EType: EType.animationEnd, buff_type: Attrs.freeze_chance, info: "全体友方冰冻概率永久提升5%", }, 6411: { uuid: 6411, name: "穿透伤害强化", sp_name: "buff_wind", icon: "Stat_Tripleshot", TGroup: TGroup.Team, readyAnm: "up_ap", endAnm: "", act: "atk", diff --git a/assets/script/game/common/config/英雄设计指引.md b/assets/script/game/common/config/英雄设计指引.md index 67dd6c9d..8a1e6029 100644 --- a/assets/script/game/common/config/英雄设计指引.md +++ b/assets/script/game/common/config/英雄设计指引.md @@ -22,7 +22,6 @@ > - **support / mage → 远程**(普攻 6009\~6012,大招 6200 / 6201 / 6202\~6204) > > 辅助技能(6301 护盾 / 6302 治疗 / 6412 防御强化 / 6501 复活)不受形态约束,任意形态可用;作大招(skills[1])时同样按 lv1/lv9/lv16 走 `lv_entries` 分档强化。 - ## 说明模板 ``` @@ -33,25 +32,26 @@ rarity:4 // 品质 1~5,仅决定 lv1 初始基础属性(AP/HP/D ap:tank+5 // 职业基础值 + 手动偏移 hp:tank-10 def:tank+10 -skill[0]:普攻(6001 飞剑,ap100) +skill[0]_lv1:普攻(6001 飞剑,ap100) +skill[0]_lv2:普攻强化档(lv_entries 覆写 ap/弹道/附加效果) skill[1]_lv1:大招初始档 skill[1]_lv9:大招强化档(lv_entries) skill[1]_lv16:大招终段强化档(lv_entries) -atking[0]_lv6:攻击触发(t_num 模拟概率,1=每次 3≈33% 4≈25%) -atked[0]_lv6:无 -fstart[0]_lv6:无 -dead[0]_lv6:无 -field[0]_lv6:驻场光环(无品质门槛,所有英雄均可配置) -revive[0]_lv1:无(与 skills[1] 互斥二选一;配置时与大招同走 lv1/lv9/lv16 三档) -revive[0]_lv9:无 +atking[0]_lv4:攻击触发(t_num 模拟概率,1=每次 3≈33% 4≈25%) +atked[0]_lv4:无 +fstart[0]_lv4:无 +dead[0]_lv4:无 +field[0]_lv4:驻场光环(无品质门槛,所有英雄均可配置) +revive[0]_lv1:无(与 skills[1] 互斥二选一;配置时与大招同走 lv1/lv8/lv16 三档) +revive[0]_lv8:无 revive[0]_lv16:无 简化说明:原作缺失机制的替代方案(如有) ``` **通用约束**: -- 等级节奏:lv1 激活 skills[0]/skills[1];lv6 解锁 atking/atked/fstart/dead/field 触发技能(触发类技能统一 lv6 激活,各触发槽最多 1 个,无品质门槛);大招(skills[1])lv9/lv16 走 `lv_entries` 分档提升;lv12 按职业对单项基础属性 +50%(基数取 lv11 当前等级有效值:坦克→def、战士/辅助→hp、刺客/射手/法师→ap) -- **revive 与大招互斥**:`revive[0]` 与 `skills[1]` 只能二选一;配置 revive 的英雄不走大招体系,revive 采用与大招相同的 3 级成长机制(lv1/lv9/lv16 走 `lv_entries` 分档强化) +- 等级节奏:lv1 激活 skills[0]/skills[1];lv2 解锁 skills[0] 普攻强化档(`lv_entries` 覆写 ap/弹道/附加效果);lv4 解锁 atking/atked/fstart/dead/field 触发技能(触发类技能统一 lv4 激活,各触发槽最多 1 个,无品质门槛);大招(skills[1])lv9/lv16 走 `lv_entries` 分档提升;lv12 按职业对单项基础属性 +50%(基数取 lv11 当前等级有效值:坦克→def、战士/辅助→hp、刺客/射手/法师→ap) +- **revive 与大招互斥**:`revive[0]` 与 `skills[1]` 只能二选一;配置 revive 的英雄不走大招体系,revive 采用与大招相同的 3 级成长机制(lv1/lv8/lv16 走 `lv_entries` 分档强化) - **品质(rarity)仅影响 lv1 初始基础属性**:相邻品质 AP/HP/DEF 相差 5%(系数 1+0.05×(rarity-1)),不再决定 uuid 段位、光环/技能解锁、属性补偿等任何机制;其余配置参数完全一致 - 能力只能从能力池(BuffList 7001\~7024 / FieldSkillSet 7001\~7020 / SkillSet 底座)引用 + `overrides` 数值覆盖,**禁止新增同义底座** @@ -76,11 +76,12 @@ revive[0]_lv16:无 ## 配置检查清单 - [ ] `skills` 引用的 uuid 在 SkillSet 中存在,`overrides.ap` 显式写出 +- [ ] 普攻(`skills[0]`)lv1 激活,lv2 走 `lv_entries` 覆写强化(ap/弹道/附加效果),不改动 SkillSet 底座 - [ ] 大招(`skills[1]`)覆写 `summon_count`:lv1=1、lv9=1、lv16=2,通过 `lv_entries` 逐级覆写,不改动 SkillSet 底座 - [ ] `timed_buff_id` 指向 BuffList 已存在条目(能力池 2.1/2.2 内) - [ ] debuff/buff 只通过 `overrides` 注入,未改动 SkillSet/BuffList 底座 -- [ ] `atking`/`atked`/`fstart`/`dead`/`field` 按 s\_uuid 分组、按 lv 升序,触发类技能统一 lv6 激活(无品质门槛,field 光环任意品质可配) -- [ ] `revive[0]` 与 `skills[1]` 二选一(互斥);配置 revive 时按 lv1/lv9/lv16 走 `lv_entries` 3 级成长,与大招同机制 +- [ ] `atking`/`atked`/`fstart`/`dead`/`field` 按 s\_uuid 分组、按 lv 升序,触发类技能统一 lv4 激活(无品质门槛,field 光环任意品质可配) +- [ ] `revive[0]` 与 `skills[1]` 二选一(互斥);配置 revive 时按 lv1/lv8/lv16 走 `lv_entries` 3 级成长,与大招同机制 - [ ] lv12:按职业注入单项属性 +50%(坦克 def、战士/辅助 hp、刺客/射手/法师 ap),基数取 lv11 有效值 - [ ] 品质(rarity)仅影响 lv1 初始 AP/HP/DEF(相邻差 5%,运行时品质系数统一乘,配置保持裸值),不影响 uuid 段位/光环/技能解锁/属性补偿 - [ ] `t_num` 概率模拟符合预期(1=每次,3≈33%,4≈25%) diff --git a/assets/script/game/common/config/英雄设计表.csv b/assets/script/game/common/config/英雄设计表.csv new file mode 100644 index 00000000..473d496c --- /dev/null +++ b/assets/script/game/common/config/英雄设计表.csv @@ -0,0 +1,79 @@ +字段,5005,5007,5008,5001,5002,5003,5004,5006 +英雄名称,叠甲骑士,微醺战神,眩晕暴击哥,紫电魔女,刀刀暴击,格挡反杀,冻住不谢,光明奶爸 +简化说明,自身护盾+全体护盾,击退压场+易伤放大;复刻酒仙,高爆发+击晕收割;复刻齐天大圣,群体击退/麻痹压场;复刻深渊女王,暴击/暴伤双光环乘区;复刻剑圣,入场先手+受击格挡;复刻剑豪,冰冻链控制;复刻巫妖王,全体治疗续航+自身护盾 +rarity,5,3,5,4,5,4,4,4 +类型,tank,warrior,warrior,mage,assassin,warrior,mage,support +形态,近战,近战,近战,远程,近战,近战,远程,远程 +ap,tank+0,warrior+20,warrior+20,mage+10,assassin+30,warrior+5,mage+5,support+10 +hp,tank+20,warrior+5,warrior+5,mage-5,warrior+0,warrior+10,mage+0,support+10 +def,tank+10,warrior+5,warrior+5,mage+0,warrior+0,warrior+5,mage+5,support+10 +skill[0],6004 攻击(ap100;慢速1.20s),6004 攻击(ap100;慢速1.20s),6004 攻击(ap100;慢速1.20s),6010 紫魔球(ap100;bck30;慢速1.20s),6004 攻击(ap100;快速;crt30),6004 攻击(ap100;慢速1.20s),6009 蓝魔球(ap100;慢速1.20s),6004 攻击(ap100;慢速1.20s) +skill[1]_lv1,6301 魔法盾(ap:30;summon1):获得生命最大值30%的护盾,6101 气斩(ap150;summon1附加易伤7002),6104 开山斧(ap300;stun100 击晕),6200 火焰喷射(ap250;bck50),6100 光闪(ap150;summon1),6103 闪电斩(ap150;para40 麻痹;summon1),6203 能量波(ap150;summon1),6302 治疗(团队回复ap300%;summon1) +skill[1]_lv8,ap:60;summon1:获得生命最大值60%的护盾,ap150;summon1;附加易伤7002buff_value20,ap450;stun100 击晕;,6200 火焰喷射(ap350;bck60),ap250,ap150;para40;summon1;附加减攻7006,ap150;frz15 冰冻;summon1,团队回复ap400%;summon1 +skill[1]_lv16,ap:120;summon1:获得生命最大值120%的护盾,ap180;bck60;summon2;易伤buff_value40,ap450;stun100 击晕;;summon2,6200 火焰喷射(ap450;bck70),ap350,ap180;para50;summon2;减攻buff_value-15,ap180;frz30;hit_count8;summon2,团队回复ap450%;summon1 +atking[0]_lv4,无,6004 奋力一击(t_num3;ap300;慢速1.20s):每三次攻击后立即打击敌人,对敌人造成300%伤害,无,无,无,无,6009 霜寒之触(t_num3;冰冻7003), +atked[0]_lv4,6301 魔法盾(ap:10;team,summon1):全队获得本英雄生命最大值10%的护盾,无,无,无,无,6301 罗生门(t_num4;自身格挡2次),无,6301 魔法盾(ap:30;summon1):获得生命最大值30%的护盾 +fstart[0]_lv4,无,无,无,无,无,6200 三十六烦恼凤(t_num1;ap500 入场剑气),无,无 +dead[0]_lv4,无,无,无,无,无,无,无,无 +field[0]_lv4,无,无,7005 暴伤光环0.25(大圣神威),7002 攻击光环0.15(深渊威压),7004 暴击光环0.12(剑刃风暴)+7005 暴伤光环0.20(斩魂利刃),7018 击晕光环value1(剑心通明),7003 击晕光环0.10(寒霜震慑),无 +revive[0]_lv1,无,无,无,无,无,无,无,无 +revive[0]_lv8,无,无,无,无,无,无,无,无 +revive[0]_lv16,无,无,无,无,无,无,无,无 +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, +,,,,,,,, diff --git a/assets/script/game/common/config/英雄设计表.csv.meta b/assets/script/game/common/config/英雄设计表.csv.meta new file mode 100644 index 00000000..308be4f5 --- /dev/null +++ b/assets/script/game/common/config/英雄设计表.csv.meta @@ -0,0 +1,11 @@ +{ + "ver": "1.0.1", + "importer": "text", + "imported": true, + "uuid": "1e59dbdf-2e95-4e95-bef5-61b959770d1b", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": {} +} diff --git a/assets/script/game/hero/SCastSystem.ts b/assets/script/game/hero/SCastSystem.ts index 6f304f93..259954dd 100644 --- a/assets/script/game/hero/SCastSystem.ts +++ b/assets/script/game/hero/SCastSystem.ts @@ -537,7 +537,8 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate smc.vmdata.scores.heal_total += addHp; } } else if (kind === SkillKind.Shield && sAp !== 0) { - const addShield = Math.max(0, Math.floor(sAp)); + // 护盾值 = ap% × 施法者最终最大生命(getFinalHpMax 含驻场光环与计时 buff 加成) + const addShield = Math.max(0, Math.floor(_cAttrsComp.getFinalHpMax() * sAp / 100)); model.add_shield(addShield); }