找回密码
 registerss
搜索
查看: 36|回复: 0

洱海月 v0-07-0300 封包解析:ID 003 CGEnvRequest(世界时间请求)

[复制链接]
  • 打卡等级:本地老炮
  • 打卡总天数:603
  • 打卡月天数:1
  • 打卡总奖励:600
  • 最近打卡:2026-10-03 06:32:28
Waylee 发表于 2026-4-11 23:49 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

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

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

×

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/game/packet.lua
  • 世界时间主动下发:
    • 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 这条包本质上就是“请求当前世界时间”的空封包。

当前项目里真正要记住的只有三点:

  1. 这条包的 ID 是 003。
  2. 包体长度是 0,没有任何请求参数。
  3. 它的核心作用是触发世界时间同步,典型回包是 GCWorldTime(277)。
您需要登录后才可以回帖 登录 | registerss

本版积分规则

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

GMT+8, 2026-10-4 11:26 , Processed in 0.111962 second(s), 25 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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