GCRetGMMsg 是 GM 申告/投诉链路使用的极短结果回包。当前客户端会读取 return_code,再从本地字典表映射提示文本;聊天投诉 CGDisclosureToGM(171) 成功后,服务端发送本包并使用 return_code = 0。
包信息
| 项目 |
内容 |
| 封包 ID |
92 |
| 包名 |
GCRetGMMsg |
| 方向 |
GC 游戏服 -> 客户端 |
| 包长 |
固定 3 字节 |
| 对应请求 |
CGDisclosureToGM(171) 等 GM 申告请求 |
| 作用 |
下发 GM 申告结果码,并触发客户端本地文本提示 |
当前 Game.exe 可确认:
GetPacketID() = 92
GetPacketSize() = 3
Read/Write = uint16 + uint8
Execute = gm_text_table[return_code] -> 客户端提示
包体结构
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x02 |
reserved_1 |
uint16 |
当前客户端会读写,但现有证据不足以稳定命名 |
0x02 |
0x01 |
return_code |
uint8 |
结果码,用于映射本地提示文本 |
当前实际行为
当前客户端已确认的前几个结果码:
| return_code |
字典 key |
文本含义 |
0 |
dr_suc |
举报已成功发送给 GM,同时玩家名加入屏蔽列表 |
1 |
dr_err_toofast |
投诉过于频繁,3 分钟内只能投诉一次 |
2 |
drr_err |
通用错误键 |
3 |
CYRM_140825_11 |
复用的本地字典键 |
当前 Lua 服务端只在 CGDisclosureToGM 成功落库后发送 return_code = 0。
服务端落点
- 协议定义:
/home/ubuntu/Game2/services/game/packet.lua
- 发送入口:
/home/ubuntu/Game2/services/msgagent.lua 的 request:CGDisclosureToGM()
- 主要触发链:
CGDisclosureToGM(171) -> log_disclosure_to_gm -> GCRetGMMsg(92)
关键代码
当前 Lua 下行写包:
packet.GCRetGMMsg = {
xy_id = packet.XYID_GC_RET_GM_MSG,
ctor = function(self)
self.reserved_1 = 0
self.return_code = 0
end,
bos = function(self)
local stream = bostream.new()
stream:writeushort(self.reserved_1 or 0)
stream:writeuchar(self.return_code or 0)
return stream:get()
end
}
当前 Lua 发送成功提示:
local msg = packet_def.GCRetGMMsg.new()
msg.return_code = 0
Net:send(msg)
结论
GCRetGMMsg(92) 是固定 3 字节的 GM 申告结果提示包。当前服务端用 return_code = 0 触发客户端 dr_suc,也就是“您的举报已经成功的发送给GM,谢谢!同时该玩家名字将加入您的屏蔽列表。”
|