2026-10-07 01:20 | 目标文件旧版本更新_修复后.e| md559d5623ad8c0e252ac9ecc704e4debce
0000 0000 90 00 18 00 09 00 00 00 00 00 00 00 4A 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
└ 4字节零 ┘ └ 命令头 ─┘ └──── 子命令 9 ────────┘ └──── NPC 74 ──────────┘ └──── 参数 1 ────────┘
32 字节 = 8 字节包头 + 3 个 8 字节字段。 这跟工程里已有的三个封包完全同构:
| 来源 | 包体 | 子命令 | 字段2 | 字段3 |
|---|---|---|---|---|
发包对话NPC(11056 行) | 0000000090001800 + 01… + NPC | 1 打开对话 | NPC编号 | (工程手写的短包,只发到 NPC 那一字节) |
发包关闭商店 上方注释里的真实抓包(11089 行) | 0000000090001800020000000000000003… | 2 关闭对话 | NPC编号 | 0 |
发包打开商店(11076 行) | 00000000900018000300000000000000 + NPC + 16 个零 | 3 打开商店 | NPC编号 | 0 |
| 你给的这一包 | 同上 | 9 ?? | 74 南明湖 警备兵 | 1 |
4313 行(10 分钟无经验救场) | 同上 | 163 | 6 | 1 |
所以:90 00 18 00 是「NPC 交互」命令组,第 9 字节起是子命令。你这个包的 4A(=74) 正好落在工程放 NPC 编号的位置上 —— 和上一轮那张编号表对上了,这不是巧合。
我的判读:子命令 9 + NPC编号 + 参数1 = 「对该 NPC 选第 1 个对话选项」。<br>工程里 90 00 18 家族只有 1/2/3 三个子命令(对话/关闭/商店),确实没有「选选项」,所以你这一包补上了唯一缺的一环 —— 这跟我上一轮说「若弹选项框就得抓一次包」完全吻合。
一个我无法从字节里确定、需要你实测的点:这一包是否需要先发子命令1打开对话。
我的实现是两步都发(先 1 再 300ms 后 9),两种情况下都能跑通。
执行跨图脚本 一个子程序,+82 / −3)对话选项(NPC名,选项号)对话选项(南明湖 警备兵,1)
NPC名 走 取NPC编号 表(74=南明湖 警备兵,上一轮已加)→ 查不到就报错、不瞎发选项号 不填默认 1子命令1(打开对话) → 300ms → 子命令9 + 选项号 → 轮询地图最多 5 秒发包(十六进制串)发包(000000009000180009000000000000004A000000000000000100000000000000)
把抓到的包原样发出去,复用工程里现成的 机器码到字节集。<br>这条是给你自己试包用的 —— 以后你再抓到任何包,不用等我改代码,直接写进 夸图.ini 试。
十六进制请用大写、偶数长度(和工程其它硬编码包一致)。
原来 执行寻路call 的超时判据是「距离 < 20」。跨图那几秒坐标是脏的,所以过图点必然读不到 < 20 → 报超时 → 记为失败,还容易凑够 5 次失败把整段脚本中止。
现在:超时后先看地图变没变。变了 → 判成功,日志写明「这个是过图点…算成功」。
【跨图】√ 这个是过图点:没走到坐标,但地图已从 泫勃派 变成 南明湖,算成功
夸图.ini 更新了两处[南明湖]
…(51 个点)…
寻路call(-20,-2345) ← 泫渤派→南明湖 的过图点
等待(10) ← 【新增】按你的口径:这步单独执行完等 10 秒
[南明洞]
…(17 个点)…
对话选项(南明湖 警备兵,1) ← 【改】原来是 对话(南明湖 警备兵)
[结束]
等待(10) 走的是引擎原有的 F 指令,没有新增语法。
选 夸图 → 点「开始寻路」,一行控件都不用动。日志会按这个顺序出现:
========== 开始跨图脚本:夸图 ==========
【跨图】共 73 行,开始逐行执行
【跨图】进入段:【南明湖】,当前在 泫勃派
…(51 个点)…
【跨图】√ 这个是过图点:没走到坐标,但地图已从 泫勃派 变成 南明湖,算成功 ← 过图点
【跨图】等待 10 秒
【跨图】进入段:【南明洞】,当前在 南明湖
…(17 个点)…
【跨图】对话选项:【南明湖 警备兵】编号 74,选第 1 项,当前在 南明湖
【跨图】√ 对话选项生效,已进入 南明洞 ← 成功标志
========== 跨图脚本结束:成功 XX 个动作 ==========
| 日志 | 含义 |
|---|---|
| √ 对话选项生效,已进入 南明洞 | 进洞成功,全链路通了 |
| × 对话选项发出去了但地图没变 | 选项号不对,把那行的 1 换成 2/3 再试 |
| 对话选项:NPC编号表里查不到【…】 | 名字和表里不一个字不差(中间是半角空格 0x20) |
参数想调:选项号改 对话选项(…,N);过图等待改 等待(10) 的 10。
| 项 | 结果 |
|---|---|
| 模板自检 | 补丁脚本内置断言:拼出来的 32 字节 == 你抓到的包(逐字节相等才允许写盘) |
| 锚点唯一性 | 8 个锚点全部命中 1 次 / 新标识命中 0 次(确认没有残留旧实现) |
| 块配平 | 如果真 +5/+5、如果/结束 +5/+5、否则 +5、判断循环 +1/+1、计次循环 +0/+0、局部变量 +3、跳出循环 +1 |
| BOM / 换行 | BOM 在开头(补丁脚本里带硬断言,上轮 F 过这个坑)、裸 LF = 0 |
| GBK 安全 | 通过(无 BMP 外字符 → 不会有整行注释被 t2e 丢弃) |
| t2e 回编译 | 0 错误 0 警告(SUCC) |
.etprj | 已用 .pre21 还原(425 字节 + BOM 回来了) |
| e2t 往返 + L1 | 代码级 0 差异,子程序数 470(未变),全局行一致 |
| 二进制取证 | ALL PASS:14 条新文案/标识全部落地、旧文案「还得再选一次才进得去」= 0、既有能力(等待离开原地 / 取对应回城符名称 / 发包飞图 / 防杀测试 / 74 两条编号)都在 |
| 改动范围 | 5 个 hunk、+82 / −3,只碰 执行跨图脚本 |
交付:D:\AI空间\rxjh\旧版本更新_修复后.e(md5 59d5623ad8c0e252ac9ecc704e4debce)<br>回滚备胎:旧版本更新_修复后.bak_对话选项前_20261007_0119.e<br>留底:_patch/对话选项前_20261007_0119/、_patch/项目.etprj.pre21、_patch/夸图.ini.pre21
你回的是「执行多坐标寻路(记录坐标组合框)→ 到挂机点 → 开始挂机」。我把链路查通了:
| 步骤 | 谁负责 | 现状 |
|---|---|---|
用 记录坐标组合框 里选的脚本跑寻路 | _开始寻路按钮_被单击 → 开启多坐标寻路 → 跨图脚本走 执行跨图脚本、纯坐标走 多坐标寻路 | 已有(本轮没动这段分流) |
| 到挂机点 | 挂机寻路新(点「开始挂机」后 启动线程 (&挂机寻路新, , 挂机寻路线程)) | 已有:它自己会回城/飞图到 挂机地图组合框、再 寻路call (挂机X, 挂机Y) 走到挂机点(7600 / 7668 行,挂机X/挂机Y 取自 挂机坐标x/y编辑框) |
| 开始挂机 | 「开始挂机」按钮 → _开始挂机_被单击 | 已有 |
结论:整条流程都是现有能力,不需要新代码。 你按老习惯点两次就行:<br>① 选脚本 → 点「开始寻路」 ② 到了以后点「开始挂机」(它会自己把你带到挂机点)。
唯一"可选"的自动化:让「开始寻路」跑完自动帮你触发「开始挂机」。
我故意没做,原因是从跨图脚本所在的工作线程去调_开始挂机_被单击,要同时改开始挂机.标题、更新数据时钟.时钟周期、功能检测时钟.时钟周期这些界面对象,
还要拉挂机寻路线程—— 做错了会出现「标题变成停止挂机、但实际没在挂机」这种半死状态,
比发包危险。要做的话正确姿势是在工作线程里置一个标志、由界面时钟来真正点,
属于另一块改动。你要就说一声。
D:\rxjh2025\client\坐标脚本\夸图.ini.bak_20261007_005334(我上轮合成时留的备份)已移出到 坐标脚本_备份\ —— 那个目录是 记录坐标组合框 的下拉数据源(列目录 (“坐标脚本\.”)),<br>放进备份会让下拉框多出一堆垃圾项。移走后目录里已无 .bak/.tmp。
南明湖入口警卫兵.ini 改名成 南明洞.ini 之后,我核对过:夸图.ini 的 [南明湖] 段 == 南明湖.ini(51 行全部逐行相同)、<br>[南明洞] 段 == 南明洞.ini(17 行全部逐行相同)—— 没有漂移,段名也对得上了,不需要重新合成。