是否已组队 · 判断子程序
热血江湖 YGOnline.exe · 2026-09-28 · 依据队员基址 0x03BF7E18(62881304,0927 定稿 / 0928 仍有效)
队员表只存"其他队员"不含自己 → 任一有效槽 = 已组队
判定原理8 槽指向"其他队员"记录
队员表 8 个槽,每槽 4 字节,指向一条"其他队员"记录(不含自己)。
槽值 = 队员对象指针(≤65536 视为空槽);对象 +816 = 有效标志(1=真队员);+864 = 队长标志;+824 = Big5 名字;+820 = 队员ID。
表中只存"其他队员" → 有效数 ≥ 1 = 已组队;有效数 = 0 = 未组队。队伍总人数 = 有效数 + 1。
① 常量(填进工程常量表)
.常量 队员基址, "62881304" ' 0x03BF7E18,队员表基址,0927定稿/0928仍有效
.常量 队员有效标志, "816" ' +0x330,1=真实队员
.常量 队长标志值, "864" ' +0x360,1=队长
.常量 队员序号值, "820" ' +0x334,队员ID(2字节)
.常量 队员名称值, "824" ' +0x338,Big5 名字
② 是否已组队(核心)
.版本 2
.子程序 是否已组队, 逻辑型, , 队员表只存“其他队员”不含自己;任一有效队员即视为已组队
.局部变量 队员对象, 整数型
.局部变量 i, 整数型
.局部变量 有效数, 整数型
.如果真 (全局_进程句柄 ≤ 0)
返回 (假)
.如果真结束
.计次循环首 (8, i)
队员对象 = 内存_读整数型 (全局_进程句柄, #队员基址 + 4 × (i - 1))
.如果真 (队员对象 ≤ 65536)
到循环尾 ()
.如果真结束
.如果真 (内存_读整数型 (全局_进程句柄, 队员对象 + #队员有效标志) = 1)
有效数 = 有效数 + 1
.如果真结束
.计次循环尾 ()
写日志 (自定义时间 () + "有效数" + 到文本 (有效数) + #换行符)
返回 (有效数 ≥ 1)
③ 取队伍人数(含自己)
.版本 2
.子程序 取队伍人数, 整数型, , 含自己;未组队返回 0
.局部变量 队员对象, 整数型
.局部变量 i, 整数型
.局部变量 有效数, 整数型
.如果真 (全局_进程句柄 ≤ 0)
返回 (0)
.如果真结束
.计次循环首 (8, i)
队员对象 = 内存_读整数型 (全局_进程句柄, #队员基址 + 4 × (i - 1))
.如果真 (队员对象 ≤ 65536)
到循环尾 ()
.如果真结束
.如果真 (内存_读整数型 (全局_进程句柄, 队员对象 + #队员有效标志) = 1)
有效数 = 有效数 + 1
.如果真结束
.计次循环尾 ()
.如果 (有效数 = 0)
返回 (0)
.否则
返回 (有效数 + 1)
.如果结束
④ 队员基址体检(防版本更新静默错位)
.版本 2
.子程序 队员表体检, 逻辑型, , 返回真=队员基址仍有效;假=可能已平移需重定位
.局部变量 队员对象, 整数型
.局部变量 i, 整数型
.局部变量 名字, 文本型
.如果真 (全局_进程句柄 ≤ 0)
返回 (假)
.如果真结束
.计次循环首 (8, i)
队员对象 = 内存_读整数型 (全局_进程句柄, #队员基址 + 4 × (i - 1))
.如果真 (队员对象 ≤ 65536)
到循环尾 ()
.如果真结束
.如果真 (内存_读整数型 (全局_进程句柄, 队员对象 + #队员有效标志) = 1)
名字 = 编码_BIG5到简体 (内存_读文本型 (全局_进程句柄, 队员对象 + #队员名称值))
.如果真 (名字 ≠ “”)
返回 (真)
.如果真结束
.如果真结束
.计次循环尾 ()
返回 (假)
⑤ 用法示例
' 用法一:接组队邀请前先判断,已组队就不再接(避免重复/队伍已满)
.如果 (是否已组队 () = 假)
自动处理组队 ()
.否则
写日志 (自定义时间 () + “已在队伍中,忽略本次邀请” + #换行符)
.如果结束
' 用法二:时钟/主循环做状态机——不在队就尝试组队,在队且是队长就开自动组队
.如果 (是否已组队 () = 假)
' 未组队:去组队/喊人/接受邀请
.否则
.如果 (自己是队长 () = 真)
自动组队.选中 = 真
.如果结束
.如果结束
' 用法三:开局体检一次,确认基址没被版本更新打废
.如果 (队员表体检 () = 假)
写日志 (“【警告】队员基址可能已平移,是否已组队 判定不可信” + #换行符)
.如果结束
⚠ 注意事项
1. CE 桥位数坑:0x03BF7E18 在 64 位 CE 下 readInteger 会返回 nil,必须挂在 32 位 CE(D:\登录源码数据存储账号\CE+调试V7.6\csrss.exe)上读,否则 是否已组队 永远返回假。
2. 基址平移风险:#队员基址 属"绝对地址"类,版本大改可能失效。判定异常时跑 队员表体检 确认。
3. 单人边界:热血江湖队伍至少 2 人,"有效数=0 → 未组队"成立,不存在 1 人队的边界。
4. 与"自己名字"区分:本判断只看"其他队员"槽,不依赖自己的角色名;自己未登录时 全局_进程句柄≤0 直接返回假,不会误判。