热血江湖助手 · 分析资料站← 报告总目录助手主页
分区:15_助手版本迭代说明源文件:凝神珠判断统一_改动说明.md篇幅:8.2 KB收录:2026-10-19 17:10

凝神珠判断统一 — 改动说明-

日期:2026-10-06 14:29<br>改动文件:旧版本更新.代码/代码/窗口程序集_MainDialogWnd.form.e.txt(12568 → 12569 行)


一、为什么要改

工程里判断「一件物品是不是凝神珠」的地方原本有 3 套各自硬编码的写法,而且名单互不一致:

位置原写法名单
遍历背包凝神珠数量调用 是否是凝神珠 ()—
自动使用凝神珠(2 处)寻找文本 (物品名称, "凝神珠", , 假) ≠ -1无名单,只要名字里含「凝神珠」就算
遍历凝神珠位置是否为空寻找文本 ("地.凝神珠(十万)/天.凝神珠(十万)/…", 物品名称, , 假) = -1含「天.」、括号前无空格
是否是凝神珠 () 本体寻找文本 ("地.凝神珠 (十万)/…/", 物品名称, , 假) ≠ -1只有「地.」、括号前有空格

三个问题:

  1. 名单对不上 — 空位子程序的名单有天.、无空格;是否是凝神珠 只有地.、有空格。谁改名单都得改两处,漏一处就静默失效。
  2. 自动使用凝神珠 用的是模糊匹配 — 寻找文本("凝神珠") 会把任何名字带「凝神珠」三个字的物品都算进来(含未完成的珠子),和另外两处的严格名单语义不同。
  3. 遍历凝神珠位置是否为空 注释与代码矛盾 — 注释写「不覆盖,跳过该格」,代码却是 返回 (凝神珠格子 - 1),把已被占用的格子当成空位返回,会往有东西的格子上发包。

现在统一成「只维护 是否是凝神珠 () 一处名单」。


二、具体改了什么(4 处)

1. 自动使用凝神珠 — 源物品判断(原 9894 行)

- .如果真 (寻找文本 (物品名称, “凝神珠”, , 假) ≠ -1)
+ .如果真 (是否是凝神珠 (物品名称) = 真)

效果:不再误搬「名字里带凝神珠但不是成品珠」的东西,与背包计数口径一致。

2. 自动使用凝神珠 — 回读目标格校验(原 9906 行)

- .如果真 (寻找文本 (目标名称, “凝神珠”, , 假) ≠ -1)
+ .如果真 (是否是凝神珠 (目标名称) = 真)

效果:搬完回读目标格,用同一套名单判定,避免「校验说成功、其实搬错东西」。

3. 遍历凝神珠位置是否为空 — 名单判断(原 9948 行)

- .如果真 (寻找文本 (“地.凝神珠(十万)/天.凝神珠(十万)/…/”, 物品名称, , 假) = -1)
+ .如果真 (是否是凝神珠 (物品名称) = 假)

4. 遍历凝神珠位置是否为空 — 占用格不再被当成空位(原 9949~9953 行)

  .否则
      物品名称 = 编码_BIG5到简体 (内存_读文本型 (全局_进程句柄, 物品位置 + #背包物品名称值))
      .如果真 (是否是凝神珠 (物品名称) = 假)
          ' 【修正】非凝神珠物品占格 → 不覆盖,跳过该格,继续往后找真空格
          ' (原代码此处误写 返回 (凝神珠格子 - 1),会把占用格里的东西覆盖掉)
          写日志 (…“格被[” + 物品名称 + “]占用,跳过。”…)
      .如果真结束
      到循环尾 () ' 该格已有物品(凝神珠或其它)都不是空位,继续遍历下一格
  .如果结束

行为变化:改前「格子里有非凝神珠物品」→ 直接返回该格下标(会被覆盖);改后 → 跳过,继续往后找真空格;6 格都不空则返回 -1,干脆不搬。

到循环尾 () 写在 .如果 分支里是工程标准写法(全文 83 处先例)。

最终结果

是否是凝神珠 (...) 在工程内共 4 个调用点,名单只在 是否是凝神珠 一处维护:


三、验证记录

步骤结果
字节级写入(保留 UTF-8 BOM + 纯 CRLF)BOM ✓ / CRLF 12568 / LF-only 0 ✓
块结构配平(.如果 / .如果真 / 循环全闭合)配平 ✓
e2txt t2e 回转0 错误 0 警告,日志级别只有 [信息] 18470 条;末尾 SUCC ✓
4 个子程序方法解析全部 1 条解析成功 ✓
e2t 往返比对改动行 0 差异;总差异仅为「, 数组 标志位 / 空格」格式归一化噪声 ✓
旧硬编码残留扫描寻找文本 (物品名称/目标名称, "凝神珠"…)、地.凝神珠(十万) 残留 0 处 ✓

未做:易语言 F7 编译验证。原因是操作时你正开着易语言 IDE,自动化探针会抢前台焦点,且可能在同一个 IDE 实例里打开 out.e 冲掉你未保存的编辑。请在 IDE 里自行 F7 编译一次确认。


四、需要你处理的一件事

是否是凝神珠 () 的名单目前是:

“地.凝神珠 (十万)/地.凝神珠 (五百万)/地.凝神珠 (五千万)/地.凝神珠 (一亿)/”

你贴的空位子程序名单是 地.凝神珠(十万)/天.凝神珠(十万)/…(括号前无空格,且含「天.」)。

按你的选择,名单由你自己在 IDE 里补。请对照游戏内真实物品名确认两件事:

  1. 要不要包含 「天.」(若天珠也要搬,必须加)
  2. 括号前到底有没有空格(地.凝神珠 (十万) vs 地.凝神珠(十万))——这一字之差会让名单整条失效

改完之后,自动使用凝神珠 / 遍历凝神珠位置是否为空 / 遍历背包凝神珠数量 三处会同时生效,不用再改别的地方。


五、顺带发现(本次未改,供你决定)

  1. 发包_移动物品 的参数注释是错的。

注释写「所在背包位置 背包格子(1基),如 35」「凝神珠位置 凝神珠目标位置(1基),如 1/2/6」,<br>但函数体里封包样本写明是 0 基:<br>``<br>000000001A000C000100 0D 00 AB 00 00 00 01000000 ' 可用14到1 → 0x0D=13=14-1, 目标 0x00=0=1-1<br>000000001A000C000100 0E 00 AB 00 01 00 01000000 ' 可用15到2 → 0x0E=14=15-1, 目标 0x01=1=2-1<br>`<br>调用处传的也是 0 基(发包_移动物品 (物品格子 - 1, 凝神位置)`),代码是对的,注释写错了。<br>建议把两处注释的「1基」改成「0基」,避免以后有人按注释传参。

  1. 自动使用凝神珠 回读校验有一段冗余赋值。
   物品位置 = 内存_读整数型 (全局_进程句柄, #凝神珠背包基址值)   ← 这行无用,紧接着被覆盖
   背包基址 = 内存_读整数型 (全局_进程句柄, #凝神珠背包基址值)
   物品位置 = 内存_读整数型 (全局_进程句柄, 背包基址 + 4 × 凝神位置 + #背包物品位置值)

第一行读出来的值赋给 物品位置 后立刻被第三行覆盖,可删。

  1. 保险丝数字注释不一致。

.如果真 (已移动 ≥ 10) 里的实时上限是 10,但下面被注释掉的日志写「已达单次最大移动数30」,且失败分支里写 已移动 = 30。三处口径不统一,只是注释问题,不影响运行。


六、产物与回滚

回滚:把备份目录里的 代码/窗口程序集_MainDialogWnd.form.e.txt 拷回主本即可。

本页由 Markdown 报告自动转排;如需原始 md,可在原会话工作区取用。