Files
pixelheros/assets/script/Design3.md
panw 9d17707c3b docs(设计文档): 补充天赋系统与英雄属性的边界定义
明确属性型与机制型天赋的区别,建立配置规范:
1. 属性型效果必须使用 Attrs 作为 Key
2. 机制型效果需使用独立枚举 Mechanic
3. 新增配置校验规则避免误用
2025-12-31 09:30:11 +08:00

154 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 技能系统优化建议Design3
目标:在尽量少改代码的前提下,把技能的“可配置性、可扩展性、可组合性”拉起来,让新增技能与 build 更容易产出差异。
## 一、先修复会直接抹平 build 的关键问题(优先级最高)
1) 攻速/技速对 CD 生效
- 问题HeroSkills.resetCD 先按 AS/SS 计算 cd但随后又覆盖回 cd_max导致 AS/SS 永远不影响技能循环。
- 结果:攻速流、技速流、触发流的 build 直接被抹平。
2) 统一百分比/概率单位体系
- 现状:
- 概率判定使用 0100checkChance
- add_hp/add_mp 的百分比逻辑按 01value * HP_MAX
- 配置层TDLevelOptions、TalSet同时出现 0.14 表示 14% 的写法。
- 建议:所有“概率/百分比”统一用 0100 的“百分比点数”,显示与逻辑一致。
3) 天赋 count 配置生效 + 天赋 key 统一
- 问题:
- **Count 容易失效**:如果 `TalComp.addTal` 中把 `count` 写死为 `1`,配置表 `talConf.count` 就会被忽略。例如“下 5 次暴击”的天赋会退化为“下 1 次暴击”。
- 校验点:`this.Tals[uuid].count` 必须来自 `tConf.count`,而不是常量。
- **Key 混用导致逻辑断裂**
- 写入方:`TalComp` 使用 `TalEffet` 枚举值写入(如 `TalEffet.DMG_RED = 10`)。
- 读取方:`HeroAtkSystem` 使用 `Attrs` 枚举值读取(如 `Attrs.DMG_RED = 24`)。
- 结果:天赋效果写入了错误的 Key如 Key 10 对应 `Attrs.AP`),导致真正的伤害减免逻辑(读 Key 24读不到数据天赋完全失效。
- 建议:
- 废弃 `TalEffet` 中的 Key 定义,统一使用 `Attrs` 枚举作为 Key。
-`TalComp.addTal` 中读取 `tConf.count` 写入 `talent.count`,并保证所有“次数型天赋”的消耗端也使用同一套 Key。
补充TalSet 与 HeroAttrs 的“可一一对应”边界(避免后续继续混淆)
- 结论:可以建立一一对应,但必须先把“键域”拆开。
- 重要澄清:**“有条件触发”不等于“机制型”**。
- `TriType`/`Trigger` 只决定“什么时候触发”;
- “属性型/机制型”决定“触发后往哪里写数据、怎么被消耗”。
- **属性型效果(可一一对应)**:所有本质是“修改某个战斗属性”的天赋,统一用 `Attrs` 作为唯一 Key。
- 例:减伤 -> `Attrs.DMG_RED`,反伤 -> `Attrs.THORNS`,风怒倍率/风怒触发相关如果要做成属性,也应落到 `Attrs.WFUNY`
- 这一类天赋的表现形式建议只允许数值型VALUE或百分比型RATIO的叠加/消耗。
- **机制型效果(不可强行一一对应)**:本质是“改变行为/流程”的天赋,不要硬塞进 `Attrs`,而应该走独立的机制 Key。
-下次技能额外释放D_SKILL、下 N 次普攻必暴C_ATK、下 N 次技能必暴C_SKILL。这些不是“暴击率+X%”,而是“保证命中事件改写”,语义不同。
- 强行映射到 `Attrs.CRITICAL` 会造成策划误配:玩家以为是概率加成,但实际是保底机制,体验会断层。
- 推荐的设计规范(给策划与程序统一语言):
- **字段含义固定化**
- `effet` 只表达“这是属性型还是机制型”。
- `key` 才是具体作用目标:属性型 `key = Attrs.*`;机制型 `key = Mechanic.*`(独立枚举,值域不与 Attrs 重叠)。
- **配置校验规则**
- 只要是属性型天赋:必须能在 `HeroAttrs.ts` 找到同名或同义的 `Attrs`;找不到就不允许配置。
- 只要是机制型天赋:必须有对应的消耗点(例如攻击/技能系统里明确消耗一次),否则 count 只会累加成“无效库存”。
- 现状提醒:`TalAttrs` 的确已经把一部分属性(冻结/眩晕/击退/沉默/暴击等)映射到 `Attrs`,但这只覆盖了 `BUFF` 这类“属性叠加”分支;计数型效果如果仍用 `TalEffet` 作为 Key就会再次出现写入/读取不一致。
## 二、把 SkillSet 变成“少字段但强表达”的可配置系统
当前 SkillConfig 字段很多但真正稳定生效的只有少数ap/map/DType/RType/EType/speed/dis/hit/cd/cost/sp_name
建议把技能配置分成两层:
- 核心战斗字段(必须生效):
- 伤害ap/map + DType
- 弹道RType + speed + dis
- 命中hit穿透次数
- 生命周期EType建议只保留 animationEnd/collision 两类,其他先不让配)
- 扩展字段(等系统补齐后开放):
- 多目标t_num/hit_num
- DOThitcd + timeEnd
- buff/debuffbuffs/neAttrs + chance
- 前摇/结束动画ready/EAnm/DAnm
做法:短期不改字段也可以,但在设计上约束“哪些字段可用、哪些字段暂不承诺”。
## 三、用“技能变体SkillID 替换)”快速放大组合数(最划算)
你现在每个英雄主动技能数量少(技能+大招),想提高 build 兴趣,不要一口气做几十个新技能。
建议:每个技能做 24 个“配置变体”,通过替换 s_uuid 实现。
示例:
- 火球(基础) -> 爆裂火球(碰撞盒更大) -> 穿透火球hit 更高) -> 集束火球(低伤多发)
- 风刃(基础) -> 远程风刃dis 更长) -> 快速风刃speed 更高hit 较低) -> 重刃map 更高speed 更低)
收益:
- 不依赖 t_num/hit_num/buffs/neAttrs 等未落地字段。
- 组合数近似按“技能变体数 × 天赋组合 × 强化路径”指数增长。
## 四、把天赋从“加数值”升级为“改机制”(触发器 + 处理器)
现状TriType 很全,但实际只在 ATK/SKILL/MAX 更新触发DMG/HPL/LUP 等缺来源。
建议的最小升级:
1) 先把触发源补齐:
- DMG受伤时更新
- LUP升级时更新
- HPL/HPA血量变化达到阈值更新
- DEAD击杀/死亡时更新
2) 天赋效果以“机制改造”为主:
- 下一次技能额外释放一次
- 下一次必暴/必定击退
- 技能变体替换(把 s_uuid 换成强化版本)
- 元素转化(把 DType 从 ATK 改成 FIRE 等,形成元素 build
这样即使每局只拿 4 个天赋,组合也会很丰富。
## 五、给技能增加“关键词Tag”让天赋可泛化中期目标
建议新增 tags概念层
- Projectile / Melee / AoE / Beam
- Element: Fire/Ice/Wind/Phys
- Utility: Control/Sustain/Burst/Clear
天赋用 tags 做筛选:
- “所有 Projectile 分裂 +1”
- “所有 Fire 技能命中后额外一次伤害(或改成更大碰撞体)”
- “所有 AoE 范围 +20%”
收益一个天赋能作用多个技能build 会自然爆炸。
## 六、让技能表现更稳定的工程建议(减少体验噪音)
1) 明确技能销毁策略
- 推荐只支持:
- animationEnd动画结束销毁
- collision碰撞触发销毁或 hit 次数耗尽销毁)
2) 统一命中次数规则
- 只保留一个概念pierce命中次数上限
- 技能用 hit 表达基础穿透,角色属性用 PUNCTURE 叠加。
3) 技能范围命中逻辑选择一种实现并固定
- 方案A完全靠碰撞体推荐少代码
- 方案B施法阶段选目标t_num/hit_num但必须补齐对应系统否则不要给策划配。
## 七、推荐落地顺序(两周内能看到 build 明显变丰富)
1) 修复CD 计算、单位体系、天赋 count/key
2) 新增:每个主技能 23 个变体SkillID 替换)
3) 补齐DMG/LUP/HPL 等触发源,让天赋真正“可构筑”
4) 扩展tags + 泛化天赋