CGWFriendADAskSimpleVoteInfo 是旧版客户端征友系统里“投票频道”使用的专用查询包。当前 Game.exe 可以明确确认:它是固定 8 字节请求,包体只有 page_index 与 char_guid 两个字段;客户端界面仍通过 RequestFindFriendList(g_curChannel, g_curPageIndex) 触发列表刷新,而在 channel_type == 6 的分支下,当前客户端会改走这条专用包。
当前 Temp_Release_v0-07-0300 Lua 服务端主链中未发现这条协议的 packet.lua -> msgagent.lua -> scenecore.lua 接入点。
包信息
| 项目 |
内容 |
| 封包 ID |
562 |
| 包名 |
CGWFriendADAskSimpleVoteInfo |
| 方向 |
CG 客户端 -> 游戏服 |
| 包长 |
固定 8 字节 |
| 对应回包 |
WGCFriendADGiveSimpleVoteInfo |
| 回包 ID |
169 |
| 当前 Lua 协议定义 |
未发现 |
| 当前 Lua 请求入口 |
未发现 |
| 主要作用 |
请求征友投票频道的简要列表页数据 |
当前 Game.exe 的虚函数结论为:
GetPacketID() = 562;
GetPacketSize() = 8;
Read() = read(a1 + 24, 4), read(a1 + 28, 4);
Write() = write(a1 + 24, 4), write(a1 + 28, 4);
Execute() = 2;
包体结构
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x04 |
page_index |
int32 |
投票频道请求页码 |
0x04 |
0x04 |
char_guid |
uint32 |
当前角色 GUID,由客户端自动填入 |
按当前 Game.exe 的 Read() / Write() 顺序,这条包的收发结构可概括为:
Read(stream) {
read_i32(page_index);
read_u32(char_guid);
}
当前实际行为
- 客户端界面脚本
PlayerZhengyouPT.lua 刷新征友列表时,统一调用:
RequestFindFriendList(g_curChannel, g_curPageIndex)
- 同一份界面脚本里已经能直接看出
g_curChannel == 6 是投票列表分支,此时列表展示改为读取:
FindFriendDataPool:GetSimpleVoteInfoByPos(i)
-
当前 Game.exe 中,RequestFindFriendList(channel_type, page_index) 的原生实现会按 channel_type 分支:
0/1/2/3/4 走普通征友列表请求
6 走投票频道专用请求,只继续传递 page_index
-
投票频道专用分支随后会构造 CGWFriendADAskSimpleVoteInfo(562),把脚本传入的 page_index 写入第一个字段,再自动补写当前角色 GUID 到第二个字段后发包。
-
当前 Lua 服务端中未发现:
packet.CGWFriendADAskSimpleVoteInfo
request:CGWFriendADAskSimpleVoteInfo()
- 对应
scenecore 处理入口
因此,这条包在当前项目现状下应视为旧征友系统“投票频道列表请求”的客户端保留协议,现役 Lua 主链未接入。
服务端落点
当前 Lua 主链未发现这条包的正式落点:
/home/ubuntu/Game2/services/game/packet.lua
/home/ubuntu/Game2/services/msgagent.lua
/home/ubuntu/Game2/services/scene/scenecore.lua
关键代码
当前客户端界面层的列表刷新入口
RequestFindFriendList(g_curChannel, g_curPageIndex)
当前客户端界面层对投票频道的分支判断
if (g_curChannel ~= 6) then
iGuid, strName, iGender, iRenqi, iType, iLevel = PlayerZhengyouPT_GetPlayerSimpleInfo(i)
else
iGuid, strName, iGender, iRenqi, iType, iLevel = PlayerZhengyouPT_GetPlayerSimpleVoteInfoByPos(i)
end
当前 Game.exe 的请求分支与发包内容
Lua_RequestFindFriendInfo(channel_type, page_index) {
if (channel_type == 6) {
RequestFindFriendVoteList(page_index);
} else {
RequestFindFriendList(channel_type, page_index);
}
}
RequestFindFriendVoteList(page_index) {
msg.page_index = page_index;
msg.char_guid = GetCurrentPlayerGuid();
SendPacket(CGWFriendADAskSimpleVoteInfo);
}
结论
CGWFriendADAskSimpleVoteInfo(562) 是征友系统投票频道使用的专用列表查询包,固定 8 字节,结构可以明确确认为 page_index + char_guid。它不是普通征友频道的通用查询包,而是 RequestFindFriendList 在 channel_type == 6 时切出的专用分支。
当前 Temp_Release_v0-07-0300 Lua 服务端没有这条包的协议定义和处理链,因此现阶段更适合把它归类为客户端保留的旧征友系统请求包;其现存意义主要在于保留投票频道列表查询能力与 WGCFriendADGiveSimpleVoteInfo(169) 的对应收包结构。