GCXiuqiuPos 是绣球活动点位同步包。当前 Game.exe 已能确认它是固定 77 字节的 GC 下发包,包体包含 2 个前置短整型字段、6 组点位坐标数据、6 个展示对象 creature_id,以及 1 个启用标志。客户端收到后会把这批数据写入本地绣球活动缓存,并按 creature_id 反查展示名称。
当前 Lua 服务端 /home/ubuntu/Game2 里未接入这条协议;现阶段能稳定确认的是“6 组点位 + 6 个展示对象 + 1 个开关位”,前两个 int16 头字段在当前证据下仍应保守处理。
包信息
| 项目 |
内容 |
| 封包 ID |
9029 |
| 包名 |
GCXiuqiuPos |
| 方向 |
GC 服务端 -> 客户端 |
| 固定包长 |
77 |
| 当前 Lua 状态 |
/home/ubuntu/Game2 未定义 |
| 主要作用 |
同步绣球活动的点位坐标、展示对象与活动启用状态 |
当前 Game.exe 的虚函数结论为:
PacketID = 9029;
PacketSize = 77;
包体结构
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x02 |
reserved_1 |
int16 |
前置短整型字段,当前 Game.exe 只确认会写入本地绣球缓存 |
0x02 |
0x02 |
reserved_2 |
int16 |
前置短整型字段,当前 Game.exe 只确认会写入本地绣球缓存 |
0x04 |
0x30 |
pos_records |
bytes[48] |
6 组点位坐标记录,每组 8 字节,客户端按二维坐标写入本地缓存 |
0x34 |
0x18 |
creature_id_list |
bytes[24] |
6 个展示对象 creature_id,与前面的点位一一对应 |
0x4C |
0x01 |
enable_flag |
uint8 |
是否启用这组绣球点位;不为 1 时客户端会直接清空本地状态 |
单条点位记录
pos_records 共 6 组,每组固定 8 字节;当前 Game.exe 的执行阶段会把这 8 字节按二维点位写入客户端绣球缓存,但当前证据不足以把坐标元素进一步强行定名为更具体的字段。
当前实际行为
- 当
enable_flag != 1 时,当前客户端会直接清理本地绣球活动状态,不再使用前面的点位与 creature_id 数据。
- 当
enable_flag == 1 时,当前客户端会:
- 把
reserved_1、reserved_2 写入本地绣球数据池
- 标记绣球活动状态为启用
- 循环写入
6 组点位坐标
- 循环写入
6 个展示对象 creature_id
- 通过
CreatureDBC 反查每个展示对象的名称并缓存
这说明 GCXiuqiuPos 的核心用途不是直接刷怪,而是给客户端提供“活动点位 + 展示对象 + 名称展示”的完整 UI/场景缓存。
服务端落点
当前 Lua 服务端没有找到这条包的直接定义或发送点:
/home/ubuntu/Game2/services/game/packet.lua:未定义
/home/ubuntu/Game2/services/msgagent.lua:未找到同名处理
/home/ubuntu/Game2/services/scene:未找到同名发送点
关键代码
当前 Game.exe 的读写逻辑
Read(stream) {
read(reserved_1, 2);
read(reserved_2, 2);
for (i = 0; i < 6; ++i)
read(pos_records[i], 8);
for (i = 0; i < 6; ++i)
read(creature_id_list[i], 4);
read(enable_flag, 1);
}
Write(stream) {
write(reserved_1, 2);
write(reserved_2, 2);
for (i = 0; i < 6; ++i)
write(pos_records[i], 8);
for (i = 0; i < 6; ++i)
write(creature_id_list[i], 4);
write(enable_flag, 1);
}
当前 Game.exe 的执行分支
if (enable_flag != 1) {
ClearXiuqiuState();
return 2;
}
StoreHeader(reserved_1, reserved_2);
for (i = 0; i < 6; ++i) {
StorePos(i, pos_records[i]);
StoreCreatureId(i, creature_id_list[i]);
CacheCreatureName(i, CreatureDBC[creature_id_list[i]]);
}
结论
GCXiuqiuPos(9029) 是固定 77 字节的绣球活动点位同步包。
- 它的稳定结构可以确定为:
2 个短整型头字段、6 组点位记录、6 个展示对象 creature_id、1 个启用标志。
enable_flag 是当前行为分界点;不启用时客户端会直接清空本地绣球状态。
- 前两个
int16 字段虽然会被客户端缓存,但当前证据不足以给出更具体的业务名,因此保留为 reserved_1 / reserved_2 更稳妥。
|