2026-03-28 21:57:22 +08:00
|
|
|
|
# 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}`点
|
2026-03-29 19:00:08 +08:00
|
|
|
|
- `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}`
|
2026-03-28 21:57:22 +08:00
|
|
|
|
|
|
|
|
|
|
- 已同步更新:
|
|
|
|
|
|
- `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`
|
2026-03-29 19:00:08 +08:00
|
|
|
|
- `logic/service/fight/effect/627_631.go`
|
|
|
|
|
|
- `logic/service/fight/effect/632_636.go`
|
|
|
|
|
|
- `logic/service/fight/effect/637_641.go`
|
2026-03-28 21:57:22 +08:00
|
|
|
|
- `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 候选:
|
|
|
|
|
|
|
2026-03-28 23:59:12 +08:00
|
|
|
|
- 当前文档 3.4 中这批候选已在本轮补齐。
|
2026-03-28 21:57:22 +08:00
|
|
|
|
|
|
|
|
|
|
说明:
|
|
|
|
|
|
- 这批大多是 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`
|
2026-03-28 21:57:22 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 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。`
|
2026-03-28 21:57:22 +08:00
|
|
|
|
|
|
|
|
|
|
如果你希望按 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`
|
2026-03-28 21:57:22 +08:00
|
|
|
|
- `logic/service/fight/effect/effect_info_map.go`
|
|
|
|
|
|
- `logic/service/fight/effect/sub_effect_helper.go`
|
|
|
|
|
|
- `docs/effect-refactor-summary-2026-03-28.md`
|
2026-03-29 19:00:08 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 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 ./...`
|