# v48 —— 用户改动合并 + 「背包满」BUG 修复 > 2026-10-12 01:15 | 产物 `旧版本更新_修复后_v48.e`(2,985,056 B,t2e 0 错 0 警,版本 1.48.0.0) --- ## 一、先把你在设计器里加的改动合并进来(纯往返对拍,没有靠猜) 你的 `.e` 是**权威版本**。做法:`e2t` 逆向你的 `旧版本更新_修复后_v47.e`(7,181,968 B = IDE 编译档) → 与我方 `t2e` 基准**按非空行逐文件对拍** → 噪声(模块目录层级、模块排序、IDE 固化的支持库常量)自动抵消, 剩下的就是你的真实改动: | # | 文件 | 差异 | 判定 | |---|---|---|---| | 1 | `窗口/MainDialogWnd.form.json` | 控件 396 → **398** | **你的**:新增 2 个控件 | | 2 | `代码/窗口程序集_MainDialogWnd.form.e.txt` | +2 行 | **你的**:新增 `_发包打怪_被单击` | | 3 | `代码/排序.list.txt` | ±146 | 噪声(模块顺序) | | 4 | `常量.e.txt` | +121 | 噪声(IDE 把支持库常量固化进工程;我方 t2e 不需要,编译一直 0 错) | | 5 | `项目.etprj` | ±1 | 噪声 | **你新增的两个控件**: | 控件名 | 类型 | 位置 | 说明 | |---|---|---|---| | `技能编号编辑框1` | 编辑框 | L=229 T=489 W=129 H=32 | 手填技能编号 | | `发包打怪` | 按钮 | L=365 T=489 W=80 H=32 | 点击 → 发一次攻击包 | **你新增的代码**(已原样并入 v48): ``` .子程序 _发包打怪_被单击 发包打怪_打选中怪 (到整数 (技能编号编辑框1.内容)) ``` 界面 form.json **整份采用你的版本**(md5 实测:e2t 导出的 form.json 与我方工程文件**字节级一致**,所以可以放心直传)。 反查确认:剔除这 2 个新控件后,其余 **396 个控件逐个一致**(含顺序、属性、所有 `Children` 索引)。 > 顺带验证:你把控件插在数组下标 1、2,IDE 自动把所有 `Children` 索引统一 +2,体系自洽; > 而 **`发包打怪`(控件名)与我 v46 写的 `发包打怪`(子程序名)同名并没有冲突** —— t2e 编译 0 错,实测通过。 --- ## 二、「背包满」BUG 修复:74 处判据 `≤ 0` → `= 0` ### 病根 `YGOnline.exe` 是 **LARGEADDRESSAWARE(3GB 感知)**,堆地址可 ≥ `0x80000000`。 易语言「整数型」是**有符号**的 → 这种地址读出来是**负数** → `物品位置 ≤ 0` 成立 → **真物品被判成空格**。 实测:背包实满 96/96,槽 52/53 的指针是 `0x828D7050` / `0x828D4038`(真物品「熱血石」,编号 800000013), 读成 -2104659888 → 助手报「背包空格数量:**2**」→ 判未满 → **回补/存卖/过滤集魂珠永不触发 → 背包永远清不空**。 ### 修复清单(共 74 处) | 变量(内存指针) | 处数 | 变量 | 处数 | |---|---|---|---| | `物品位置` | 29 | `背包基址` | 2 | | `怪物位置` | 13 | `怪物对象` | 2 | | `背包位置` | 9 | `对象位置` | 2 | | `队员对象` | 7 | `容器` | 2 | | `物品指针` | 1 | `仓库位置` | 1 + **1*** | | `装备数组 [i].物品地址` | 1 | `当前装备.物品地址` | 1 | | `人物对象` | 1 | `物品对象` | 1 | | `该格位置` | 1 | | | \* 另有 1 处特殊写法:`刷新综合仓库` 里是 `仓库位置 ≤ 65535`("低地址视为空"),同样会把负数误判 → 一并改成 `= 0`。 **未改动**(数值类,非指针,`≤ 0` 语义正确):`目标ID`、`地图ID`、`位移阈值`、`轮询毫秒`、`回补异常累计`、 `玩家ID`、`读取物品编号`、`目标地图ID`、`实际轮数`、`剩余分钟`、`出售单价`、`调试_追踪每秒上限`、`选中槽位`、`目标网络ID`。 ### 为什么零回归 空槽位存的就是 `0`。地址 <2GB 时 `= 0` 与 `≤ 0` **行为完全一致**; 对高位地址不再误判,且因为不再走"空格"分支去 `内存_读文本型` 读脏指针,**没有非法内存访问风险**。 副作用方向是「少算空格」=更容易报「满」,最坏情况只是回补白跑一趟,**不会漏报满**。 --- ## 三、验收 | 项 | 结果 | |---|---| | t2e 编译 | **0 错 0 警**,EXIT=0 | | 三道门禁(块配平 / 声明 / 变量格式) | 全部 0 问题 | | e2t 回转对比(v48 vs 你的 v47) | 主源码 **+76 / −75** = 75 处替换 + 1 行来源注释,逐条核对无意外改动 | | 界面 form.json | 与你的版本**完全相同**(8785 行) | | `.e` 内程序信息 | 名称/说明/作者/版权/1.48.0.0 全部回读通过 | | 你的新子程序 `_发包打怪_被单击` | 完整保留 | --- ## 四、下一步(需要你实测) 1. 用易语言打开 `旧版本更新_修复后_v48.e`,编译运行; 2. 进游戏看背包满时助手是否**正确报满**并触发回补/存卖(这正是本次要验的); 3. 顺带验一下新按钮:填技能编号 → 点「发包打怪」(选中怪的前提下)。 > **附注**:若你希望支持库常量也进文本工程(目前没有,也不需要 —— 编译 0 错),告诉我即可, > 但一般不必:那 121 个常量是 IDE 从支持库自动带上的。