摘要
Simulator 是本项目对游戏战斗规则的重新实现。上一批检查发现“魅惑”状态的持续时间存在差异:连续重复施放时,结束回合没有被正确封顶。本实验把这个差异推进到真实的资源结算上——“专注”是单位攻击或受伤时累积、供技能使用的资源,而被魅惑的单位得不到专注。17 条受控历史中,13 条与预期一致,4 条严格复现了上限缺陷:重施后本该已到期的单位仍然拿不到专注。一个隔离的修复原型能让 17 条全部符合预期,但它没有进入生产代码。
要回答的问题
时长上限的 bug 只是“状态多挂了几回合”,还是会在真实攻击中造成可见的资源错误?如果修复,会影响哪些下游使用者(对战 AI、网页显示、状态估计、回放)?
方法
- 构造受控开场:起始攻防 0、固定基础伤害 1、每堆 100 个单位、预置位置与行动顺序,保留游戏原生的生命、专注和被动能力;初始化后不再人为补资源或注入状态。
- 覆盖:未魅惑、首回合、下一回合、正常到期、两连 / 三连重施;普通生物、魔法生物、亡灵;主动攻击、反击、升级剑士的追加攻击。
- 逐个伤害包核对伤害、前后生命、存活数量、资源事件来源和每方共享专注池;每步保存快照续算,最后整局序列化并回放。
- 4 条已知缺陷用“严格预期失败”标记:只接受精确的旧错误值 0,其它任何误差仍会正常报错;一旦数值恢复正确,测试会提示而不是硬编码保持失败。
设置
17 条历史共 476 个操作,另有 3 个异常分类反例;自然 AI 对战 0 局。
| 场景 | 预期 | 当前引擎 |
|---|---|---|
| 第 1 回合魅惑,第 1 / 2 回合攻击或被双击 | 专注 0 | 相同 |
| 第 1 回合魅惑,第 3 回合到期后攻击 | 主动攻击 2 + 被反击 1 = 3 | 相同 |
| 第 1、2 回合重施,第 4 回合攻击 / 被双击 | 应恢复 3 / 2 | 实际均为 0 |
| 第 1、2、3 回合重施,第 5 回合攻击 / 被双击 | 应恢复 3 / 2 | 实际均为 0 |
| 队友被魅惑,未受影响的单位攻击 / 被双击 | 共享池仍得 3 / 2 | 相同 |
结果
- 4 项预期失败描述的是同一个时长缺陷在资源上的影响,不是 4 个新 bug。
- 隔离原型:在独立进程里临时只给魅惑加结束回合上限。只改状态应用会被已有的一致性校验拒绝(“效果操作与收据投影不一致”),因为另一处函数独立计算了未封顶的延长时间。两处一起改、保留全部校验后,17 条历史全部符合预期且回放一致;撤掉补丁后,旧引擎拒绝其中 5 条重施历史,另外 12 条行为无差异。
- 全量测试:Simulator 11826 通过 / 65 失败 / 106 严格预期失败(404.82 秒);游戏知识模块 7670 通过 / 31 失败 / 7 准备错误;公共接口与现有使用者 110 项全部通过。与上一批相比,两模块新增坏节点 0、遗漏旧节点 0。
失败与负结果
65 个 Simulator 普通失败、游戏知识模块 31 个失败与 7 个准备错误都是此前已有的来源门禁问题,没有被掩盖。106 项预期失败是不同场景,不等于 106 个独立缺陷。110 项使用者测试是在未修正的引擎上运行的,不能据此说下游已迁移。
局限
原型不包含新的规则版本号、下游迁移、版本选择或跨版本拒绝,不能称为生产修复完成。游戏原生专注回调的完整次数和顺序未经认证;资料中较笼统的说法与具体反击规则之间的冲突被保留。旧下游测试固定“当前回合 + 3”,说明不能静默改变历史含义。
结论与下一步
缺陷对真实资源的影响已被精确定位并可稳定复现,修复路径也已在隔离环境中验证可行。下一步是确认合同后实现明确的新规则版本,并补齐对战 AI 的到期估值、网页收据展示、状态估计条件化和回放兼容;修正提案仍处于待批准状态。
Comments