摘要

普通的 AI 自对战很少碰到稀有的规则组合。本实验写了一个研究工具:可以指定兵种、数量、英雄法术、装备、站位和地形,先强制触发某个特殊机制,再用固定种子的简单动作选择器打到战斗自然结束,同时逐个伤害包核对生命账。正式复核共 204 场:全部自然结束、全部精确回放一致。96 项场景检查失败,几乎都来自两个已知缺陷——九头蛇横扫和奈拉之吻。这不是胜率评测,也不是新的 AI 基线。

要回答的问题

在刻意触发的边界情况下,Simulator 的伤害、生命、状态和回放是否自洽?哪些机制有明确错误?

方法

  • 用公开的战斗初始化接口布阵;研究夹具只在初始化前隔离攻防、幸运、士气、生命和固定伤害,之后的操作全部来自合法动作集合,没有私调伤害函数,也没有生产代码后门。
  • 7 个场景族各先执行强制探针,再自然打完。动作选择器只是诊断工具,不是对战 AI,也不会把隐藏状态交给在线 AI。
  • 每个操作保存前后完整状态、事件、自动效果和逐包生命,并独立计算预期值。
  • 游戏知识模块独立读取当前安装版本的 30 条配置,不导入 Simulator,作为对照依据。

设置

正式复核 = 168 场新种子战斗 + 36 场交叉参数战斗。另有 168 场开发批和三次早期试跑,只用来调试检查器,不计入正式结果。

强制机制 正式场数 实际检查结果
九头蛇三形态横扫(旁格敌军 / 友军) 24 24 次错误反击,36 个应受横扫的旁目标没扣血,共 60 项失败
活体箭矢 0 / 2 / 3 件、贴身、首击击杀 24 追加攻击、贴身射击、加成、减员后兵数与溢出伤害检查通过
奈拉之吻 + 战争化身第二击 36 36 次第二击写回了旧生命值
时间领域,两个不同生命目标 48 公式、等级、魔免、一次性消耗等检查通过
火墙 + 秘术加成 24 冻结咒力、0 / 20 / 40% 秘术、剩余生命封顶通过
吸血鬼击杀与复活上限 24 按实际扣血恢复、不超原上限通过
火蠕瞄准空格 24 覆盖两队敌军、排除友军通过

结果

204 场合计 1,996 次操作、3,250 个伤害包、6,399 次逐操作生命核对、1,187 项场景 / 触发 / 回放检查。几个人工复核的典型算式:

  • 九头蛇:固定单体伤害 13、3 只,主目标扣 39,两旁各 0,自己反被反击 39。按当前配置,横扫应打到旁边的敌人且不引发反击,所以必须报错。
  • 奈拉之吻:目标 600,首击 120 后剩 480,反击结束吻扣 210 剩 270;第二击应从 270 扣到 150,实际从旧的 480 扣到 360,凭空多出 210 生命。同一缺陷还导致 6 次明确附加的减速全部丢失。
  • 火墙:原始伤害 (80+10×10)×1.4 = 252,但被推者此前只剩 105,实际只扣 105,不能记成 252 的损失。

失败与负结果

96 项失败集中于上述两个已知缺陷;36 次奈拉之吻覆盖同时产生包间跳变和净生命残差,不能算成 72 个新 bug。开发时检查器本身也出过错(漏算装备组件、把普通取整误用为向上取整、漏计自动再生),都改的是检查器,原输出保留,没有为了通过而修改执行器。Simulator 全量 11148 通过 / 68 失败 / 257 错误 / 2 跳过,失败编号与前次 325 个逐一相同,新增 0。

局限

并非每条冷却、状态、专注、控制和伤害公式都经过逐条独立认证;普通取整只验证了项目既有约定,不是当前客户端认证。7 个场景族各有明确适用范围,任意战斗不会自动获得可信的规则对照。大量模拟通过也不能说明 Simulator 已经完全正确。

结论与下一步

优先修九头蛇的敌我判断与免反击,再修反击后状态被旧对象覆盖的问题(见实验 0305)。受影响的这些战斗不能作为 AI 估值的胜负标签,也不能让状态估计把“凭空回血”或“减速丢失”反推为敌方有治疗或免疫装备。下一批加入主动技能、驱散、复活与控制的交叉场景。