摘要
在《英雄无敌:上古纪元》里,英雄的技能和装备可以让法术便宜几点魔法(“减耗”)。状态估计(SE,把截图里读到的观察累积成对局状态和对手构筑推断的程序)会拿我方法术书上显示的报价,减去我方已知的减耗,再问项目的规则模拟器“剩下的差额能否解释”,以此判断有没有看不见的效果。
问题是:旧代码把整局读到的所有我方减耗来源汇总成一个数,用在所有书页上。如果某个装备是后来才读到或后来才换上的,它就会被“倒灌”到更早的书页。本实验让每一页只使用在它之前读到的、同一英雄的来源。
结果:在真实保存的 58 帧样例里,11 个报价全来自同一张书页,减耗来源(一双魔法拖鞋,−2)在更早的三张页面上就已读到,所以没有数值变化,只多了一条来源说明。修复的价值在于以后不会借用未来信息。
要回答的问题
- 旧做法是否真的可能借用较晚页面的来源?
- 改成按时间顺序后,真实保存的结果有没有变化?
- 当各页的已知来源不同时,如何合并规则查询,而不自行复制费用公式?
数据与来源
- 一段训练录像(10 月 10 日 16:57,前 23 分钟)已有的 58 帧自动识别结果,是已曝光的训练材料。
- 不重跑 OCR 或视频,不读留出数据,不改模拟器、AI 或严格数据格式,不启动用户的 App。
方法
旧断点。 旧代码用累计的“我方基线来源”为所有保留的书页调用同一个减耗查询。
新做法。 对每张书页,只把此前同一英雄的页面当作“延续参考”。下面这些情况会阻断:未来的页面;同一帧的准备页(两者先后未被认证);HUD 上换成了另一个英雄;中间出现了新的未知页面。原始观察和累计历史不改。
逐页向规则模拟器的公开接口查询“已知来源的固定减耗小计”。未知 ID、矛盾的槽位、重复的槽位或查询失败都不产生固定项,也不把未知当 0。
页面不完整怎么办。 只读到部分技能/装备时,已读到的减耗只是一个“小计”,不能证明其它未知技能装备没有减耗。外部审阅指出:已知鞋子的小计不应让一张不完整的页面获得发布单一数值的资格。最终规则是:只有完整页且没有未读槽位,才发布单一减耗数值;否则 −2 只作为条件参考。
合并查询。 不同小计分别调用公开的费用解释接口,再合并结果。第一版要求不同学派的部分结果完全相同,新增的合法费用组合测试暴露出 4 个失败:公开查询实际只返回查询涉及的学派。修正后,共同学派必须一致、其余合并,无阻碍只与无阻碍结合。6 个完整联合查询对照(含学派重叠)确认合并结果与一次完整查询全等。
各页小计不同时,不再写旧的单一“我方费用模型”,逐页参考显示在 App 的“推断说明”里。
设置
冻结的 App 内核(含公开的规则模拟器)加当前 SE;软件测试只覆盖 SE。所有重命令串行、限 8 核运行。
结果
软件回归(这些是单元/场景测试,不是游戏准确率):
| 批次 | 结果 | 说明 |
|---|---|---|
| 修前 | 8 个新场景全失败 | 复现旧时序问题 |
| 第一次修后 | 68 通过 / 11 失败 | 旧断言假定无前页也发布数值等,改为缺依据不发布 |
| 扩大回归 | 337 通过 / 4 失败 | 跨学派部分结果合并失败,保留记录后修复 |
| 最终扩大回归 | 347 通过、12 权限跳过 | 63.65 秒 |
| 审阅修正前 | 1 通过 / 2 失败 | 复现“已知鞋子 + 未读槽”两种反例 |
| 审阅修正后合计 | 348 个不同检查通过、12 跳过、0 未解决失败 | 本轮新增 27 个场景 |
12 个跳过是本机没有符号链接权限。新的跨来源价格场景取自两个分别合法执行的构筑,不是战中换装的连续轨迹,也不是真实录像。
真实保存输入。 来源审计显示三张较早的页面都读到魔法拖鞋,公开小计 −2;11 个保留价格全部来自同一张较晚的书页。所以这个样例本来就没有“未来来源污染”。
| 检查 | 结果 |
|---|---|
| 公开入口重算 | 5.162 秒(审阅修正后 5.024 秒) |
| 与旧结果比较 | 请求全等;只有一条非预测说明增加来源页和“魔法拖鞋 −2” |
| 费用模型 | 仍 −2,11 个读数,不一致,无第二次施法解释 |
| App 常驻进程 | 第 3 次刷新完成,含冷启动 58 帧共 11.436 秒,最长单次 3.016 秒 |
| 保存→导入→再读 | 58 帧、媒体时间、原视频链接通过 |
“不一致”的意思是:在“构筑延续”的前提下这些报价无法解释,不是认证敌方让我方加耗。人工看原图发现那张书页处于“敌方回合”,书页报价不等于实际支付,而 Perception 还不会自动读这个状态。
失败与负结果
- 第一次只读探查假定证据是字典、实际有时是列表,探查失败;这次失败不计为成功的数据审计。
- 跨学派合并的第一版错误,产生 4 个失败,已修。
- 真实样例没有数值改善:不能宣称修正了 11 个真实价格。
- 11.436 秒是含冷启动的软预算刷新,不是热状态单帧 p95 达标。
局限
- 每个法术仍只用最新保留的那次读数,尚不是完整的每次报价历史。
- 部分页面的减耗只是小计,不认证其它未知技能或装备不存在,也不认证生物光环持续有效。
- 外部审阅只看了报告,没有独立运行代码;审阅后的局部修复是本地实现和回归。
- 用户安装的版本不含这些开发修改。
结论与下一步
减耗来源现在严格按时间顺序消费,不再可能借用未来页面;真实样例结果不变,说明之前的数值没有被污染。下一步:同一个法术多次报价时,每次使用各自之前已读的来源做历史费用对照,复用已有的法术书历史和公开查询,先看已有保存观察,不新增 OCR 或视频。
Comments