CGLoginAcc 是客户端提交登录账号数据的变长请求包。当前 Game.exe 与现役 /home/ubuntu/Game2 Lua 都能确认:它的包体结构为 1 字节长度 + 长度字节串,并且长度会被限制在 0x32(50)字节以内。
包信息
| 项目 |
内容 |
| 封包 ID |
778 |
| 包名 |
CGLoginAcc |
| 方向 |
CG 客户端 -> 服务端 |
| 包长 |
变长,1 + N,其中 N <= 50 |
| 专用回包 |
无专用回包 |
| 当前 Lua 协议定义 |
/home/ubuntu/Game2/services/game/packet.lua |
| 当前 Lua 请求入口 |
未在现役主链中检出 |
| 当前用途 |
按包名和字段形态推断,用于提交登录账号 / 认证数据 |
当前 Game.exe 可直接确认:
GetPacketID() = 778;
GetPacketSize() = min(size, 50) + 1;
Read() = read_u8_size + read_bytes(size);
Write() = write_u8_size + write_bytes(size);
Execute() = 2;
包体结构
按当前 Game.exe 与现役 Lua packet.lua,包体结构如下:
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x01 |
size |
uint8 |
后续数据长度;当前 Game.exe 与 Lua 都会把它截断到 0x32 |
0x01 |
size |
data |
bytes[size] |
登录数据负载;当前 Lua 只按原始字节串保存,不做进一步解包 |
长度规则:
packet_size = 1 + min(size, 50)
字段命名说明:
size 与 data 可以直接由现役 /home/ubuntu/Game2/services/game/packet.lua 确认。
- “登录账号数据提交”属于基于包名
CGLoginAcc 和字段形态作出的语义推断;当前现役 Lua 未检出同名处理入口,因此无法进一步把 data 精确命名为“账号名”“票据”或“Token”。
当前实际行为
- 当前
Game.exe 在读取这条包时,会先读取 size,如果 size > 0x32,就强制截断为 50。
- 截断后再按
size 读取对应字节数的 data。
- 写包逻辑与读包一致:如果内部
size 大于 50,发包时也只会写出 50。
GetPacketSize() 同样以 min(size, 50) + 1 计算,因此这条包在当前链路中的最大长度是 51 字节。
- 当前现役
/home/ubuntu/Game2 主链里只保留了协议定义,没有检出:
request:CGLoginAcc()
services/login 下的同名处理入口
services/scene 或 services/msgagent.lua 中的同名分发逻辑
- 这说明从现役 Lua 角度看,
CGLoginAcc 更接近“协议保留定义”,而不是当前已经落地的 Lua 登录处理链。
- 当前
Game.exe 里的 Execute() 只是直接返回 2,没有额外本地逻辑。
- 现役 Lua 也没有对应的
GCLoginAcc 或 LoginAccResult 专用回包定义,因此当前文档按“无专用回包”处理。
服务端落点
当前现役服务端能确认的落点如下:
/home/ubuntu/Game2/services/game/packet.lua
- 定义
packet.XYID_CG_LOGIN_ACC = 778
packet.CGLoginAcc.bis() 读取 size 和 data
当前现役主链未检出以下同名接入:
/home/ubuntu/Game2/services/msgagent.lua
/home/ubuntu/Game2/services/login
/home/ubuntu/Game2/services/scene/scenecore.lua
/home/ubuntu/Game2/services/scene/obj/human.lua
因此,当前项目里可以确认“协议结构存在”,但不能确认“现役 Lua 登录链仍在消费这条包”。
关键代码
当前 Game.exe 结构
__int64 GetPacketID() {
return 778;
}
__int64 GetPacketSize(Packet *pkt) {
return (pkt->size <= 0x32 ? pkt->size : 50) + 1;
}
__int64 Read(Packet *pkt, Stream *s) {
s->Read(&pkt->size, 1);
if (pkt->size > 0x32)
pkt->size = 50;
s->Read(pkt->data, pkt->size);
return 1;
}
__int64 Write(Packet *pkt, Stream *s) {
uint8_t size = pkt->size <= 0x32 ? pkt->size : 50;
s->Write(&size, 1);
s->Write(pkt->data, size);
return 1;
}
__int64 Execute() {
return 2;
}
当前 Lua 协议定义
packet.CGLoginAcc = {
xy_id = packet.XYID_CG_LOGIN_ACC,
ctor = function(self)
self.size = 0
self.data = ""
end,
bis = function(self, buffer)
local stream = bistream.new()
stream:attach(buffer)
self.size = stream:readuchar()
if self.size > 0x32 then self.size = 0x32 end
self.data = stream:read(self.size)
end
}
结论
CGLoginAcc 是一条变长请求包,当前结构为 uint8 size + bytes[size]。
- 当前
Game.exe 与现役 Lua 都明确把 size 上限限制为 50,所以最大包长为 51 字节。
- 当前链路里可以确认字段名只有
size 和 data;“登录账号数据”属于基于包名的语义推断,不能进一步断定为具体账号名或某种固定票据格式。
- 现役
/home/ubuntu/Game2 主链未检出同名请求处理入口,因此当前只能确认协议定义存在,不能确认它仍在现役 Lua 登录链中被消费。
- 当前
Game.exe 的 Execute() 没有额外逻辑,现役 Lua 也未见专用结果包定义,因此本文按“无专用回包”处理。
|