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

洱海月 v0-07-0300 封包解析:ID 281 GCDetailAttrib_Pet(珍兽详细属性同步)

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

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

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

×

GCDetailAttrib_Pet 是珍兽详细属性的主同步包,当前项目采用“GUID + 交易索引 + 11 字节标记位 + 按标记追加字段”的变长结构。

包信息

项目 内容
封包 ID 281
包名 GCDetailAttrib_Pet
方向 Server -> Client
对应请求 查看珍兽详情、交易展示、摆摊展示等多条链路
包长 变长
作用 按标记位同步珍兽详细属性、技能和装备信息

包体结构

偏移 长度 字段 类型 含义
0x00 0x08 guid PetGUID 珍兽 GUID
0x08 0x04 m_nTradeIndex uint32 交易 / 展示上下文索引
0x0C 0x0B m_Flags[11] uint8[11] 字段位图,决定后续写哪些属性
0x17 变长 payload list 按 m_Flags 顺序追加对象 ID、名字、等级、成长、技能、装备等字段

当前实际行为

  • 当前协议定义已明确这条包是按 m_Flags[11] 控制的变长珍兽详情包,而不是固定结构。
  • 现役项目会在珍兽详情查看、脏属性刷新、元宝市场珍兽展示和玩家商店珍兽展示中复用这条协议。
  • 当前最稳定的公共头是 guid + trade_index + 11 字节标记位,后面的详细字段只能按标记解释。

服务端落点

  • 协议定义:/home/ubuntu/Game2/services/game/packet.lua
  • 脏属性刷新:/home/ubuntu/Game2/lualib/db/pet_attrib.lua
  • 人物发珍兽详情:/home/ubuntu/Game2/services/scene/obj/human.lua
  • 玩家商店 / 元宝市场复用:/home/ubuntu/Game2/lualib/playershop.lua、/home/ubuntu/Game2/services/game/packet.lua

关键代码

self.guid:bis(stream)
self.m_nTradeIndex = stream:readuint()
for i = 1, 0xB do
    self.m_Flags[i] = stream:readuchar()
end
if self.m_Flags[1] & 0x1 == 0x1 then self.m_objID = stream:readuint() end
if self.m_Flags[1] & 0x4 == 0x4 then
    self.name_size = stream:readuchar()
    self.name = stream:read(self.name_size)
end
... -- 其余字段继续按 m_Flags 逐段展开

结论

  1. GCDetailAttrib_Pet(281) 是珍兽详细属性的变长总包。
  2. 能稳定确认的公共头只有 PetGUID + trade_index + 11 字节标记位。
  3. 写文档时应按“标记位控制的字段快照”理解,不要把它伪造成固定长度协议。
您需要登录后才可以回帖 登录 | registerss

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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