14 KiB
14 KiB
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):RoundEffectArg0BaseRoundEffectSideArg0BaseFixedDuration1BaseFixedDurationNeg1BaseFixedDuration2BaseRoundEffectArg1BaseRoundEffectSideArg1BaseRoundEffectSideArg0Minus1BaseRoundEffectSideArg0Minus1CanStackBase
-
已有大量效果结构体改为嵌入上述 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}系攻击技能无效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}%使对手进入流血状态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.gologic/service/fight/effect/573_587_591_592_594_596_597_598.gologic/service/fight/effect/627_631.gologic/service/fight/effect/632_636.gologic/service/fight/effect/637_641.gologic/service/fight/effect/effect_info_map.go
1.7 本轮验证
- 已执行:
go test ./service/fight/effect
- 结果:
- 通过
1.8 本轮结论
- 当前这轮更适合按“低风险、可复用现有模式”的 effect 小批次推进,而不是一次性追求
effectInfo.json全量覆盖。 - 现有
effect目录里已经有不少“共享实现 + 批量注册”的写法,后续判断缺失项时不能只靠 grepInitEffect(...)。 - 文档第 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} 结构体(需人工确认是否由合并实现覆盖)
537475186402433446451463497564588
说明:
- 这类通常可能是“多个 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 候选:
- 当前文档 3.4 中这批候选已在本轮补齐。
说明:
- 这批大多是 58x/59x 段的新效果,和当前目录中已有实现重叠较少。
- 相比继续深挖旧扫描误差,这批更适合直接新增文件推进。
4. 下次继续的建议顺序
建议严格按下面顺序继续,不要重新从全量扫描开始:
- 先复核文档 3.4 里的候选项是否仍未实现。
- 优先补“单次触发、命中附加、固定伤害、恢复、概率状态”这类低风险逻辑。
- 再处理“复制对手状态 / 多分支条件 / 触发链式子效果”的 58x/59x 复杂效果。
- 最后再回头处理文档 2 中那些仍保留自定义
SetArgs的结构整理。
本轮更推荐的下一批实现顺序:
- 第一组:
529 / 552 / 560 / 576 - 第二组:
10 / 11 / 12 / 14 / 15 / 16 - 第三组:
94 / 99 / 103 / 114
5. 下一次继续让我实现时可直接复制的指令
可直接用下面这句发起:
继续处理 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.goeffect_power_doblue.goEffectAttackMiss.goEffectPhysicalAttackAddStatus.goEffectDefeatTrigger.goeffect_attr.goeffect_EffectConditionalAddDamage.goeffect_74_75.goeffect_104_109.go
Effect{id}结构体与方法扫描来源:logic/service/fight/effect/*.go
- “疑似未实现”判断是启发式,不是最终结论,仍需代码级确认。
7. 这次改动涉及的关键文件
public/config/effectInfo.jsonlogic/service/fight/effect/400_480_586_599_610_611_613.gologic/service/fight/effect/573_587_591_592_594_596_597_598.gologic/service/fight/effect/effect_info_map.gologic/service/fight/effect/sub_effect_helper.godocs/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.godocs/effect-unimplemented-tasks/task-013-effects-663-667.md已完成,可从任务目录移除
8.5 本轮验证
cd /workspace/logic && go test ./service/fight/effectcd /workspace/logic && go build ./...
9. 2026-03-29 增量记录(二)
9.1 本轮补齐的 effect
668若对手处于能力提升状态则先制额外+1669当回合击败对手则下回合自身攻击先制+1670{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.godocs/effect-unimplemented-tasks/task-014-effects-668-672.md已完成,可从任务目录移除
9.5 本轮验证
cd /workspace/logic && go test ./service/fight/effectcd /workspace/logic && go build ./...
10. 2026-03-29 增量记录(三)
10.1 本轮补齐的 effect
642{0}回合内若对手攻击技能命中则己方在场精灵{1}%做出{2}643{0}%概率使对手{1}回合内{2}能力每回合变化{3}644当回合未击败对手,则减少对手当前体力1/{0}645体力低于1/{0}时威力{1}倍646体力高于对手时,此技能命中后 100% 使对手能力下降
10.2 实现口径
642按moves.json中1000642的说明实现反击档位映射:0-5分别对应50/100/150/200/250/300点固定伤害;挂在 defender 侧Skill_Use_ex(),仅对命中的攻击技能生效。643按真实技能实参55 2 1 -1这类布局处理为“命中后按概率给对手挂回合子效果”,子效果在TurnEnd()对指定能力执行一次SetProp。644复用579的“未击败对手”判定时机,落在Action_end(),按对手当前体力结算1/n的百分比伤害。645复用37的低血线威力倍率模式,在SkillHit()中按当前体力是否低于最大体力1/n改写技能威力。646未按任务文档里的占位param硬编码;改按实际技能配置的 6 段能力变化参数通用处理,仅在自身体力高于对手且本次技能命中后生效。
10.3 本轮新增文件
logic/service/fight/effect/642_646.go
10.4 本轮同步更新
logic/service/fight/effect/effect_info_map.godocs/effect-unimplemented-tasks/task-009-effects-642-646.md已完成,可从任务目录移除