日期:2026-10-06 14:35<br>改动文件:旧版本更新.代码/代码/窗口程序集_MainDialogWnd.form.e.txt(12569 → 12573 行)
上一版防杀重试用「地图ID 变了」来判断回城/飞图是否生效:
等待离开地图 (危险地图ID, 8000) ' 轮询 当前地图ID ≠ 原地图ID
问题:回城符 / 飞图可能把人物传回同一张地图(地图ID 根本不变)。此时判据恒为假 →
人物其实早就跑掉了,却白挨 3 轮包 + 多等 20 分钟。
回城的本质是「人物瞬移离开原地」,跟换不换地图无关,所以判据改成坐标位移。
等待离开地图 → 等待离开原地(原 530~555 行,整段重写).子程序 等待离开原地, 逻辑型
.参数 原坐标x, 整数型
.参数 原坐标y, 整数型
.参数 位移阈值, 整数型 ' 与原坐标距离达到该值即算已离开
.参数 超时毫秒, 整数型
每 500ms:刷新坐标 () → 计算两坐标距离 (原坐标x, 原坐标y, 当前坐标x, 当前坐标y)
距离 ≥ 位移阈值 → 写日志(等待毫秒/位移/当前坐标) → 返回 真
超时 → 写日志(当前坐标) → 返回 假
要点:
刷新地图 ()(原版每 500ms 刷一次,会反复重写全部 NPC 坐标全局变量、刷一屏地图日志)。改用轻量的 刷新坐标 ()。防杀测试:基准由地图ID 改为坐标' 旧
刷新地图 ()
危险地图ID = 当前地图ID
...
.如果真 (等待离开地图 (危险地图ID, 8000) = 真)
' 新
刷新坐标 ()
危险坐标x = 当前坐标x
危险坐标y = 当前坐标y
...
.如果真 (等待离开原地 (危险坐标x, 危险坐标y, 1000, 8000) = 真)
3 条相关日志同步改为报坐标(重试未生效 / 脱险成功 / 3 轮全失败)。
危险地图ID 局部变量已删除;目标地图ID 保留(发包飞图、取回城符还要用)。
调用处:等待离开原地 (危险坐标x, 危险坐标y, 1000, 8000) 里的 1000。
| 现象 | 调法 |
|---|---|
| 回城确实生效了,但还是被判「未生效」重试 | 调小(如 500)—— 你的回城落点可能离挂机点很近 |
| 没回城也被判「已脱险」(挂机跑图误判) | 调大(如 2000)—— 挂机寻路 8 秒内跑不出这个距离就安全 |
参考:回城/飞图是瞬移,位移通常上千;挂机点附近打怪走动,8 秒内一般只有几十到几百。子程序内部对 位移阈值 ≤ 0 有兜底(强制按 1000 算)。
一个已知边界:如果记录基准坐标那一瞬读内存失败(基准成 0,0),后续任何正常坐标都会被判「已离开」。实际「发现仇人」时人物在正常游戏中,坐标可读,这个窗口几乎不会命中;真发生时日志里的「当前坐标」会暴露它。
| 步骤 | 结果 |
|---|---|
| 字节级写入(UTF-8 BOM + 纯 CRLF) | BOM ✓ / CRLF 12572 / LF-only 0 ✓ |
| 块结构配平 | 全闭合 ✓ |
| e2txt t2e 回转 | 0 错误 0 警告,SUCC;防杀测试 / 等待离开原地 / 等待到达地图 / 等待地图名 全部解析成功 ✓ |
| e2t 往返比对 | 等待离开原地 归一后 0 差异;危险地图ID / 等待离开地图 残留 0 处 ✓ |
| 易语言 F7 编译 | 未跑 — 编译探针需要抢前台约 2 分钟,而当时你正在游戏挂机,探针的按键会落到游戏窗口上。请在方便时自行打开 旧版本更新_修复后.e 按 F7 确认 |
说明:本次改动属于「重命名子程序 + 改参数个数」,t2e 已验证调用与定义一致、无未知符号;编译期风险主要只剩撞名(10041),而 等待离开原地 是全新名字,工程内无同名。
D:\AI空间\rxjh\旧版本更新.代码(12573 行)D:\AI空间\rxjh\旧版本更新_修复后.e(2,727,464 字节,魔数 CNWTEPRG ✓)D:\AI空间\rxjh\旧版本更新.代码.bak_防杀改坐标_20261006_1431回滚:把备份目录的 代码/窗口程序集_MainDialogWnd.form.e.txt 拷回主本即可。