队员表体检_调试探针
热血江湖 YGOnline.exe · 2026-09-28 · 定位"是否已组队/是否是队长 都返回假"
结论先读
两个函数开头都有:
如果真 (全局_进程句柄 ≤ 0) 返回 (假)
只要句柄无效,两个函数连内存都不读、直接返回假——这就是"都返回假"的唯一成因。
(逻辑上:读得到数据时,一个返假另一个必返真,不可能同时假。)
① 调试探针(跑一次定位)
.版本 2
.子程序 队员表体检_调试, , , 打印句柄+每槽原始值,定位两个函数为何返回假
.局部变量 队员对象, 整数型
.局部变量 i, 整数型
.局部变量 有效, 整数型
.局部变量 队长, 整数型
挂机信息.加入文本 (“==== 队员表体检 ====” + #换行符)
挂机信息.加入文本 (“全局_进程句柄 = ” + 到文本 (全局_进程句柄) + #换行符)
.如果真 (全局_进程句柄 ≤ 0)
挂机信息.加入文本 (“★ 句柄无效(≤0):两个函数都直接返回假,这就是原因!” + #换行符)
挂机信息.加入文本 (“ 解决:确认CE桥已连上游戏、给 全局_进程句柄 赋了有效句柄(>0)” + #换行符)
返回 ()
.如果真结束
.计次循环首 (8, i)
队员对象 = 内存_读整数型 (全局_进程句柄, #队员基址 + 4 × (i - 1))
有效 = 内存_读整数型 (全局_进程句柄, 队员对象 + #队员有效标志)
队长 = 内存_读整数型 (全局_进程句柄, 队员对象 + #队长标志值)
挂机信息.加入文本 (“槽” + 到文本 (i) + “ 对象=” + 到文本 (队员对象) + “ 有效=” + 到文本 (有效) + “ 队长=” + 到文本 (队长) + #换行符)
.计次循环尾 ()
挂机信息.加入文本 (“==== 体检结束 ====” + #换行符)
② 现象对照表
| 现象 | 根因 | 修法 |
| A首行就"句柄无效(≤0)" | 全局_进程句柄 ≤ 0,两函数全早退返假 | 进游戏、CE桥连上、给句柄赋有效值(>0)后再调 |
| B句柄>0,8槽"对象"全0/很小 | CE桥挂64位CE,读 0x03BF7E18 返回nil→0 | 桥改挂32位CE(D:\登录源码数据存储账号\CE+调试V7.6\csrss.exe) |
| C对象正常,但"有效"全0 | #队员有效标志(816)偏移在当前版本不对 | 重新活体验证816是否仍=1,必要时重定位 |
| D对象正常、有效有=1、但仍返假 | 不可能,说明跑的不是这份代码/有缓存 | 清缓存、确认调用的是当前版本 |
| E有效=1 且 队长=1 的槽存在 | 别人是队长,是否是队长=假是对的 | 同时 是否已组队 应返真(若返假检查旧版) |
③ 两个函数本身(备查,勿改)
.版本 2
.子程序 是否已组队, 逻辑型, , 队员表只存“其他队员”不含自己;任一有效队员即视为已组队
.局部变量 队员对象, 整数型
.局部变量 i, 整数型
.局部变量 有效数, 整数型
.如果真 (全局_进程句柄 ≤ 0)
返回 (假)
.如果真结束
.计次循环首 (8, i)
队员对象 = 内存_读整数型 (全局_进程句柄, #队员基址 + 4 × (i - 1))
.如果真 (队员对象 ≤ 65536)
到循环尾 ()
.如果真结束
.如果真 (内存_读整数型 (全局_进程句柄, 队员对象 + #队员有效标志) = 1)
有效数 = 有效数 + 1
.如果真结束
.计次循环尾 ()
返回 (有效数 ≥ 1)
.版本 2
.子程序 是否是队长, 逻辑型, , 遍历队员表,任一有效队员带队长标志=1→别人是队长→假;否则自己即队长→真(含单人)
.局部变量 队员对象, 整数型
.局部变量 i, 整数型
.如果真 (全局_进程句柄 ≤ 0)
返回 (假)
.如果真结束
.计次循环首 (8, i)
队员对象 = 内存_读整数型 (全局_进程句柄, #队员基址 + 4 × (i - 1))
.如果真 (队员对象 ≤ 65536)
到循环尾 ()
.如果真结束
.如果真 (内存_读整数型 (全局_进程句柄, 队员对象 + #队员有效标志) = 1 且 内存_读整数型 (全局_进程句柄, 队员对象 + #队长标志值) = 1)
返回 (假)
.如果真结束
.计次循环尾 ()
返回 (真)
常量(已与 队员偏移全表_0927 核对一致)
.常量 队员基址, "62881304" ' 0x03BF7E18
.常量 队员有效标志, "816" ' +0x330
.常量 队长标志值, "864" ' +0x360