找回密码
 register
搜索
查看: 5|回复: 0

洱海月 v0-08-0501 封包解析:ID 171 CGDisclosureToGM(聊天投诉与 GM 申告)

[复制链接]
  • 打卡等级:本地老炮
  • 打卡总天数:521
  • 打卡月天数:10
  • 打卡总奖励:519
  • 最近打卡:2026-06-12 00:22:10
Waylee 发表于 2026-4-25 23:37 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

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

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

×

CGDisclosureToGM 是聊天右键菜单“投诉/举报”与邮件投诉等旧 GM 申告入口使用的上行包。它和外挂举报窗口的 CGReportWaigua(1215) 不是同一条链路:聊天菜单 ContexMenu_ChatBoard_Toushu_Clicked() 调用 Talk:HandleMenuAction("Toushu"),客户端随后发送的是本包。

包信息

项目 内容
封包 ID 171
包名 CGDisclosureToGM
方向 CG 客户端 -> 游戏服
对应回包 GCRetGMMsg(92)
作用 向 GM 提交聊天、密聊、邮件等投诉信息

当前 Game.exe 可确认它是由 5 段变长文本和 5uint32 组成的复合变长包:

packet_size = text_1_len + text_2_len + nested_text_1_len
            + nested_text_2_len + nested_text_3_len + 31

包体结构

偏移 长度 字段 类型 含义
0x00 0x04 reserved_1 uint32 顶层保留整型
0x04 0x01 text_1_len uint8 第一段文本长度,上限 30
0x05 text_1_len text_1 bytes[len] 第一段文本,GBK
0x05 + text_1_len 0x02 text_2_len uint16 第二段文本长度,上限 256
0x07 + text_1_len text_2_len text_2 bytes[len] 第二段文本,GBK
0x07 + text_1_len + text_2_len 0x04 reserved_2 uint32 顶层中段保留整型
0x0B + text_1_len + text_2_len 0x04 reserved_3 uint32 顶层中段保留整型
0x0F + text_1_len + text_2_len 0x01 nested_text_1_len uint8 子结构第一段文本长度,上限 30
0x10 + text_1_len + text_2_len nested_text_1_len nested_text_1 bytes[len] 子结构第一段文本,GBK
0x10 + text_1_len + text_2_len + nested_text_1_len 0x01 nested_text_2_len uint8 子结构第二段文本长度,上限 64
0x11 + text_1_len + text_2_len + nested_text_1_len nested_text_2_len nested_text_2 bytes[len] 子结构第二段文本,GBK
0x11 + text_1_len + text_2_len + nested_text_1_len + nested_text_2_len 0x02 nested_text_3_len uint16 子结构第三段文本长度,上限 256
0x13 + text_1_len + text_2_len + nested_text_1_len + nested_text_2_len nested_text_3_len nested_text_3 bytes[len] 子结构第三段文本,GBK
0x13 + text_1_len + text_2_len + nested_text_1_len + nested_text_2_len + nested_text_3_len 0x04 nested_reserved_1 uint32 子结构尾部保留整型
0x17 + text_1_len + text_2_len + nested_text_1_len + nested_text_2_len + nested_text_3_len 0x04 reserved_4 uint32 顶层尾部保留整型
0x1B + text_1_len + text_2_len + nested_text_1_len + nested_text_2_len + nested_text_3_len 0x04 reserved_5 uint32 顶层最终尾字段

当前实际行为

  • 客户端聊天右键菜单的投诉入口不会弹 AccusationStudio,而是直接发送本包。
  • 当前 Lua 服务端解析全部 5 段文本和保留整型,写入 log_disclosure_to_gm
  • 服务端落库后发送 GCRetGMMsg(92),当前成功分支使用 return_code = 0
  • 客户端收到 return_code = 0 后会映射本地字典键 dr_suc,提示举报已发送给 GM,并把玩家名加入屏蔽列表。

服务端落点

  • 协议定义:/home/ubuntu/Game2/services/game/packet.lua
  • 请求入口:/home/ubuntu/Game2/services/msgagent.luarequest:CGDisclosureToGM()
  • 投诉日志集合:log_disclosure_to_gm
  • 成功提示回包:GCRetGMMsg(92)

关键代码

当前 Lua 包体解析:

self.reserved_1 = stream:readuint()
self.text_1_len = stream:readuchar()
self.text_1 = read_text(self.text_1_len, 0x1E)
self.text_2_len = stream:readushort()
self.text_2 = read_text(self.text_2_len, 0x100)
self.reserved_2 = stream:readuint()
self.reserved_3 = stream:readuint()
self.nested_text_1_len = stream:readuchar()
self.nested_text_1 = read_text(self.nested_text_1_len, 0x1E)
self.nested_text_2_len = stream:readuchar()
self.nested_text_2 = read_text(self.nested_text_2_len, 0x40)
self.nested_text_3_len = stream:readushort()
self.nested_text_3 = read_text(self.nested_text_3_len, 0x100)
self.nested_reserved_1 = stream:readuint()
self.reserved_4 = stream:readuint()
self.reserved_5 = stream:readuint()

当前 Lua 处理逻辑:

skynet.send(".logdb", "lua", "insert", { collection = "log_disclosure_to_gm", doc = doc })
local msg = packet_def.GCRetGMMsg.new()
msg.return_code = 0
Net:send(msg)

结论

  1. CGDisclosureToGM(171) 是聊天投诉 / GM 申告包,不是外挂举报窗口包。
  2. 当前包体是复合变长结构,总长度为 5 段文本长度之和加 31
  3. 当前服务端已接入解析、落库和成功回包;后续如果要做频率限制,应通过 GCRetGMMsg.return_code = 1 触发 dr_err_toofast
您需要登录后才可以回帖 登录 | register

本版积分规则

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

GMT+8, 2026-6-12 03:23 , Processed in 0.055509 second(s), 25 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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