CGEnvRequest 是旧版客户端里用于请求当前世界时间的封包。
包信息
| 项目 |
内容 |
| 封包 ID |
003 |
| 包名 |
CGEnvRequest |
| 对应回包 |
GCWorldTime |
| 回包 ID |
277 |
| 作用 |
请求当前世界时间 / 环境时间同步 |
包体结构
这条包是空包,不携带任何业务参数。
| 偏移 |
长度 |
字段 |
类型 |
含义 |
- |
0x00 |
无 |
- |
空包,无附带参数 |
总长度:
0 字节
回包内容
服务端收到后,通常会返回 GCWorldTime。
当前可按下面结构理解:
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x04 |
world_time |
uint32 |
当前世界时间阶段 |
0x04 |
0x04 |
world_time_counter |
uint32 |
当前阶段累计计数 |
0x08 |
0x04 |
world_time_interval |
float |
世界时间推进间隔 |
其中 world_time 在当前项目里对应:
WT_IND_1 ~ WT_IND_12
- 也就是子时到亥时这 12 个时段
服务端落点
这条包在当前项目里的关键位置如下:
- 协议定义:
- 世界时间主动下发:
services/world/worldcore.lua
- 场景内广播世界时间:
services/scene/scenecore.lua
旧版 C++ 服务端里,这条包的处理结果很直接:
- 收到
CGEnvRequest
- 立即组一个
GCWorldTime
- 把当前世界时间发回客户端
当前 Lua 项目里没有看到单独的 CGEnvRequest 请求入口,整体实现更偏向主动同步 GCWorldTime。
关键代码
空包定义
packet.CGEnvRequest = {
xy_id = packet.XYID_CG_ENV_REQUEST,
bis = function(self, buffer)
local stream = bistream.new()
stream:attach(buffer)
end
}
世界时间下发
local msg = packet_def.GCWorldTime.new()
msg.world_time_counter = self.world_timer.counter
msg.world_time = self.world_timer.time
self:send2client(user, msg)
结论
CGEnvRequest 这条包本质上就是“请求当前世界时间”的空封包。
当前项目里真正要记住的只有三点:
- 这条包的 ID 是
003。
- 包体长度是
0,没有任何请求参数。
- 它的核心作用是触发世界时间同步,典型回包是
GCWorldTime(277)。
|