起因:2026-10-06 23:52 虎峡谷实测日志——三轮「回城未生效」,用回城符躲仇人完全没效果。
结论:不是超时太短,是判据在这个场景下从设计上就不可能成立。
日志第 3 行:第1次:使用回城符(虎峡谷)躲避傻逼人物!<br>说明 回城符名称 = 取对应回城符名称 (目标地图ID) 返回了 回城符(虎峡谷),<br>即 目标地图ID = #虎峡谷。
而 目标地图ID 的来源是旧代码:
目标地图ID = 取地图ID (回补地图组合框.内容) ' ← 旧代码
日志第 2 行同时打印 :当前地图》》》》》》》》>>虎峡谷——目标地图 = 当前地图。<br>根因就是这一句:「回补地图」常常就等于当前挂机地图(你在这图打怪,也在这图补给),<br>所以躲避变成了「原地同城回城」。
旧代码在回城符分支故意传 0 关掉地图判据(原意:同图回城地图ID不会变):
已脱险 = 等待离开原地 (危险坐标x, 危险坐标y, 400, 500, 0, 150) ' ← 旧代码,第5参=0
于是唯一判据是「离危险点位移 ≥ 400」。而虎峡谷城内三点的坐标(源码 4702~4713 行):
| 城内点 | 坐标 | 离危险点(-1923,2007) |
|---|---|---|
| 箭头NPC 姜大壮 | -1911, 2138 | 132 |
| 仓库NPC 文梦 | -2132, 1793 | 299 |
| 买卖NPC 江云益 | -1622, 2215 | 366 |
三点全部落在 400 阈值圈内。 也就是说:回城符即使 100% 生效,落点也离危险点不够远<br>→ 等待离开原地 必定返回假 → 日志必定报「未生效」。
| 轮次 | 时间 | 当前坐标 | 相对上轮位移 |
|---|---|---|---|
| 第1次 | 23:52:43 | -1923, 2007 | — |
| 第2次 | 23:52:44 | -1944, 2004 | 21 |
| 第3次 | 23:52:44 | -1953, 1980 | 26 |
2 秒内累计只挪了 40,是「走路」的量级而不是「传送」的量级(传送是几十~几千的跳变)。<br>所以同时也存在第二种可能:回城符那一包根本没生效(物品/冷却/状态原因)。
⚠️ 但无论回城符生效与否,只要躲避目标 = 当前地图,位移判据都过不了。
判据本身是错的,跟超时长短无关。
防杀测试 一个子程序内,+22 行 / −3 行).局部变量 躲避地图, 文本型
' 【躲避地图】不再拿「回补地图」当躲避目标:回补地图常常就等于当前挂机地图,
' 那样回城符只是原地回城、地图ID不变,位移判据必然失败(2026-10-06 虎峡谷实测三轮全判未生效)。
' 改为读独立的「躲避地图」:Default.ini 的 [config]躲避地图 到 飞地图 到 泫渤派 逐级兜底。
躲避地图 = 读配置项 (默认配置文件路径, “config”, “躲避地图”, )
.如果真 (躲避地图 = “”)
躲避地图 = 读配置项 (默认配置文件路径, “config”, “飞地图”, )
.如果真结束
.如果真 (躲避地图 = “”)
躲避地图 = “泫渤派”
.如果真结束
目标地图ID = 取地图ID (躲避地图)
.如果真 (目标地图ID = 0)
躲避地图 = “泫渤派”
目标地图ID = 取地图ID (躲避地图)
.如果真结束
三级兜底:Default.ini[config]躲避地图 → 飞地图 → 常量 "泫渤派"。<br>即:不配也能跑(自动用你原有的飞地图);配了就以它为准;名字写错也能退到泫渤派。
' 改前
已脱险 = 等待离开原地 (危险坐标x, 危险坐标y, 400, 500, 0, 150)
' 改后
已脱险 = 等待离开原地 (危险坐标x, 危险坐标y, 400, 500, 目标地图ID, 150)
现在躲避目标是跨图的,所以「地图ID 变了 = 成功」这条主判据对回城符同样有效。<br>回城符(泫勃派) 一用出去,泫渤派地图ID(101)1~2 秒内就会到位,立刻 跳出循环。
【躲避地图】本次躲避目标:泫渤派(地图ID 101),回城符:回城符(泫勃派)
【躲避地图】警告:躲避地图与当前地图相同,回城符等于原地回城,位移判据可能失效,请改 Default.ini 的躲避地图
第二条是防呆:万一你把躲避地图也设成了当前挂机地图,日志会直接点出来,不会又变成"静默失败"。
| 项 | 值 | 说明 |
|---|---|---|
| 位移阈值 | 400 | 不变 |
| 单轮超时 | 500 毫秒 | 按你的要求不变 |
| 重试延时 | 0(整行删掉) | 按你的要求不变 |
| 轮数 | 3 | 不变 |
| 躲避后的等待 | 成功→10分钟 / 失败→30分钟 | 不变 |
已写入 D:\rxjh2025\client\Default.ini 的 [config] 段(GBK / CRLF / 无 BOM):
挂机地图=泫渤派
回补地图=泫渤派
飞地图=泫渤派
躲避地图=泫渤派 ← 新增
留底:Default.ini.bak_加躲避地图前_20261007_0000
以后想改躲避地图,直接改这一行(写地图名,如 躲避地图=泫渤派 / 躲避地图=柳正关)。<br>工程里用 写配置项 保存其它配置时不会动这个键(只写它自己列出的键)。
| 检查 | 结果 |
|---|---|
| 补丁断言 | 4 个锚点各命中 1 次;等待离开原地 调用点仍 2;回补线程锚点未被误动 ✅ |
| 块结构 | .如果真 10/10、.如果 3/3、.计次循环 2/2、.否则 3 —— 全配平 ✅ |
| BOM / 换行 | 主本 BOM=True、CRLF 12818→12837、LF-only=0(与改前一致)✅ |
| GBK 安全 | 全文可 encode('gbk'),注释无 emoji ✅ |
| t2e | 0 错误 0 警告(18480 条日志全是「信息」级)✅ |
项目.etprj | t2e 后用 .pre15 还原,diff 一致 ✅ |
| e2t 反查 | 躲避地图 x19、两处 400, 500, 目标地图ID, 150、旧参数残留 0 ✅ |
| 分层保真 | L1 代码级 0 差异(466 子程序);L2 那 42 条是历史行尾注释损耗 ✅ |
| 二进制 | 躲避地图 0→10、【躲避地图】本次躲避目标 0→1、【躲避地图】警告 0→1 ✅ |
| 改动范围 | diff 精确 +22/−3,只落在 防杀测试,未跨子程序 ✅ |
| 场景 | 改前(23:52 实测) | 改后 |
|---|---|---|
| 在虎峡谷遇到仇人 | 目标=虎峡谷,原地回城,3 轮全判未生效(2 秒) | 目标=泫渤派(跨图),地图ID一变即成功,1~2 秒 |
| 失败时的后果 | 躲避失败 →「延长等待」→ 延迟 30 分钟挂机 | 同上(未改) |
日志上你应该看到的新行:
【躲避地图】本次躲避目标:泫渤派(地图ID 101),回城符:回城符(泫勃派)
第1次:使用回城符(泫勃派)躲避傻逼人物!正派剃头人
已到达回城地图(地图ID 101,等待 600 毫秒),脱险成功
已成功脱离危险位置(当前坐标:...),暂停挂机
若某次落地偏慢,仍会判失败 → 延迟 30 分钟。补救只需改一个数:<br>防杀测试 里 .计次循环首 (3, 重试次数) 的 3 改成 5(窗口拉到 ~3 秒,零延时不变)。
现在有了地图ID判据,第 1 次成功就 跳出循环,所以影响比之前小。
执行寻路call(8720 行)超时后不退出 — 老 bug,超时 ≥ 30 只注释了日志、没有 跳出循环。与本次无关,但仍是跨图卡死的隐患。
停止挂机 对 多坐标寻路线程 是硬杀 —— 25 处 强制结束线程,老问题。D:\AI空间\rxjh\旧版本更新_修复后.bak_躲避地图前_20261006_2359.e
D:\AI空间\rxjh\_patch\躲避地图前_20261006_2359\ ← 主本 + etprj
D:\rxjh2025\client\Default.ini.bak_加躲避地图前_20261007_0000
编译请用 D:\AI空间\rxjh\旧版本更新_修复后.e(不是 旧版本更新.e,那是过期副本)。