找回密码
 registerss
搜索

洱海月 v0-07-0300 封包解析:ID 1021 WGCRetQueryQingRenJieTopList(情人节排行返回)

[复制链接]
Waylee 发表于 2026-4-15 17:40 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

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

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

×

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() 的当前行为可以收敛为:

  1. 只有当 ui_mode 落在 16..21 之间时,才会继续刷新榜单缓存。
  2. 两组 20 条榜单都会写入本地活动排行状态。
  3. 若 reserved_branch == 0,触发事件 958(ui_mode)。
  4. 若 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;
}

结论

  1. WGCRetQueryQingRenJieTopList(1021) 是固定 4574 字节的情人节排行结果包。
  2. 它的主体是两组各 20 条、每条 114 字节的固定宽度榜项。
  3. 尾部 ui_mode / reserved_branch / ui_flag 会直接影响客户端刷新哪条 UI 分支。
  4. 这条包在现役 Lua 主链中仍有实际发送点。
您需要登录后才可以回帖 登录 | registerss

本版积分规则

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

GMT+8, 2026-10-24 13:57 , Processed in 0.026039 second(s), 27 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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