CGPlayerShopDesc 是玩家商店系统里用于修改店铺简介的请求包,结构为 shop_id + desc_len + desc。
包信息
| 项目 |
内容 |
| 封包 ID |
687 |
| 包名 |
CGPlayerShopDesc |
| 方向 |
CG 客户端 -> 服务端 |
| 包长 |
13 + desc_len |
| 对应结果 |
GCPlayerShopError |
| 当前 Lua 协议定义 |
/home/ubuntu/Game2/services/game/packet.lua |
| 当前 Lua 请求入口 |
/home/ubuntu/Game2/services/msgagent.lua |
| 当前 Lua 场景处理 |
/home/ubuntu/Game2/services/scene/scenecore.lua |
| 主要作用 |
修改指定玩家商店的简介文本 |
当前 Game.exe 可确认:
GetPacketID() = 687;
GetPacketSize() = desc_len + 13;
Read() = shop_id[12] + desc_len[1] + desc[desc_len];
Write() = shop_id[12] + desc_len[1] + desc[desc_len];
包体结构
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x0C |
shop_id |
PlayerShopGUID |
目标玩家商店 GUID |
0x0C |
0x01 |
desc_len |
uint8 |
简介文本长度 |
0x0D |
desc_len |
desc |
char[desc_len] |
店铺简介正文 |
当前实际行为
- 当前
msgagent 收到后,会直接转到 char_player_shop_desc()。
- 场景层先按
shop_id 查店铺,并要求店铺当前不能处于挂牌出售状态。
- 只有店主本人或合伙人可以修改简介。
- 通过校验后,服务端调用
playershop:set_desc(psd.desc) 写入新简介,并回 GCPlayerShopError(ERR_SHOP_SUCCESS_CHANGE_DESC)。
- 当前
Game.exe 允许 desc_len 最高到 0x52,但当前 Lua 只在 desc_len <= 0x26 时读取正文。
- 因此按现役 Lua 口径,真正可稳定生效的简介长度上限是
0x26,超出部分不会按当前主链正常消费。
服务端落点
- 协议定义:
/home/ubuntu/Game2/services/game/packet.lua
- 请求入口:
/home/ubuntu/Game2/services/msgagent.lua
- 场景处理:
/home/ubuntu/Game2/services/scene/scenecore.lua
- 对应结果:
/home/ubuntu/Game2/services/game/packet.lua 中的 GCPlayerShopError
关键代码
packet.CGPlayerShopDesc = {
bis = function(self, buffer)
local stream = bistream.new()
stream:attach(buffer)
self.shop_id = packet.PlayerShopGUID.new()
self.shop_id:bis(stream)
local desc_len = stream:readuchar()
if desc_len <= 0x26 then
self.desc = stream:read(desc_len)
self.desc = gbk.toutf8(self.desc)
end
end
}
function scenecore:char_player_shop_desc(who, psd)
local playershop = playershopmanager:get_player_shop_by_guid(psd.shop_id)
if playershop:get_status() == playershop.STATUS.STATUS_PLAYER_SHOP_ON_SALE then
return
end
if playershop:get_owner_guid() ~= obj_me:get_guid() and not playershop:is_partner(obj_me:get_guid()) then
return
end
playershop:set_desc(psd.desc)
local msg = packet_def.GCPlayerShopError.new()
msg.error_code = define.PLAYER_SHOP_ERR.ERR_SHOP_SUCCESS_CHANGE_DESC
self:send2client(obj_me, msg)
end
结论
CGPlayerShopDesc(687) 是当前玩家商店系统现役的简介修改请求包。结构已经可以明确确定为 shop_id + desc_len + desc,但按当前 Lua 主链实际行为,简介正文只有在 desc_len <= 0x26 时才会稳定生效。
|