GCXBWTeamData 是客户端仍完整保留的一条 XBW 队伍结果包。当前 Game.exe 已能确认它是固定 408 字节结构,并且包体由 type、target_id 和一段固定长度队伍快照组成;现役 /home/ubuntu/Game2 Lua 主链未检出同名定义,因此本文以客户端现行实现为准。
包信息
| 项目 |
内容 |
| 封包 ID |
1275 |
| 包名 |
GCXBWTeamData |
| 方向 |
GC 游戏服 -> 客户端 |
| 固定包长 |
408 |
| 关联请求 |
常见同组上行包为 CGXBWCreateTeam(1277) / CGXBWCmnData(1276),但现役 Lua 未检出成链实现 |
| 当前 Lua 协议定义 |
未在 /home/ubuntu/Game2 现役 Lua 主链中检出 |
| 主要作用 |
向客户端同步一份固定长度的 XBW 队伍快照,并按 type 派发不同本地事件 |
当前 Game.exe 可直接确认:
GetPacketID() = 1275;
GetPacketSize() = 408;
Read() = read_u32(type), read_u32(target_id), read_team_header_blob(), read_6x_member_blob();
Write() = write_u32(type), write_u32(target_id), write_team_header_blob(), write_6x_member_blob();
Execute() = switch(type) { 1, 2, 3 };
包体结构
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x04 |
type |
uint32 |
客户端执行分支类型 |
0x04 |
0x04 |
target_id |
uint32 |
事件派发时使用的目标实体/对象 ID |
0x08 |
0x34 |
team_header_blob |
bytes[52] |
固定长度队伍头数据,由专用辅助函数顺序序列化 |
0x3C |
0x15C |
member_slot_blob_list |
bytes[6][58] |
6 个固定长度成员槽位;每槽位 58 字节 |
补充说明:
52 + 6 * 58 = 400,再加上前面的 type + target_id 共 8 字节,总长正好为 408。
- 当前证据可以稳定确认“52 字节队伍头 + 6 个 58 字节成员槽位”这一层级,但还不足以只凭现役客户端为这两个固定块内部每个子字段安全命名。
当前实际行为
- 客户端只有在全局对象与上下文都准备完成时才会执行该包。
type == 1 时,客户端会先刷新本地 XBW 队伍管理器,再使用 target_id 解析一个本地运行时对象值,并派发本地事件 1305(target_id, resolved_value)。
type == 2 时,执行路径与上面相同,但派发的事件号是 1310。
type == 3 时,同样先刷新本地管理器,然后派发事件 1322。
- 运行时对象解析失败时,第二个事件参数会退回
-1。
- 包内
team_header_blob 与 member_slot_blob_list 会先通过固定辅助函数反序列化进包对象,再由后续本地 XBW 管理器消费。
- 现役
/home/ubuntu/Game2 Lua 主链未检出 GCXBWTeamData 的定义与发送入口,因此当前只能确认客户端实现仍保留,不能直接认定线上 Lua 已接入。
服务端落点
- 当前检索
/home/ubuntu/Game2/services 与 /home/ubuntu/Game2/lualib,未命中 GCXBWTeamData。
- 已重点复核但未命中的现役文件包括:
/home/ubuntu/Game2/services/game/packet.lua
/home/ubuntu/Game2/services/msgagent.lua
/home/ubuntu/Game2/services/scene/scenecore.lua
/home/ubuntu/Game2/services/scene/obj/human.lua
- 因此本文最终以当前
Game.exe 的读写与执行逻辑作为依据;服务端现役链路仅能确认“未见接入”。
关键代码
当前 Game.exe 结构
GetPacketID() = 1275;
GetPacketSize() = 408;
Read() / Write():
uint32 type;
uint32 target_id;
bytes team_header_blob[52];
bytes member_slot_blob_list[6][58];
当前客户端执行逻辑
switch (type) {
case 1:
refresh_xbw_team_state();
notify_local_ui(1305, target_id, resolve_runtime_value(target_id));
break;
case 2:
refresh_xbw_team_state();
notify_local_ui(1310, target_id, resolve_runtime_value(target_id));
break;
case 3:
refresh_xbw_team_state();
notify_local_ui(1322, target_id, resolve_runtime_value(target_id));
break;
default:
break;
}
return 2;
结论
GCXBWTeamData 是固定 408 字节的 XBW 队伍快照同步包。
- 包体可稳定拆成
type、target_id、52 字节队伍头和 6 个 58 字节成员槽位。
- 当前客户端按
type == 1 / 2 / 3 派发本地事件 1305 / 1310 / 1322,并把 target_id 解析出的运行时值一起传给界面层。
- 现役
/home/ubuntu/Game2 Lua 主链未检出该协议的定义与发送入口,因此当前更应视作客户端保留实现。
|