摘要

在战斗中右键查看一个生物,会弹出它的信息面板,上面写着这个生物当前的攻击和防御。这个数值由几部分加起来:生物的基础值、英雄的攻防、英雄技能带来的加成(例如“战斗魔法”技能会按英雄的法力强度给部队加攻防)、宝物、状态效果等。把面板值拆开解释清楚,就能发现有没有“解释不了的部分”——那可能来自对手的某个技能或宝物,这正是状态估计(SE,把读到的观察累积成对局状态和对手构筑推断的模块)想推断的东西。

本实验发现一个装配缺口:SE 已经保存了同一帧画面上的英雄属性栏(HUD)和生物面板,但计算“剩余未解释部分”时只扣了基础值和英雄攻防,没有算进已读的战斗魔法技能组件。修复后,一张真实截图上的深渊使者攻 40/防 37 被完整解释,剩余为 0。

要回答的问题

当同一帧既有英雄 HUD 又有生物面板时,能否用已经读到的英雄属性、此前读到的知识和技能,通过规则模拟器的公开组件,把面板攻防解释得更完整?

数据与来源

  • 10 月 10 日两局训练录像已保存的分析请求(49 帧和 58 帧 JSON)。在 16:57 那局的 58 帧里已经找到合格样例,所以没有继续扩展素材。
  • 不重扫视频、不新增 OCR,不借用未来或敌方数据。
  • 该样例是已曝光的训练材料,不是独立准确率样本。

方法

新增一个私有模块,从 SE 已有的“推断说明”入口调用:

  • 只处理已归为我方、同一英雄、同一帧唯一的 HUD 与面板。
  • 当前攻防、法力强度用同一帧 HUD;当前法强未知时不沿用旧值。
  • 知识、技能用不晚于当前帧的同一英雄直接读数,每项保留来源,并明确“持续适用”只是前提;出现其他英雄时不跨越这个身份断点;未知技能等级不退回旧等级。
  • 经规则模拟器的公开战斗魔法组件算出部分参考值,再复用上一轮已有的 8 种有限来源组合做对照(游戏规则在本项目里由规则模拟器实现,不是商业游戏的认证规则)。
  • 已读到但影响未完整计入的状态效果,会保留原净差并阻止来源匹配。
  • 只追加“推断说明”条目(不确定、不作预测),不改观察、对手构筑、攻击条件或排除项。

设置

用 App 真实的保存读取器加载完整 58 帧请求,以 App 的方式启动核心子进程调用 SE 公开入口,并通过 App 的严格校验。修复前后用完全相同的请求比较。

结果

目标样例:58 帧请求中第 15 帧,生物深渊使者。

字段 修复前 修复后
同帧我方英雄 攻 3 / 防 2 / 法强 28 不变
面板 攻 40 / 防 37 不变
基础 攻 30 / 防 30 不变
同英雄此前的知识/技能 第 13 帧:知识 20、战斗魔法专家 带第 13 帧来源参与计算,法强用当前的 28
原观察中的部分净差 攻 +7 / 防 +5 保留原语义
新的条件解释 无 攻 30+3+7=40,防 30+2+5=37,净差均为 0
有限来源对照 未使用 本范围内“无新增来源”相符;但不据此认定对手没有削弱

如果错误沿用旧法强 27,规则组件会给攻击 +6、预测 39;用当前 28 才得到 +7。原图目视核对:面板 40/37 和右侧英雄 3/2/28 与保存读数相符。

整个请求共新增 5 条同帧对照:3 条因状态效果未完整计入而不做来源匹配(例如另一帧同样显示 40/37,但状态栏已读到效果);另一个生物的攻击仍有 +6 未解释,明确写为“本范围内无相符组合”。没有挑选只相符的结果。其他输出完全不变,只有推断说明多了 5 行。

在 App 常驻服务的 0.2 秒规则预算下,前两次连续请求都未完成;按 App 原有的“1 秒后续算、最多 20 次”逻辑,第二次续算即完成,结果与离线完整计算一致(请求用时 1.808 / 1.830 秒,这只是 SE 对该 58 帧请求的耗时,不是整帧端到端 p95)。

失败与负结果

  • 修复前的新测试 15 个中 8 个失败,保留为证据。
  • 外部审阅指出另一个缺口:没有当前 HUD 时的旧“准备页参考”路径,只检查后续攻防/法强/知识,会漏掉后来直接看到的技能升级、子技能或未知等级。新增 3 个用例复现失败后修复:两条路径共用历史组件读取,未知等级不沿用旧等级。
  • 审阅担心的另外两处(状态效果、未知技能的表示)经核对现有合同已有保证,补了用例确认,未扩大拒绝范围。
  • 一次再验证在最后打印时因控制台编码失败、外层退出 1;产物保留未改,改为编码安全输出后再验通过。

局限

  • 只解释了“已读到的”组件;剩余为 0 只在所列前提下成立,不能证明没有对手效果。
  • 安装版未更新;旧保存结果需在源码版本重新计算 SE 才能看到新解释。
  • 软件测试(去重后 SE 223 项 + App 66 项)证明组件被正确消费,不证明全部公式覆盖或游戏规则正确。

结论与下一步

同帧 HUD + 此前读到的技能,已能把一部分生物面板攻防完整解释,并把“解释不了”的部分(如 +6)明确暴露出来。下一步只做一件事:用当前 58 帧里已读的状态效果和公开规则,让一个有完整规则依据的状态参与攻防解释;部分支持或未知的效果不能当作 0。