GCTSPhoenixShopInfo 是当前客户端凤凰商店界面的核心下行包。当前 Game.exe 可以直接确认:它固定 140 字节,前 12 字节是商店头信息,后 128 字节是运行时商店状态块。客户端收到后会把这 128 字节写入凤凰商店数据池,再投递一条界面刷新事件。
包信息
| 项目 |
内容 |
| 封包 ID |
1335 |
| 包名 |
GCTSPhoenixShopInfo |
| 方向 |
GC 服务端 -> 客户端 |
| 固定包长 |
140 |
| 当前 Lua 协议定义 |
现役 /home/ubuntu/Game2 未检出 |
| 当前 Lua 发送点 |
现役 /home/ubuntu/Game2 未检出 |
| 当前用途 |
下发凤凰商店当前店铺 ID、代币数量、关联对象以及商店状态块 |
包体结构
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x04 |
shop_id |
uint32 |
凤凰商店 ID;客户端 Lua Phoenix_Shop.lua 会用它取 Lua_GetTSPhoenixShop(shop_id) |
0x04 |
0x04 |
currency_count |
uint32 |
当前可用代币数量 |
0x08 |
0x04 |
npc_server_id |
uint32 |
打开商店时关联的 NPC / 对象服务端 ID |
0x0C |
0x80 |
shop_runtime_blob |
bytes[128] |
凤凰商店运行时状态块;客户端会整体复制到数据池 |
当前实际行为
- 客户端会先把
shop_runtime_blob 整体复制到凤凰商店数据池。
- 随后会投递一条客户端事件,并把
shop_id、currency_count、npc_server_id 作为三个参数传出,用于刷新或拉起凤凰商店界面。
- 当前客户端 Lua
Phoenix_Shop.lua 的实际使用链已经给出较强旁证:
shop_id 用于 Lua_GetTSPhoenixShop(shop_id)
currency_count 用于界面币值显示
npc_server_id 用于反查 NPC 对象并维持界面关注
shop_runtime_blob 的内部明细在当前证据下仍不宜硬拆;更稳妥的结论是,它承载凤凰商店的限购 / 计数等运行时状态。
服务端落点
当前现役服务端未检出这条包的 Lua 定义与发送链:
/home/ubuntu/Game2/services/game/packet.lua
/home/ubuntu/Game2/services/msgagent.lua
/home/ubuntu/Game2/services/scene/scenecore.lua
客户端实际消费侧可见:
/home/ubuntu/Game2 现役服务端未检出
- 客户端脚本
Phoenix_Shop.lua 会通过 Lua_GetTSPhoenixShop(shop_id) 读取结果
关键代码
Read() {
read_u32(shop_id);
read_u32(currency_count);
read_u32(npc_server_id);
read_bytes(shop_runtime_blob, 128);
return 1;
}
GetPacketSize() {
return 140;
}
Execute() {
copy_to_tsp_hoenix_shop_pool(shop_runtime_blob, 128);
fire_event(1389, shop_id, currency_count, npc_server_id);
return 2;
}
客户端 Lua 的直接消费旁证:
g_Phoenix_Shop_ShopInfo = Lua_GetTSPhoenixShop(tonumber(shopId))
g_UI_Items.Daibi:SetText(...)
g_objCared = DataPool:GetNPCIDByServerID(tonumber(g_Object))
结论
GCTSPhoenixShopInfo(1335) 的当前结论已经比较稳定:
- 它是固定
140 字节的凤凰商店信息包。
- 前
12 字节可明确命名为 shop_id + currency_count + npc_server_id。
- 后
128 字节是凤凰商店运行时状态块,客户端会整体复制到数据池后再由 Lua_GetTSPhoenixShop() 解读。
|