找回密码
 registerss
搜索

洱海月 v0-07-0300 封包解析:ID 1275 GCXBWTeamData(XBW 队伍快照同步)

[复制链接]
Waylee 发表于 2026-4-15 17:11 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?registerss

×

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;

结论

  1. GCXBWTeamData 是固定 408 字节的 XBW 队伍快照同步包。
  2. 包体可稳定拆成 type、target_id、52 字节队伍头和 6 个 58 字节成员槽位。
  3. 当前客户端按 type == 1 / 2 / 3 派发本地事件 1305 / 1310 / 1322,并把 target_id 解析出的运行时值一起传给界面层。
  4. 现役 /home/ubuntu/Game2 Lua 主链未检出该协议的定义与发送入口,因此当前更应视作客户端保留实现。
您需要登录后才可以回帖 登录 | registerss

本版积分规则

QQ|手机版|雪舞知识库 ( 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 )

GMT+8, 2026-10-24 13:02 , Processed in 0.030916 second(s), 27 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表