摘要

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 的到期估值、网页收据展示、状态估计条件化和回放兼容;修正提案仍处于待批准状态。