日期: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」。
| # | 位置 | 改动 |
|---|---|---|
| A | 新增子程序 检测真实背包格数 | 只读内存自动认格数:36 格之后只要有一格满足「指针>0 + 物品编号是 10 位 100 开头 + 读得出名字」→ 返回 96,否则返回 36。垃圾数据几乎不可能同时满足三条,所以不会凭脏数据放大扫描范围 |
| B | _功能检测时钟_周期事件 | 不勾「辅助背包」时也自动调 A(全局_背包数 = 检测真实背包格数 ()),以后不用再手勾 |
| C | 是否是集魂珠 | 名称先剔半角/全角空格、全角括号换半角再比对名单(跟当年修 是否是凝神珠 一个套路),防止"名字差一个空格就判成不是" |
| D | 「背包下晶数量」按钮 / 「背包空格数量」按钮 | 日志加「本次扫描格数:N」;下晶按钮还会逐格打印 下晶槽N【名字】编号X(名单命中/名单未命中!) —— 一眼分清是"格子没扫够"还是"名字没对上" |
t2e 生成 旧版本更新_修复后_v9.e(2,814,525 B):0 错误 0 警告e2t 回转对拍:0 错误 0 警告,新增子程序与 4 处改动逐字保留;与文本主本的其余差异全部是老噪声(注释缩进、数组 标志位、空行),无功能差异窗口程序集_MainDialogWnd.form.e.txt.bak_背包格数修复前_20261007_203205用易语言打开 旧版本更新_修复后_v9.e,F7 编译成 test.dll 覆盖到 client\ 下即可。<br>编译若报错,把错误号发我(10044 之类的一般是 数组 标志位噪声,不是这次的改动)。