════ 发包写法_销毁物品 v1(0926)════ 【你给的格式】 000000008503180000 | 17 | 000000 | 6ADC143C | 000000000100000000000000000000 000000008503180000 | 17 | 000000 | 6BDC143C | 000000000100000000000000000000 17 = 物品位置,6BDC143C = 物品编号 【拆字节】共 31 字节 = 62 个十六进制字符,逐段对齐: 偏移 字节 说明 0~3 00 00 00 00 ① 4 字节固定前缀(所有包都有) 4~8 85 03 18 00 00 ② 固定头 5 字节(85=功能号,0318=包体相关) 9 17 ③ 物品格号,1 字节(0~95 够用) 10~12 00 00 00 ④ 固定 3 字节零 13~16 6A DC 14 3C ⑤ 物品编号 4 字节小端 = 0x3C14DC6A 17~20 00 00 00 00 ⑥ 固定 4 字节零 21~24 01 00 00 00 ⑦ 数量 4 字节小端 = 1(销毁 1 个) 25~30 00 00 00 00 00 00 ⑧ 尾部 6 字节零 验证:`00000000`(4) + `8503180000`(5) + `17`(1) + `000000`(3) + 4 + `00000000`(4) + 4 + `000000000000`(6) = 31 ✓ 尾部 `000000000100000000000000000000` 拆开正好 = {0,0,0,0} + 数量1 + 6 字节零。 ════════════════════════════════════════ ── 一、最省事版:编号直接从内存读(推荐)── .版本 2 .子程序 发包销毁物品, 逻辑型, 公开, 销毁/丢弃背包指定格子的物品 .参数 物品格子, 整数型, , 背包格子 0~95,样本用的是 17 .局部变量 背包基址, 整数型 .局部变量 物品位置, 整数型 .局部变量 物品编号, 字节集 .局部变量 封包, 字节集 背包基址 = 内存_读整数型 (全局_进程句柄, #背包基址值) 物品位置 = 内存_读整数型 (全局_进程句柄, 背包基址 + 4 × 物品格子 + #背包物品位置值) .如果真 (物品位置 = 0) 挂机信息.加入文本 (自定义时间 () + “发包销毁物品:格” + 到文本 (物品格子) + “ 是空格,跳过”) 返回 (假) .如果真结束 物品编号 = 内存_读字节集 (全局_进程句柄, 物品位置 + #背包物品编号值, 4) ' ① 固定头 9 字节 = 前缀4 + 85 03 18 00 00 ' ② 格号 1 字节 ' ③ 固定 3 字节零 ' ④ 物品编号 4 字节(内存读出来的原样字节,不用手工拆) ' ⑤ 固定 4 字节零 ' ⑥ 数量 4 字节小端,样本固定 1 ' ⑦ 尾部 6 字节零 ' 合计 31 字节 封包 = 机器码到字节集 (“000000008503180000”) 封包 = 封包 + 到字节 (位与 (物品格子, 255)) 封包 = 封包 + { 0, 0, 0 } 封包 = 封包 + 物品编号 封包 = 封包 + { 0, 0, 0, 0 } 封包 = 封包 + { 1, 0, 0, 0 } 封包 = 封包 + 取空白字节集 (6) 发包Call (封包, 取字节集长度 (封包)) 挂机信息.加入文本 (自定义时间 () + “发包销毁物品:” + 到文本 (转换_字节集到十六进制 (封包)) + #换行符) 返回 (真) ★ 第 ⑥ 段写死 {1,0,0,0} 就是"销毁 1 个"。要销毁 N 个改成下面的写法: .局部变量 数量, 整数型 数量 = 1 ' 想销毁几个填几 封包 = 封包 + 到字节 (位与 (数量, 255)) + 到字节 (位右移 (数量, 8)) 封包 = 封包 + 到字节 (位右移 (数量, 16)) + 到字节 (位右移 (数量, 24)) ── 二、参数版(编号由调用方传,不读内存)── .子程序 发包销毁物品_传编号, 逻辑型, 公开 .参数 物品格子, 整数型, , 背包格号 0~95 .参数 物品编号, 长整数型, , 4 字节编号,如 1009311338(= 0x3C14DC6A) .参数 销毁数量, 整数型, , 默认 1 .局部变量 编号, 长整数型 .局部变量 封包, 字节集 .如果真 (销毁数量 < 1) 销毁数量 = 1 .如果真结束 ' 长整数转无符号 32 位再拆,避免负数算术右移出错 编号 = 物品编号 .如果真 (编号 < 0) 编号 = 编号 + 4294967296 .如果真结束 封包 = 机器码到字节集 (“000000008503180000”) 封包 = 封包 + 到字节 (位与 (物品格子, 255)) 封包 = 封包 + { 0, 0, 0 } 封包 = 封包 + 到字节 (位与 (编号, 255)) + 到字节 (位右移 (编号, 8)) 封包 = 封包 + 到字节 (位右移 (编号, 16)) + 到字节 (位右移 (编号, 24)) 封包 = 封包 + { 0, 0, 0, 0 } 封包 = 封包 + 到字节 (位与 (销毁数量, 255)) + 到字节 (位右移 (销毁数量, 8)) 封包 = 封包 + 到字节 (位右移 (销毁数量, 16)) + 到字节 (位右移 (销毁数量, 24)) 封包 = 封包 + 取空白字节集 (6) 发包Call (封包, 取字节集长度 (封包)) 挂机信息.加入文本 (自定义时间 () + “发包销毁物品:” + 到文本 (转换_字节集到十六进制 (封包)) + #换行符) 返回 (真) ── 三、现成验证包(原样两条,可直接复制去发)── 销毁 第 17 格 / 编号 0x3C14DC6A: 00000000850318000017000000 6ADC143C 000000000100000000000000000000 (去掉空格连起来发:000000008503180000170000006ADC143C000000000100000000000000000000) 销毁 第 17 格 / 编号 0x3C14DC6B(隔壁那个): 000000008503180000170000006BDC143C000000000100000000000000000000 ✅ 收到 = 格号 17 / 编号对 / 31 字节长度全对 ❌ 无反应 → 依次试: a) 尾部 6 字节零去掉,发 25 字节 b) 第 ⑥ 段的 4 字节零去掉,发 27 字节 c) 头部第 5 字节 85 换成 84 或 86 d) 数量段改成 2 条不同物品交叉试,别连着秒发(间隔 ≥ 500ms) ── 四、注意 ── 1. 格号字段只有 1 字节,背包最多 96 格,够用;超过 255 会被截掉高位。 2. 物品编号必须和你实际要销毁的那件对上,发错编号会销毁别的物品 —— 发之前 最好把 格号 → 名称(物品位置+#背包物品名称值) 打出来核对一遍。 3. 编号若来自 内存_读字节集(物品位置+#背包物品编号值, 4),注意它和开店包用的 是同一个字段(偏移 #背包物品编号值 = 27),样本里的 6ADC143C 就是这个量级。 4. 用同一格连续销毁时,每发一次间隔 500ms 以上,别连着秒发。 ════════════════════════════════════