CLAskCharLogin 是登录服收到“选中角色并进入游戏服”时的请求包。当前 Lua 登录服只真正使用其中的 guid 字段,第二个 PlayerID 字段在现版主链没有参与校验。
包信息
| 项目 |
内容 |
| 封包 ID |
426 |
| 包名 |
CLAskCharLogin |
| 方向 |
Client -> LoginServer |
| 包长 |
6 |
| 对应回包 |
LCRetCharLogin |
| 作用 |
提交目标角色 GUID,请登录服放行进入游戏服 |
包体结构
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x04 |
guid |
uint32 |
目标角色 GUID |
0x04 |
0x02 |
PlayerID |
uint16 |
客户端选角附带索引,当前 Lua 登录服未使用 |
当前实际行为
- 当前登录服在
logind.lua 的 XYID_CLASKCHARLOGIN 分支只取 packet.guid 做在线、角色归属和区服合法性校验。
- 当前
PlayerID 在现役 Lua 主链没有进入任何校验逻辑。
- 登录服校验通过后,会向
.gamed 申请登录子会话,再回 LCRetCharLogin 给客户端。
- 如果角色已在线或重登冷却未结束,当前登录服会直接返回
result = 8 阻止继续进入。
服务端落点
- 协议定义:
/home/ubuntu/Game2/services/login/packet.lua
- 登录入口:
/home/ubuntu/Game2/services/login/logind.lua
关键代码
elseif packet.xy_id == packet_def.XYID_CLASKCHARLOGIN then
local guid = packet.guid
if skynet.call(".gamed", "lua", "check_guid_is_online", guid) then
ret = packet_def.LCRetCharLogin.new()
ret.result = 8
loginservice.send(fd, idx, ret)
return
end
end
结论
CLAskCharLogin(426) 的现版主链重点只有一个:提交要进入游戏服的角色 GUID。PlayerID 仍保留在协议里,但当前登录服并不依赖它做实际放行判断。
|