WGCFriendADGiveDetailInfo 是征友系统的详情回包。当前 Game.exe 已能确认它由 10 字节固定头和一段完整的征友详情结构组成,客户端据此展示单条征友广告的详细内容。
包信息
| 项目 |
内容 |
| 封包 ID |
516 |
| 包名 |
WGCFriendADGiveDetailInfo |
| 方向 |
Server -> Client |
| 包长 |
detail_size + 10 |
| 对应请求 |
CGWFriendADAskDetailInfo(326) |
| 作用 |
返回一条征友广告的完整详情 |
包体结构
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x04 |
human_guid |
uint32 |
当前查询角色 GUID |
0x04 |
0x02 |
player_id |
uint16 |
当前客户端角色索引 |
0x06 |
0x04 |
result |
uint32 |
查询结果码 |
0x0A |
变长 |
detail_info |
bytes[n] |
详情结构:角色 GUID、广告类型、名字、等级、性别、门派、帮会、婚姻标记、发布时间、离线天数、择友条件和 4 个投票项 |
当前实际行为
- 当前
Game.exe 的详情主体会继续读取一条完整的征友详情结构。
- 详情结构里的名字和帮会名都是变长文本,因此总长度按实际文本长度变化。
- 当前 Lua 主链没有这条包的协议定义,也没有征友系统发送入口。
- 因此它在现版工程里仍属于客户端保留的旧征友详情回包。
服务端落点
- 当前 Lua 主链未发现协议定义:
/home/ubuntu/Game2/services/game/packet.lua
- 当前 Lua 主链未发现征友详情发送点
关键代码
GetPacketID() = 516;
GetPacketSize() = detail_info.GetPacketSize() + 10;
detail_info:
u32 char_guid
u32 ad_type
u32 name_len + char[name_len]
u32 char_level
u8 char_sex
u8 char_menpai
u32 guild_name_len + char[guild_name_len]
u8 married_flag
u32 send_ad_time
u32 leave_day
u32 need_menpai
u32 need_level
u32 need_sex
u32 need_detail
u32 vote_type_1..4
结论
WGCFriendADGiveDetailInfo(516) 可以稳定归类为“征友广告完整详情”回包。当前最可靠的字段结论,就是 10 字节头后面紧跟一条完整的详情结构。
|