热血江湖助手 · 分析资料站← 报告总目录助手主页
分区:15_助手版本迭代说明源文件:背包格数识别修复_改动说明.md篇幅:3.9 KB收录:2026-10-19 17:10

「背包下晶数量只认出 4 个」修复说明

日期:2026-10-07 目标工程:旧版本更新(test.dll) 交付:旧版本更新_修复后_v9.e


一、你让我对比的两个子程序(差异就是病根)

对比项遍历背包集魂珠数量(「背包下晶数量」按钮用)<br>源码 L11010「背包空格数量」按钮里那段物品 dump<br>源码 L481<br>(你说"物品编号能全部识别"的那个)
读哪个容器#背包基址值 = 0x03BEF5D0#任务物品背包基址值 = 0x03BEF5D8
扫多少格全局_背包数 = 36(勾了「辅助背包」才 96)硬编码 60
指针守卫有(物品位置 ≤ 0 跳过)无
过滤条件还要过 是否是集魂珠(名字) 这一关只判 名字 ≠ "-1",其余全打印

关键差异是第 2 行:一个只扫 36 格,一个扫 60 格。

二、病根

本工程把 全局_背包数 写死成 36(_MainDialogWnd_创建完毕 L17),只有勾上「辅助背包」才变 96。

而开了辅助背包(扩容)的角色,背包槽位数组是连续延长到 96 格的 —— 这不是猜的,是你自己的日志作证:

一菱一.txt:  01:19:02 移动背包79 【地.凝神珠(一亿)】→ 凝神珠第1格
一菱一.txt:  01:19:02 移动背包89 【地.凝神珠(五千万)】→ 凝神珠第1格
江南雨替我说别.txt: 13:39:40 :背包集魂珠数量:45      ← 45 个,36 格装不下

所以:前 36 格全被占满 → 「背包空格数量」= 0(看着像"满包",其实只是前 36 格满了);<br>下晶买进来被游戏放进第 37 格往后 → 集魂珠数量永远只数到留在前 36 格里的那几个(4 个)。<br>接着 购买下晶 认为"还差 6 个",一直买、一直看不到 → 就是你上次那串「购买下晶超时(30 次),当前 1 / 10」。

三、改了 4 处

#位置改动
A新增子程序 检测真实背包格数只读内存自动认格数:36 格之后只要有一格满足「指针>0 + 物品编号是 10 位 100 开头 + 读得出名字」→ 返回 96,否则返回 36。垃圾数据几乎不可能同时满足三条,所以不会凭脏数据放大扫描范围
B_功能检测时钟_周期事件不勾「辅助背包」时也自动调 A(全局_背包数 = 检测真实背包格数 ()),以后不用再手勾
C是否是集魂珠名称先剔半角/全角空格、全角括号换半角再比对名单(跟当年修 是否是凝神珠 一个套路),防止"名字差一个空格就判成不是"
D「背包下晶数量」按钮 / 「背包空格数量」按钮日志加「本次扫描格数:N」;下晶按钮还会逐格打印 下晶槽N【名字】编号X(名单命中/名单未命中!) —— 一眼分清是"格子没扫够"还是"名字没对上"

四、验证

五、先别急着编译也能验(用你现在跑的 v7/v8 就行)

  1. 「辅助背包」不勾 → 点「背包下晶数量」→ 记数字(预期 4)
  2. 「辅助背包」勾上 → 再点一次 → 若数字明显变大 → 病根确认(只扫了前 36 格),v9 已自动处理,不用再手勾

六、交给你的活

用易语言打开 旧版本更新_修复后_v9.e,F7 编译成 test.dll 覆盖到 client\ 下即可。<br>编译若报错,把错误号发我(10044 之类的一般是 数组 标志位噪声,不是这次的改动)。

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