Files
bl/docs/effect-refactor-summary-2026-03-28.md
xinian 875ad668aa
Some checks failed
ci/woodpecker/push/my-first-workflow Pipeline failed
feat: 实现战斗效果逻辑和接口重构
2026-03-28 21:57:22 +08:00

220 lines
7.5 KiB
Go
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.

# Effect 重构会话总结2026-03-28
## 1. 本次会话完成内容
### 1.1 注释与说明统一
- 已将 `logic/service/fight/effect` 下效果注释统一为
- `// Effect <id>: <desc>`
- 说明来源
- `public/config/effectInfo.json`
### 1.2 结构整理与公共能力抽取
- 新增并使用了子效果统一挂载 helper
- `addSubEffect(...)`
- 已清理 `effect` 目录中的 `GenSub(...)` 直接调用残留统一走 helper
### 1.3 回合类基类组合继承已落地
- 当前已引入的 base位于 `logic/service/fight/effect/sub_effect_helper.go`
- `RoundEffectArg0Base`
- `RoundEffectSideArg0Base`
- `FixedDuration1Base`
- `FixedDurationNeg1Base`
- `FixedDuration2Base`
- `RoundEffectArg1Base`
- `RoundEffectSideArg1Base`
- `RoundEffectSideArg0Minus1Base`
- `RoundEffectSideArg0Minus1CanStackBase`
- 已有大量效果结构体改为嵌入上述 base删除重复 `SetArgs` 模板代码
### 1.4 编译状态
- 已多轮执行并通过
- `go test ./logic/service/fight/effect`
### 1.5 本轮新增 effect 实现
- 新增缺失效果实现
- `400` 若和对手属性相同则技能威力翻倍
- `480` `{0}`回合内自身所有攻击威力为两倍
- `586` `{0}`回合内自己的属性攻击必中
- `599` `{0}`回合内受到`{1}`伤害减少`{2}%`
- `610` 遇到天敌时先制+`{0}`
- `611` `{0}`回合自身使用攻击技能则附加`{1}`点固定伤害
- `613` `{0}`回合内自身令对手使用的`{1}`系攻击技能无效
- 已同步更新
- `logic/service/fight/effect/effect_info_map.go`
### 1.6 本轮新增文件
- `logic/service/fight/effect/400_480_586_599_610_611_613.go`
- `logic/service/fight/effect/effect_info_map.go`
### 1.7 本轮验证
- 已执行
- `go test ./service/fight/effect`
- 结果
- 通过
### 1.8 本轮结论
- 当前这轮更适合按低风险可复用现有模式 effect 小批次推进而不是一次性追求 `effectInfo.json` 全量覆盖
- 现有 `effect` 目录里已经有不少共享实现 + 批量注册的写法后续判断缺失项时不能只靠 grep `InitEffect(...)`
- 文档第 3 节里的未实现列表目前仍是历史扫描快照只能作为候选列表不能直接当最终事实使用
---
## 2. 当前仍保留自定义 `SetArgs` 的效果建议下一轮重点
以下属于非纯模板仍待抽象 SetArgs
- `Effect570``570.go`
- `Effect123``effect_119_123.go`
- `Effect41``effect_41.go`
- `Effect42``effect_42.go`
- `Effect46``effect_46.go`
- `Effect47``effect_47.go`
- `Effect48``effect_48.go`
- `Effect60``effect_60.go`
- `EffectPropSyncReverse``effect_attr.go`
- `SelfKill``selfkill.go`
建议分三类继续抽 base
- 随机回合/随机次数类 4142
- 次数型常驻类 464748SelfKill570
- SetArgs + 额外上下文初始化 Effect123EffectPropSyncReverse
---
## 3. 未实现或疑似未实现效果清单
### 3.0 `effectInfo.json` 提取的未实现总览自动扫描
- JSON 配置总效果数`2112`
- 代码已注册效果数Skill`338`
- JSON 中存在但代码未注册`1779`
- 代码中注册但 JSON 无对应条目`5``21, 31, 41, 42, 174`
说明
- 这个口径是配置覆盖率不是bug 数量
- 其中大量属于未来版本/未迁移内容不建议一次性全补建议按战斗系统实际启用范围分批实现
- 以下列表为上一轮扫描快照未随本轮新增实现实时回算
- 此外扫描脚本若未把共享实现中的批量注册统计进去也会把已实现效果误判成缺失
JSON 中存在但代码未注册示例前 60
- 2, 10, 11, 12, 14, 15, 16, 17, 22, 30
- 38, 40, 45, 51, 55, 56, 61, 64, 66, 67
- 70, 78, 84, 86, 92, 94, 96, 97, 99, 102
- 103, 104, 106, 108, 109, 114, 118, 132, 133, 139
- 141, 158, 162, 167, 168, 185, 401, 421, 431, 529
- 543, 554, 569, 573, 581, 582, 583, 584, 585, 586
### 3.1 明确标记未实装
- 文件存在明确标记
- `logic/service/fight/effect/529.go未实装`
### 3.2 已注册但缺少同名 `Effect{id}` 结构体需人工确认是否由合并实现覆盖
- `53`
- `74`
- `75`
- `186`
- `402`
- `433`
- `446`
- `451`
- `463`
- `497`
- `564`
- `588`
说明
- 这类通常可能是多个 id 共用一个结构体实现命名与 id 不一致需要逐个确认是否真正缺失行为
### 3.3 疑似未实现扫描规则存在 `Effect{id}` 类型但没有核心战斗 Hook
- `519``effect_519.go`
- `532``532.go`
- `552``552.go`
- `560``560.go`
- `576``576.go`
说明
- 这批是高优先级人工复查项不一定真的没实现可能通过组合/间接机制生效
### 3.4 当前更可信的下一批候选
这一组是结合本轮人工核对后仍然值得优先继续补的缺失 effect 候选
- `401`
- `573`
- `585`
- `587`
- `589`
- `590`
- `591`
- `592`
- `593`
- `594`
- `595`
- `596`
- `597`
- `598`
说明
- 这批大多是 58x/59x 段的新效果和当前目录中已有实现重叠较少
- 相比继续深挖旧扫描误差这批更适合直接新增文件推进
---
## 4. 下次继续的建议顺序
建议严格按下面顺序继续不要重新从全量扫描开始
1. 先复核文档 3.4 里的候选项是否仍未实现
2. 优先补单次触发命中附加固定伤害恢复概率状态这类低风险逻辑
3. 再处理复制对手状态 / 多分支条件 / 触发链式子效果 58x/59x 复杂效果
4. 最后再回头处理文档 2 中那些仍保留自定义 `SetArgs` 的结构整理
本轮更推荐的下一批实现顺序
- 第一组`587 / 591 / 592 / 597 / 598`
- 第二组`573 / 585 / 594 / 595 / 596`
- 第三组`589 / 590 / 593`
---
## 5. 下一次继续让我实现时可直接复制的指令
可直接用下面这句发起
`继续处理 effect按 docs/effect-refactor-summary-2026-03-28.md 的 3.4 和 4 执行:先补 587/591/592/597/598再补 573/585/594/595/596每实现一批就更新同一文档和 effect_info_map.go并跑 go test ./service/fight/effect。`
如果你希望按 JSON 覆盖率推进可用这句
`继续处理 effect按 docs/effect-refactor-summary-2026-03-28.md 的 3.0 从低风险效果开始补实现先补状态附加类10/11/12/14/15/16/94/99/103/114每实现一批就更新文档中的“已实现列表”和“剩余列表”。`
---
## 6. 扫描口径说明供后续排查
- 已注册效果 ID 扫描来源
- `InitEffect(input.EffectType.Skill, <id>, ...)`
- `initskill(<id>, ...)`
- 但这还不够后续扫描必须额外统计这些共享实现/批量注册文件
- `sterStatusEffects.go`
- `effect_power_doblue.go`
- `EffectAttackMiss.go`
- `EffectPhysicalAttackAddStatus.go`
- `EffectDefeatTrigger.go`
- `effect_attr.go`
- `effect_EffectConditionalAddDamage.go`
- `effect_74_75.go`
- `effect_104_109.go`
- `Effect{id}` 结构体与方法扫描来源
- `logic/service/fight/effect/*.go`
- 疑似未实现判断是启发式不是最终结论仍需代码级确认
---
## 7. 这次改动涉及的关键文件
- `public/config/effectInfo.json`
- `logic/service/fight/effect/400_480_586_599_610_611_613.go`
- `logic/service/fight/effect/effect_info_map.go`
- `logic/service/fight/effect/sub_effect_helper.go`
- `docs/effect-refactor-summary-2026-03-28.md`