# Effect 重构会话总结(2026-03-28) ## 1. 本次会话完成内容 ### 1.1 注释与说明统一 - 已将 `logic/service/fight/effect` 下效果注释统一为: - `// Effect : ` - 说明来源: - `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: - 随机回合/随机次数类(如 41、42) - 次数型常驻类(如 46、47、48、SelfKill、570) - “SetArgs + 额外上下文初始化”类(如 Effect123、EffectPropSyncReverse) --- ## 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, , ...)` - `initskill(, ...)` - 但这还不够,后续扫描必须额外统计这些“共享实现/批量注册”文件: - `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`