GC24Q1DakaPos 是当前客户端保留的一条活动坐标同步包。按当前 Game.exe 结论,它固定为 29 字节:两个 uint16 头字段、一个启用标记,再附带 2 组 (x, y, creature_id) 坐标槽位。客户端在启用标记不为 1 时会直接清空显示。
包信息
| 项目 |
内容 |
| 封包 ID |
1323 |
| 包名 |
GC24Q1DakaPos |
| 方向 |
GC 服务端 -> 客户端 |
| 固定包长 |
29 |
| 当前 Lua 协议定义 |
现役 /home/ubuntu/Game2 未检出 |
| 当前 Lua 发送点 |
现役 /home/ubuntu/Game2 未检出 |
| 当前用途 |
同步 2024Q1 打卡活动的 2 个坐标标记与对应怪物名称 |
包体结构
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x02 |
reserved_u16_1 |
uint16 |
当前客户端会写入全局状态,但现役语义未收敛 |
0x02 |
0x02 |
reserved_u16_2 |
uint16 |
当前客户端会写入全局状态,但现役语义未收敛 |
0x04 |
0x01 |
enable_flag |
uint8 |
启用标记;仅当值为 1 时装载坐标 |
0x05 |
0x0C |
marker_list[0] |
见下表 |
第 1 个坐标标记 |
0x11 |
0x0C |
marker_list[1] |
见下表 |
第 2 个坐标标记 |
单条标记结构:
| 相对偏移 |
长度 |
字段 |
类型 |
含义 |
+0x00 |
0x04 |
pos_x |
float |
标记坐标 X |
+0x04 |
0x04 |
pos_y |
float |
标记坐标 Y |
+0x08 |
0x04 |
creature_id |
uint32 |
CreatureDBC 配置 ID;客户端会据此查显示名 |
当前实际行为
enable_flag != 1 时,客户端会先清空当前显示列表,然后直接返回。
enable_flag == 1 时,客户端会:
- 清空旧列表;
- 记录两个
uint16 头字段;
- 装载
2 个坐标槽位;
- 按各自的
creature_id 查 CreatureDBC 名称并填入显示缓存。
- 这条包与
GCPVPActSyncBossPos、GCKFRCBOSSSyncBossInfo 属于同一类“坐标 + CreatureDBC 名称同步”包,但这条包固定只有 2 个槽位。
服务端落点
当前现役服务端未检出以下同名协议定义或发送链:
/home/ubuntu/Game2/services/game/packet.lua
/home/ubuntu/Game2/services/msgagent.lua
/home/ubuntu/Game2/services/scene/scenecore.lua
关键代码
Read() {
read_u16(reserved_u16_1);
read_u16(reserved_u16_2);
read_u8(enable_flag);
for (i = 0; i < 2; ++i) {
read_float(pos_x[i]);
read_float(pos_y[i]);
read_u32(creature_id[i]);
}
return 1;
}
GetPacketSize() {
return 29;
}
Execute() {
clear_marker_list();
if (enable_flag != 1)
return 2;
set_header_state(reserved_u16_1, reserved_u16_2);
for (i = 0; i < 2; ++i) {
set_marker(i, pos_x[i], pos_y[i], creature_id[i]);
set_marker_name(i, CreatureDBC[creature_id[i]].name);
}
return 2;
}
结论
GC24Q1DakaPos(1323) 的当前结论是:
- 它是一条固定
29 字节的活动标记同步包。
- 核心结构是
2 个 uint16 头字段 + enable_flag + 2 组坐标/怪物 ID。
creature_id 的作用已经明确,可直接用于查名字;两个 uint16 头字段当前仍应保守处理。
|