找回密码
 registerss
搜索

洱海月 v0-07-0300 封包解析:ID 060 CGCommand(文本 GM 命令)

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

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

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

×

CGCommand 是旧版客户端里用于向服务端发送文本命令的通用请求包。

包信息

项目 内容
封包 ID 060
包名 CGCommand
对应回包 当前未发现固定专用回包
回包 ID 无
作用 发送一条文本命令给服务端解析,当前项目里作为文本 GM 命令入口使用

包体结构

当前 Game.exe 与 Lua 服务端下,这条包是可变长结构。

偏移 长度 字段 类型 含义
0x00 0x01 command_size uint8 命令文本长度
0x01 n command_text char[n] 命令字符串正文

总长度:

1 + command_size

字段说明

  • command_size 是命令文本字节长度,字段类型为 uint8,最大值为 255。
  • command_text 是实际发送给服务端的文本命令内容。
  • 当前项目里,服务端收到这条包后会直接把 command_text 交给 GMCommand 处理。

当前实际行为

  • 这条包在当前项目里已经接入,不是仅存在于旧资料中的历史包。
  • 请求进入场景服后,会落到 char_command()。
  • char_command() 最终会调用 GMCommand:process()。
  • GMCommand 当前只在调试环境下执行。
  • 命令执行前还会进行 GM 权限等级校验。
  • 没有固定专用回包,实际反馈通常表现为提示消息、GCUICommand 或 GCScriptCommand。

服务端落点

  • 协议定义:services/game/packet.lua
  • 请求入口:services/msgagent.lua
  • 场景处理:services/scene/scenecore.lua
  • 命令执行:lualib/GMCommand.lua

关键代码

self.command_size = stream:readuchar()
if self.command_size > 0 then
    self.command_text = stream:read(self.command_size)
else
    self.command_text = ""
end
if type(content) ~= "string" or content == "" then
    return
end
GMCommand:process(obj, content)
if not is_debug_env() then
    return false
end

结论

这条包真正要记住的只有五点:

  1. CGCommand 的封包 ID 是 060。
  2. 包体不是固定长度,而是 1 字节长度加一段文本命令。
  3. 当前项目里,这条包已经接入 Lua 服务端,并作为文本 GM 命令入口使用。
  4. 这条包没有固定专用回包,执行结果按具体命令返回。
  5. 当前命令执行受调试环境和 GM 权限等级双重限制。
您需要登录后才可以回帖 登录 | registerss

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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