Files
bl/docs/effect-refactor-summary-2026-03-28.md

299 lines
13 KiB
Go
Raw Normal View 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}`系攻击技能无效
2026-03-28 23:59:12 +08:00
- `573` `{0}`回合内若自身能力提升状态被消除或吸取则`{1}`%使对手`{2}``{3}`回合
- `587` `{0}`回合内若被对手击败则对手损失`{1}`点体力造成致命伤害时对手剩余1点体力
- `591` 造成伤害大于`{0}`则下`{1}`回合自己所有直接攻击先制+`{2}`
- `592` `{0}`回合每回合使用攻击技能`{1}`%令对手`{2}`
- `594` 造成的伤害低于`{0}``{1}`%令对手`{2}`
- `596` 技能使用成功时`{0}`%给予对手冻伤中毒烧伤中任意一种异常状态
- `597` `{0}`回合内每回合使用技能吸取对手最大体力的1/`{1}`
- `598` `{0}`%恢复自己所有技能PP值`{1}`
- `627` 对手处于能力提升状态时附加其`{0}``{1}`%的百分比伤害
- `628` 若对手处于能力下降状态则造成伤害的`{0}`%恢复体力
- `629` 消除`{0}`状态消除成功下回合自身先制+`{1}`
- `630` `{0}`回合内`{1}`状态被消除则有`{2}`%概率使对手`{3}`
- `631` 消除`{0}`状态消除成功下回合造成伤害提升`{1}`%
- `632` 造成伤害`{0}``{1}`则下`{2}`回合必定暴击
- `633` 造成伤害`{0}``{1}`则造成伤害的`{2}`%恢复体力
- `634` 若当前体力`{0}`对手则造成伤害的`{1}`%恢复体力
- `635` 吸收对手能力上升状态吸收成功下回合先制+`{0}`
- `636` 消除`{0}`状态消除成功则令对手`{1}`
- `637` 若对手处于异常状态则对手`{0}``{1}`
- `638` 若对手`{0}`技能威力提升`{1}`%
- `639` 造成伤害`{0}``{1}`则下`{2}`回合所有技能附带`{3}`点固定伤害
- `640` 命中后`{0}`%使对手`{1}``{2}`回合,遇到天敌概率翻倍
- `641` 命中后`{0}`%使对手进入流血状态
2026-03-28 23:59:12 +08:00
- `401` 若和对手属性相同则技能威力翻倍
- `585` 技能使用成功时`{0}`
- `589` 复制对手`{0}`的能力提升状态
- `590` 使对手`{0}``{6}`%弱化效果翻倍
- `593` 附加`{0}``{1}`值的`{2}`%的百分比伤害
- `595` 技能使用成功时`{0}`%使对手`{1}`若没有触发则对手`{2}`
- 已同步更新
- `logic/service/fight/effect/effect_info_map.go`
### 1.6 本轮新增文件
- `logic/service/fight/effect/400_480_586_599_610_611_613.go`
2026-03-28 23:59:12 +08:00
- `logic/service/fight/effect/573_587_591_592_594_596_597_598.go`
- `logic/service/fight/effect/627_631.go`
- `logic/service/fight/effect/632_636.go`
- `logic/service/fight/effect/637_641.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 候选
2026-03-28 23:59:12 +08:00
- 当前文档 3.4 中这批候选已在本轮补齐
说明
- 这批大多是 58x/59x 段的新效果和当前目录中已有实现重叠较少
- 相比继续深挖旧扫描误差这批更适合直接新增文件推进
---
## 4. 下次继续的建议顺序
建议严格按下面顺序继续不要重新从全量扫描开始
1. 先复核文档 3.4 里的候选项是否仍未实现
2. 优先补单次触发命中附加固定伤害恢复概率状态这类低风险逻辑
3. 再处理复制对手状态 / 多分支条件 / 触发链式子效果 58x/59x 复杂效果
4. 最后再回头处理文档 2 中那些仍保留自定义 `SetArgs` 的结构整理
本轮更推荐的下一批实现顺序
2026-03-28 23:59:12 +08:00
- 第一组`529 / 552 / 560 / 576`
- 第二组`10 / 11 / 12 / 14 / 15 / 16`
- 第三组`94 / 99 / 103 / 114`
---
## 5. 下一次继续让我实现时可直接复制的指令
可直接用下面这句发起
2026-03-28 23:59:12 +08:00
`继续处理 effect按 docs/effect-refactor-summary-2026-03-28.md 的 3.3 和 4 执行:先复核 529/552/560/576再补低风险状态附加类 10/11/12/14/15/16每实现一批就更新同一文档和 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`
2026-03-28 23:59:12 +08:00
- `logic/service/fight/effect/573_587_591_592_594_596_597_598.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`
---
## 8. 2026-03-29 增量记录
### 8.1 本轮补齐的 effect
- `663` `{0}回合内若对手使用攻击技能则{1}%使对手{2}`
- `664` 若先出手则当回合对手无法造成攻击伤害
- `665` 造成的伤害低于`{0}``{1}`回合内自身受到的伤害减少`{2}`
- `666` 使自身下回合攻击必定先手必定暴击
- `667` 自身为满体力时`{0}{1}`
### 8.2 实现口径
- `663` 复用与 `614` 同类的对手使用攻击技能时触发路径 `Skill_Use_ex()` 中按概率给对手附加状态
- `664` 复用 `170` 的先手免伤模式 `DamageLockEx()` 中将当回合受到的攻击伤害归零
- `665` 按技能实参 `250 3 100` 的实际使用方式落为低于阈值则给自己挂 3 回合 100 点固定减伤子效果不是百分比减伤
- `666` 落为仅对下回合攻击技能生效的先手与暴击保证`ComparePre()` 强制先手`ActionStart()` 强制暴击
- `667` 按配置说明自身攻击+a防御+b特攻+c特防+d速度+e命中+f处理仅在满体力时给自己附加前 6 项能力等级
### 8.3 本轮新增文件
- `logic/service/fight/effect/663_667.go`
### 8.4 本轮同步更新
- `logic/service/fight/effect/effect_info_map.go`
- `docs/effect-unimplemented-tasks/task-013-effects-663-667.md` 已完成可从任务目录移除
### 8.5 本轮验证
- `cd /workspace/logic && go test ./service/fight/effect`
- `cd /workspace/logic && go build ./...`
---
## 9. 2026-03-29 增量记录
### 9.1 本轮补齐的 effect
- `668` 若对手处于能力提升状态则先制额外+1
- `669` 当回合击败对手则下回合自身攻击先制+1
- `670` `{0}`回合每回合附加`{1}``{2}`值的`{3}%`的百分比伤害
- `671` 若对手处于异常状态则恢复造成伤害的`{0}%`的体力
- `672` 当回合击败对手则恢复自身全部体力
### 9.2 实现口径
- `668` 复用 `539` 的条件先制模式 `ComparePre()` 中于对手存在能力提升状态时直接给当前技能先制+1
- `669` 当回合击败后为下回合攻击技能生效处理 `SwitchOut()` 中标记击败成立下一回合 `ComparePre()` 仅对攻击技能追加先制+1
- `670` 参照 `419` `593` 的组合语义实现为回合类附加伤害效果持续期间每次使用技能时附加一次基于指定目标属性值的固定伤害
- `671` 复用 `687` 的伤害回血模式但条件改为对手处于任意异常状态
- `672` 按击败即时触发处理在对手因本次攻击退场时立刻将自身体力回复至满值
### 9.3 本轮新增文件
- `logic/service/fight/effect/668_672.go`
### 9.4 本轮同步更新
- `logic/service/fight/effect/effect_info_map.go`
- `docs/effect-unimplemented-tasks/task-014-effects-668-672.md` 已完成可从任务目录移除
### 9.5 本轮验证
- `cd /workspace/logic && go test ./service/fight/effect`
- `cd /workspace/logic && go build ./...`