GCPVPActSyncBossPos 是当前客户端保留的一条 PVP 活动 Boss 坐标同步包。按当前 Game.exe 的 Read() / Write() / Execute() 结论,它会先下发一个共享的 creature_id,再附带最多 3 组坐标,用于在客户端刷新或清空活动 Boss 标记。
包信息
| 项目 |
内容 |
| 封包 ID |
1308 |
| 包名 |
GCPVPActSyncBossPos |
| 方向 |
GC 服务端 -> 客户端 |
| 包长 |
变长:5 + 8 * boss_count |
| 当前 Lua 协议定义 |
现役 /home/ubuntu/Game2 未检出 |
| 当前 Lua 发送点 |
现役 /home/ubuntu/Game2 未检出 |
| 当前用途 |
同步 PVP 活动 Boss 的坐标列表,并按共享 creature_id 填充显示名 |
当前 Game.exe 可直接确认:
GetPacketID() = 1308;
GetPacketSize() = 5 + 8 * boss_count;
Read() = read_u8(count) + read_u32(creature_id) + read_float2[count];
Write() = 同结构写回;
Execute() = 2;
包体结构
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x01 |
boss_count |
uint8 |
坐标数量;当前客户端最多处理 3 个槽位 |
0x01 |
0x04 |
creature_id |
uint32 |
共享 Boss 配置 ID;客户端会用它到 CreatureDBC 查名字 |
0x05 |
0x08 * boss_count |
boss_pos_list |
float[2] * N |
每条为一组 x / y 坐标 |
单条坐标记录的逻辑结构为:
| 相对偏移 |
长度 |
字段 |
类型 |
含义 |
+0x00 |
0x04 |
pos_x |
float |
坐标 X |
+0x04 |
0x04 |
pos_y |
float |
坐标 Y |
当前实际行为
boss_count == 0 时,当前客户端会直接清空现有 Boss 标记列表。
boss_count > 0 时,客户端会先清空旧列表,再按最多 3 个槽位写入新坐标。
creature_id 不随每条坐标重复携带,而是整包共享;客户端会用这一个 ID 去 CreatureDBC 查名称,并把同一个名字填到本次同步的各个槽位。
- 当数量不足
3 时,其余槽位会被写成无效坐标。
- 当前
Execute() 最终只负责刷新本地状态,不会再向 Lua 主链回传。
服务端落点
当前现役服务端未检出以下内容:
/home/ubuntu/Game2/services/game/packet.lua
/home/ubuntu/Game2/services/msgagent.lua
/home/ubuntu/Game2/services/scene/scenecore.lua
因此,GCPVPActSyncBossPos 在当前版本应视为“客户端保留的活动坐标同步包”,而不是现役 Lua 主链中可见的广播协议。
关键代码
Read() {
read_u8(boss_count);
read_u32(creature_id);
for (i = 0; i < boss_count && i < 3; ++i)
read_float2(boss_pos_list[i]);
return 1;
}
GetPacketSize() {
return 5 + 8 * boss_count;
}
Execute() {
if (boss_count == 0) {
clear_boss_pos_list();
return 2;
}
clear_boss_pos_list();
for (i = 0; i < 3; ++i) {
set_boss_pos(i, boss_pos_list[i]);
set_boss_name(i, CreatureDBC[creature_id].name);
}
return 2;
}
结论
GCPVPActSyncBossPos(1308) 的当前结论可以稳定收敛为:
- 它是一条
共享 creature_id + 最多 3 组坐标 的活动 Boss 标记同步包。
creature_id 的真实作用是给客户端查 Boss 名字。
- 当前 Lua 主链未检出发送链,因此最终结论以当前
Game.exe 为准。
|