CGStallShopName 是旧版客户端里用于提交摆摊店名的请求包。
包信息
| 项目 |
内容 |
| 封包 ID |
011 |
| 包名 |
CGStallShopName |
| 对应回包 |
当前 Lua 现状未见专属成功回包 |
| 作用 |
向服务端提交新的摆摊店名,供当前角色的摊位栏位写入名称 |
包体结构
当前 Game.exe 与 Lua 协议定义都能确认,这条包是“长度前缀 + 字符串内容”的变长结构。
固定头如下:
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x01 |
stall_name_len |
uint8 |
摊位名长度,当前客户端与 Lua 都限制最大 34 |
后续字符串段如下:
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x01 |
stall_name_len |
stall_name |
char[n] |
摆摊店名原始字节串 |
当前 Game.exe 的 GetPacketSize() 公式为:
stall_name_len + 1
也就是:
- 最短
1 字节
- 名字内容每增加
1 字节,总长度同步增加 1
- 当前有效最大长度为
35 字节,其中:
当前实际行为 / 模式说明
- 当前
Game.exe 中,CGStallShopName::GetPacketID() 返回 11。
- 当前
Game.exe 的 Read() 先读 1 字节长度,再把超过 34 的长度强制截成 34,最后按该长度读取店名字节串。
- 当前
Game.exe 的 Write() 也是先写长度,再写对应长度的名字内容。
- 当前
Game.exe 的 Execute() 对客户端侧是空处理,直接返回。
- 当前 Lua 协议定义同样是:
- 先读
len
len > 34 时截断为 34
- 再读取
stall_name
- 最后做一次
gbk.toutf8()
- 当前 Lua 请求入口是
request:CGStallShopName()。
- 当前场景服处理函数
scenecore:char_stall_shop_name() 会直接把包里的 stall_name 写入当前角色的 stall_box:
stall_box:set_stall_name(ssn.stall_name)
- 因此这条包在当前版本里的用途非常直接,就是“修改当前摆摊店名”。
服务端落点
- 协议定义:
/home/ubuntu/Game2/services/game/packet.lua
- 请求入口:
/home/ubuntu/Game2/services/msgagent.lua
- 场景处理:
/home/ubuntu/Game2/services/scene/scenecore.lua
关键代码
当前 Lua 协议定义
***付费内容***
当前 Lua 请求入口
function request:CGStallShopName()
skynet.call(my_scene, "lua", "char_stall_shop_name", my_obj_id, self)
end
当前 Lua 场景处理
function scenecore:char_stall_shop_name(who, ssn)
local obj = self.objs[who]
local stall_box = obj:get_stall_box()
stall_box:set_stall_name(ssn.stall_name)
end
当前 Game.exe 的读写与执行结论
***付费内容***
结论
这条包在当前旧版项目里要记住六点:
CGStallShopName 的封包 ID 是 011。
- 它不是定长包,而是
stall_name_len + 1 的变长结构。
- 当前客户端和 Lua 都把摊位名最大长度限制为
34 字节。
- 包体核心字段只有两个:
stall_name_len 和 stall_name。
- 当前 Lua 收到后会把店名转成 UTF-8,并直接写入
stall_box:set_stall_name()。
- 当前版本里,这条包的作用就是“修改当前摆摊店名”,没有额外业务分支。
剩余 17% 内容需要支付 10.00
金币 后可完整阅读
支持付费阅读,激励作者创作更好的作品。
|