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

7.5 KiB
Raw Blame History

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

  • Effect570570.go
  • Effect123effect_119_123.go
  • Effect41effect_41.go
  • Effect42effect_42.go
  • Effect46effect_46.go
  • Effect47effect_47.go
  • Effect48effect_48.go
  • Effect60effect_60.go
  • EffectPropSyncReverseeffect_attr.go
  • SelfKillselfkill.go

建议分三类继续抽 base

  • 随机回合/随机次数类(如 41、42
  • 次数型常驻类(如 46、47、48、SelfKill、570
  • “SetArgs + 额外上下文初始化”类(如 Effect123、EffectPropSyncReverse

3. 未实现(或疑似未实现)效果清单

3.0 从 effectInfo.json 提取的“未实现”总览(自动扫描)

  • JSON 配置总效果数:2112
  • 代码已注册效果数Skill338
  • JSON 中存在但代码未注册:1779
  • 代码中注册但 JSON 无对应条目:521, 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

  • 519effect_519.go
  • 532532.go
  • 552552.go
  • 560560.go
  • 576576.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