GCObjTeleport 是场景对象瞬移位置同步包,用 1 个对象 ID 和 1 个坐标点直接通知客户端更新位置。
包信息
| 项目 |
内容 |
| 封包 ID |
297 |
| 包名 |
GCObjTeleport |
| 方向 |
Server -> Client |
| 对应请求 |
无专用请求;当前由服务端主动广播 |
| 固定包长 |
12 |
| 作用 |
同步对象瞬移后的目标坐标 |
包体结构
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x04 |
m_objID |
uint32 |
目标对象 ID |
0x04 |
0x04 |
world_pos.x |
float |
瞬移目标 X |
0x08 |
0x04 |
world_pos.y |
float |
瞬移目标 Y |
总长度:
12 字节
当前实际行为
- 当前
character.lua 会在对象瞬移后广播这条包。
- 包体很纯粹,只同步对象 ID 和落点坐标,不携带路径、方向等额外信息。
- 它适合用在直接换坐标而不是平滑移动的场景。
服务端落点
- 协议定义:
/home/ubuntu/Game2/services/game/packet.lua
- 发送点:
/home/ubuntu/Game2/services/scene/obj/character.lua
关键代码
packet.GCObjTeleport = {
bos = function(self)
local stream = bostream.new()
stream:writeuint(self.m_objID)
stream:writefloat(self.world_pos.x)
stream:writefloat(self.world_pos.y)
return stream:get()
end
}
结论
GCObjTeleport(297) 是对象瞬移同步包。
- 结构固定为
m_objID + world_pos.x + world_pos.y。
- 当前项目用它直接把客户端对象拉到新的落点。
|