GCFestivalShopDetail 是当前客户端仍保留的节日商店详情同步包。Game.exe 已能直接确认它固定 40 字节,线结构是一个 uint32 头参数,后跟一段 36 字节的 FestivalShop_Data。
包信息
| 项目 |
内容 |
| 封包 ID |
1015 |
| 包名 |
GCFestivalShopDetail |
| 方向 |
GC 服务端 -> 客户端 |
| 固定包长 |
40 |
| 当前 Lua 协议定义 |
未发现 |
| 当前 Lua 发送入口 |
未发现 |
| 主要作用 |
同步节日商店缓存数据并刷新客户端商店界面 |
当前 Game.exe 可直接确认:
GCFestivalShopDetail
GetPacketID() = 1015;
GetPacketSize() = 40;
Read = 0x140612EB0;
Write = 0x140612F00;
Execute thunk = 0x140612EA0 -> sub_140084160;
包体结构
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x04 |
shop_type |
uint32 |
节日商店类型或界面刷新参数;客户端会把它作为事件 971 的参数 |
0x04 |
0x04 |
festival_shop_data.m_Token |
uint32 |
节日商店 token |
0x08 |
0x20 |
festival_shop_data.m_limitList |
byte[32] |
节日商店限制列表原始数据 |
FestivalShop_Data 这个名字与其内部字段 m_Token / m_limitList 来自当前客户端元数据线索,因此这里可以把 36 字节数据块稳定拆成 4 + 32 两段。
当前实际行为
客户端 Execute() 的行为非常直接:
- 把
0x04 之后的 36 字节整块写入本地节日商店缓存区。
- 触发事件
971(shop_type)。
当前没有证据表明客户端在 Execute() 阶段继续把 m_limitList[32] 拆成更细的小字段,因此本文把这部分保留为一段限制列表原始数据。
服务端落点
当前 /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_u32(shop_type);
read_u32(festival_shop_data.m_Token);
read_bytes(festival_shop_data.m_limitList, 32);
}
当前 Game.exe 的执行结论
Execute() {
local_festival_shop_data = festival_shop_data;
fire_event(971, shop_type);
return 2;
}
结论
GCFestivalShopDetail(1015) 是固定 40 字节的节日商店详情同步包。
- 其核心载荷是
FestivalShop_Data = m_Token + m_limitList[32]。
- 客户端收到后直接覆盖本地节日商店缓存,并触发事件
971。
- 当前
/home/ubuntu/Game2 未发现现役发送链。
|