WGCRetQueryQingRenJieTopList 是现役 Lua 仍在使用的情人节排行结果包。当前 Game.exe 与 /home/ubuntu/Game2 Lua 都能确认,它固定 4574 字节,结构为“两组各 20 条榜项 + 尾部 UI 模式字段”。
包信息
| 项目 |
内容 |
| 封包 ID |
1021 |
| 包名 |
WGCRetQueryQingRenJieTopList |
| 方向 |
WGC 服务端 -> 客户端 |
| 固定包长 |
4574 |
| 当前 Lua 协议定义 |
已接入 |
| 当前 Lua 发送入口 |
已接入 |
| 主要作用 |
返回情人节活动的两组榜单数据并刷新客户端榜单界面 |
当前 Game.exe 可直接确认:
WGCRetQueryQingRenJieTopList
GetPacketID() = 1021;
GetPacketSize() = 4574;
Execute thunk = 0x140622AD0 -> sub_14009A690;
包体结构
基础结构如下:
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x04 |
reserved_magic |
int32 |
头部固定值;现役 Lua 常写 270213680 |
0x04 |
0x04 |
reserved_branch |
int32 |
结果分支参数;客户端会据此决定事件分支 |
0x08 |
0x8E8 |
rank_list_1[20] |
rank_entry[114] |
第一组榜单 |
0x8F0 |
0x8E8 |
rank_list_2[20] |
rank_entry[114] |
第二组榜单 |
0x11D8 |
0x01 |
ui_mode |
int8 |
客户端确认只在 16..21 时进入有效刷新链 |
0x11D9 |
0x04 |
reserved_arg |
int32 |
尾部整型参数;现役 Lua 常写 0 |
0x11DD |
0x01 |
ui_flag |
int8 |
UI 附加标志;现役脚本会按场景写不同值 |
单条 rank_entry 结构为:
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x04 |
guid |
int32 |
角色 GUID |
0x04 |
0x1E |
name |
char[30] |
角色名 |
0x22 |
0x04 |
count |
int32 |
当前榜单计数值 |
0x26 |
0x04 |
reserved_value_1 |
int32 |
预留数值 1 |
0x2A |
0x04 |
reserved_value_2 |
int32 |
预留数值 2 |
0x2E |
0x04 |
reserved_value_3 |
int32 |
预留数值 3 |
0x32 |
0x40 |
guild_name |
char[64] |
帮会名 |
当前实际行为
现役 Lua 在 /home/ubuntu/Game2/lualib/script_base.lua 中提供了一条默认返回逻辑:
- 两组榜单各补足
20 条;
- 空槽统一写
guid = 0、count = 0、name = " "、guild_name = " ";
reserved_magic = 270213680
reserved_branch = 0
ui_mode = 16
reserved_arg = 0
ui_flag = 1
在 /home/ubuntu/Game2/services/scripts/event/newhuodong/QiXiTop.lua 中,实际榜单数据会被填进 rank_list_1 / rank_list_2,并把同一条结果同时发给操作方和目标方。
客户端 Execute() 的当前行为可以收敛为:
- 只有当
ui_mode 落在 16..21 之间时,才会继续刷新榜单缓存。
- 两组
20 条榜单都会写入本地活动排行状态。
- 若
reserved_branch == 0,触发事件 958(ui_mode)。
- 若
reserved_branch != 0,触发事件 955。
服务端落点
- 协议定义:
/home/ubuntu/Game2/services/game/packet.lua
- 默认发送 helper:
/home/ubuntu/Game2/lualib/script_base.lua
- 实际活动发送链:
/home/ubuntu/Game2/services/scripts/event/newhuodong/QiXiTop.lua
关键代码
当前 Lua 的默认构包骨架
local msg = packet_def.WGCRetQueryQingRenJieTopList.new()
msg.unknow_1 = 270213680
msg.unknow_2 = 0
msg.unknow_3 = 16
msg.unknow_4 = 0
msg.unknow_5 = 1
msg.rank_list_1 = default_list_1
msg.rank_list_2 = default_list_2
self:get_scene():send2client(selfId, msg)
当前 Game.exe 的执行结论
Execute() {
if (ui_mode >= 16 && ui_mode <= 21) {
update_qingrenjie_rank_list_1(rank_list_1);
update_qingrenjie_rank_list_2(rank_list_2);
if (reserved_branch == 0)
fire_event(958, ui_mode);
else
fire_event(955);
}
return 2;
}
结论
WGCRetQueryQingRenJieTopList(1021) 是固定 4574 字节的情人节排行结果包。
- 它的主体是两组各
20 条、每条 114 字节的固定宽度榜项。
- 尾部
ui_mode / reserved_branch / ui_flag 会直接影响客户端刷新哪条 UI 分支。
- 这条包在现役 Lua 主链中仍有实际发送点。
|