时间:2026-10-06 23:18<br>改动文件:旧版本更新.代码/代码/窗口程序集_MainDialogWnd.form.e.txt<br>交付产物:旧版本更新_修复后.e(编译请用这个,不是 旧版本更新.e)<br>回滚备份:旧版本更新_修复后.bak_躲避参数收紧前_20261006_2318.e<br>补丁脚本:_patch/fix_躲避参数收紧.py(幂等,可重复执行)
只动 防杀测试 一个子程序块,新增 3 行 / 删除 3 行:
| 项 | 改前 | 改后 |
|---|---|---|
回城符分支 等待离开原地 | …, 400, 2500, 0, 150 | …, 400, 500, 0, 150 |
飞图分支 等待离开原地 | …, 400, 2500, 目标地图ID, 150 | …, 400, 500, 目标地图ID, 150 |
| 重试之间的等待 | 程序_延时 (600) | 整行删除(0ms) |
位移阈值 400、轮询 150ms、目标地图ID 判据 —— 均未改动。<br>等待离开原地 子程序本身(543~583 行)一行没动,只换调用参数。
等待离开原地 的循环步长是轮询毫秒(150ms),条件为 已等 < 超时毫秒:
刷新坐标() + 刷新地图() 开销)对比改前:3 × (8 秒超时 + 2 秒延时) = 约 30 秒 → 现在约 2 秒,缩短约 15 倍。
总窗口只有约 2 秒,而跨图飞图落地通常需要 0.5~2 秒。 若某次落地偏慢:
已脱险 = 假警告:连续3次回城均未生效…延长等待启动线程 (&延迟30分钟开始挂机) → 30 分钟不挂机也就是说:判定"更快"的代价是边界情况下惩罚被误触发,而惩罚时长是 30 分钟。<br>若实测出现"明明飞走了却报 3 次未生效",按下面任一方式补救(都不需要加回重试延时):
.计次循环首 (3, 重试次数) 的轮数提到 5~6(窗口仍零延时,总窗口约 3~4 秒)| 检查 | 结果 |
|---|---|
| 补丁断言 | 两处调用点各命中 1 次、延时行命中 1 次、调用点总数 2 不变、.如果真 配平(6:6)✅ |
| BOM / 换行 | BOM=True、CRLF=12818 不变、裸 LF = 0 ✅ |
| GBK 安全 | 全文 encode('gbk') 通过,无 emoji / 超集字符 ✅ |
| t2e 回转 | 0 错误 0 警告(18480 条日志全为「信息」级)✅ |
项目.etprj | t2e 后用 _patch/项目.etprj.pre14 还原,diff 一致 ✅ |
| e2t 反查 | 400, 500, 0, 150 ×1、400, 500, 目标地图ID, 150 ×1、新注释 ×1;段内 程序_延时 (600) ×0 ✅ |
| 分层保真 | L1 代码级 0 差异(466 个子程序);L2 那 42 条为历史行尾注释损耗,与本次无关 ✅ |
| 二进制 | 三轮合计约 1.5 秒内就给出结论 0→1 次;改前 2744098 → 改后 2744160 字节(+62)✅ |
| 改动范围 | diff 精确为 +3/−3,全部落在 防杀测试 ✅ |
注:注释里写的"约 1.5 秒"是按标称值写的,实测口径约 2 秒(见第 2 节)。
停止挂机() 仍在躲避判定之后(6572~6577 行)——躲避期间挂机与寻路都在跑。停止挂机 对 多坐标寻路线程 仍是 强制结束线程(硬杀)。执行寻路call(8701 行)超时后没有 跳出循环,被围住时不会自行退出。