找回密码
 registerss
搜索
查看: 22|回复: 0

洱海月 v0-07-0300 封包解析:ID 9029 GCXiuqiuPos(绣球点位与展示对象同步)

[复制链接]
  • 打卡等级:本地老炮
  • 打卡总天数:603
  • 打卡月天数:1
  • 打卡总奖励:600
  • 最近打卡:2026-10-03 06:32:28
Waylee 发表于 2026-4-15 17:29 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

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

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

×

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]]);
}

结论

  1. GCXiuqiuPos(9029) 是固定 77 字节的绣球活动点位同步包。
  2. 它的稳定结构可以确定为:2 个短整型头字段、6 组点位记录、6 个展示对象 creature_id、1 个启用标志。
  3. enable_flag 是当前行为分界点;不启用时客户端会直接清空本地绣球状态。
  4. 前两个 int16 字段虽然会被客户端缓存,但当前证据不足以给出更具体的业务名,因此保留为 reserved_1 / reserved_2 更稳妥。
您需要登录后才可以回帖 登录 | registerss

本版积分规则

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

GMT+8, 2026-10-4 11:26 , Processed in 0.129916 second(s), 25 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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