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

洱海月 v0-07-0300 封包解析:ID 687 CGPlayerShopDesc(玩家商店简介修改)

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

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

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

×

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 时才会稳定生效。

您需要登录后才可以回帖 登录 | registerss

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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