← 返回总索引队员表体检_调试探针🔑 卡密引导09_组队与队员/队员表体检_调试_代码.html

队员表体检_调试探针

热血江湖 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
热血江湖助手 · 分析资料站← 报告总目录助手主页