热血江湖助手 · 分析资料站← 报告总目录助手主页
分区:15_助手版本迭代说明源文件:跨图坐标解析修复_改动说明.md篇幅:5.2 KB收录:2026-10-19 17:10

跨图脚本坐标解析修复(全角括号 1 字节偏移)

日期:2026-10-07<br>交付:旧版本更新_修复后.e(md5 817c42ccb3fe5b5f64b1c5bf6ee7efdd)<br>回滚:旧版本更新_修复后.bak_括号解析前_20261007_0219.e(md5 615ba4817fe9cb0f50add3460fd67d92)


一、现象(你的日志)

02:17:15 【跨图】进度 2/80:去 (?44,1589),现在 (413,1591) 距离 413,在 泫渤派
02:17:21 【寻路】还在走 (0,1589),现在 (256,1595),还差 256,已等约 5 秒
02:17:34 【寻路】超时放弃:发了 90 次寻路指令还没走到 (0,1589)

三条线索串起来:

现象含义
打印 (?44,1589)解析出来的 X 是字符串 ?44,不是 444
心跳里目标变成 (0,1589)到整数("?44") = 0,游戏收到的目标是 (0,1589)
距离 413起点 (413,1591) 到 (0,1589) 的距离 = 413 ✓ 反向印证目标 X 已经是 0

所以人物不是走不动,是根本没收到合法目标,在原地打转 15 秒后超时。

二、根因

取括号内容 子程序是整个跨图脚本的唯一参数解析入口,原写法:

左括号 = 寻找文本 (行文本, “(”, , 假)
.如果真 (左括号 = -1)
    左括号 = 寻找文本 (行文本, “(”, , 假)      ' ← 全角
.如果真结束
...
返回 (取文本中间 (行文本, 左括号 + 1, 右括号 - 左括号 - 1))   ' ← 按 1 字节括号推进

易语言的 寻找文本 / 倒找文本 / 取文本中间 全部按「字节」索引,而全角 ( = 2 字节(GBK A3 A8)。寻路call(444,1589) 里 ( 起始于第 9 字节:

字节序号  1  2  3  4  5  6  7  8  | 9  10 | 11 12 13 | 14 | 15 16 17 18 | 19 20 | 21
内容      寻 路 c  a  l  l  (A3  A8) 4  4  4   ,  1  5  8  9   (A3 A8)
                                ↑
                          代码从这里(9+1=10)开始取 → 取到 A8

A8 和后面的 4 拼成一个非法 GBK 字符 → 显示 ?,于是 444 被解析成 ?44。

首字符永远丢半个字节,这解释了你看到的所有 ? 开头的坐标。

三、修复

按括号实际宽度推进:

.如果真 (左括号 > 0 且 右括号 > 左括号)
    ' 全角括号占 2 字节:起点与长度都按括号实际宽度推进,否则首字符会被截掉半个字节
    .如果 (寻找文本 (行文本, “(”, , 假) ≠ -1)          ' 半角括号:1 字节
        返回 (取文本中间 (行文本, 左括号 + 1, 右括号 - 左括号 - 1))
    .否则                                              ' 全角括号:2 字节
        返回 (取文本中间 (行文本, 左括号 + 2, 右括号 - 左括号 - 2))
    .如果结束
.如果真结束
返回 (“”)

四、影响面(一次性全好)

取括号内容 是所有括号指令的公共入口,改这一处全部受益:

指令修复前修复后
寻路call(444,1589)?444,1589 → X=0 ✗444,1589 ✓
对话(南明湖 警备兵)?厦骱? 警备兵 ✗南明湖 警备兵 ✓
对话选项(南明湖 警备兵,1)?厦骱? 警备兵,1 ✗正确 ✓
发包(0000…4A00…)?0000… 发出错包 ✗原包正确 ✓
坐标移动(169,0,576)169,0,576 ✓169,0,576 ✓(半角,未受影响)
跨地图(-20,-247,-2345,1301)正确 ✓正确 ✓(半角,未受影响)
等待(10)10 ✓10 ✓(半角,未受影响)
也就是说:南明洞那个「对话选项」之前其实也是坏的,进洞那一步同样会失败;发包 指令同理。这次一并治好。

五、验证(全绿)

项结果
字节级模拟(12 个真实指令)全角用例 旧实现 9 个错 → 新实现 0 个错;半角用例新旧完全一致
t2e 回转编译0 错误 0 警告,SUCC
e2t 反查保真(L1 代码级)0 差异,470 个子程序一致
配平.如果 ( +1、.否则 +1、.如果结束 +1,.如果真 系列 +0(未动既有结构)
二进制取证(GBK)ALL PASS(修复注释 + 11 项旧能力全在)
改动范围1 个 hunk、+6 / −1,挂机寻路新 等其它子程序一个字节没动
BOM / 换行BOM 在文件开头 ✓;裸 LF = 0 ✓

六、下一步(你)

  1. F7 编译 旧版本更新_修复后.e
  2. 再跑一次夸图,看这两种日志:

修复前

【跨图】进度 2/80:去 (?44,1589),现在 (413,1591) 距离 413,在 泫渤派
【寻路】超时放弃:发了 90 次寻路指令还没走到 (0,1589)

修复后(应该长这样)

【跨图】进度 2/80:去 (444,1589),现在 (413,1591) 距离 31,在 泫渤派
【跨图】√ 这一步成功:寻路call(444,1589)
  1. 如果还看到 ? 开头的坐标或 X=0,把日志再贴给我。
关于 02:17:46 【停止】界面上的「停止挂机」按钮被点了:那是按钮点击日志,本次改动没碰它。如果是你自己点的,忽略;如果确实没点,说一声,我去查是不是有时钟或功能检测误触发了它。
本页由 Markdown 报告自动转排;如需原始 md,可在原会话工作区取用。