GCDetailXinbiwu 是当前客户端保留的新比武详情同步包。Game.exe 已能明确确认,它是固定 110 字节结构,在线路上按 detail_mode + detail_arg + 108 字节详情块的顺序读写;当前 /home/ubuntu/Game2 Lua 主链未发现同名协议定义。
包信息
| 项目 |
内容 |
| 封包 ID |
998 |
| 包名 |
GCDetailXinbiwu |
| 方向 |
GC 服务端 -> 客户端 |
| 固定包长 |
110 |
| 当前 Lua 协议定义 |
未发现 |
| 当前 Lua 发送入口 |
未发现 |
| 主要作用 |
同步一段新比武详情数据块,并按模式驱动客户端详情/大厅刷新 |
当前 Game.exe 可直接确认:
GCDetailXinbiwu
GetPacketID() = 998;
GetPacketSize() = 110;
Read = 0x140618570;
Write = 0x1406185D0;
Execute thunk = 0x140618560 -> sub_140080BC0;
包体结构
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x01 |
detail_mode |
uint8 |
详情处理模式;当前客户端确认 1/2 两个分支有效 |
0x01 |
0x01 |
detail_arg |
uint8 |
模式附加参数;detail_mode = 1 时会直接作为事件参数使用 |
0x02 |
0x6C |
detail_blob |
byte[108] |
新比武详情原始数据块 |
当前客户端会完整消费这 108 字节数据块,但现役链路中还没有足够证据把它稳定拆成更细的字段,因此本文保持为 detail_blob。
当前实际行为
sub_140080BC0 的执行链已经足以确认三件事:
- 无论
detail_mode 取值如何,客户端都会先把 detail_blob[108] 交给 sub_14017A4C0(...) 写入本地新比武详情缓存。
- 当
detail_mode == 1 时,客户端会把 detail_arg 保存到本地状态区,并触发事件 946(detail_arg)。
- 当
detail_mode == 2 时,客户端会直接触发事件 947。
也就是说,这条包并不是简单的“只发一个 108 字节块”,而是:
- 一段固定长详情块;
- 外加一个驱动客户端 UI 分支的模式字节;
- 以及一个可选的事件参数字节。
服务端落点
当前 /home/ubuntu/Game2 未发现这条协议的现役落点:
- 未发现协议定义:
/home/ubuntu/Game2/services/game/packet.lua
- 未发现消息服入口:
/home/ubuntu/Game2/services/msgagent.lua
- 未发现世界服或场景服发送链:
/home/ubuntu/Game2/services/world、/home/ubuntu/Game2/services/scene
关键代码
当前 Game.exe 的读写骨架
Read(stream) {
read_u8(detail_mode);
read_u8(detail_arg);
read_bytes(detail_blob, 108);
}
当前 Game.exe 的执行结论
Execute() {
update_local_xbw_detail_cache(detail_blob);
if (detail_mode == 1) {
save_detail_arg(detail_arg);
fire_event(946, detail_arg);
}
if (detail_mode == 2) {
fire_event(947);
}
return 2;
}
结论
GCDetailXinbiwu(998) 是固定 110 字节的新比武详情同步包。
- 线上顺序可稳定写成
detail_mode + detail_arg + detail_blob[108]。
- 客户端会先导入详情块,再根据
detail_mode 触发事件 946 或 947。
- 当前
/home/ubuntu/Game2 未发现现役发送链,因此它更适合归类为客户端仍保留的旧新比武详情入口。
|