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

洱海月 v0-07-0300 封包解析:ID 144 GCDelObject(视野对象删除通知)

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

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

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

×

GCDelObject 是当前旧版项目仍在使用的视野对象删除包。角色、平台等对象离开观察者视野时,Lua 场景服会向客户端发送这条固定 6 字节包,让客户端把指定对象从当前场景里移除。

包信息

项目 内容
封包 ID 144
包名 GCDelObject
方向 Server -> Client
包长 6
当前 Lua 协议定义 已实现
作用 通知客户端删除当前视野中的场景对象

包体结构

偏移 长度 字段 类型 含义
0x00 0x04 m_objID uint32 需要从视野中移除的对象 ID
0x04 0x02 m_idScene uint16 当前场景 ID

当前实际行为

  • 当前 Game.exe 中,GetPacketID() 返回 144,GetPacketSize() 返回 6。
  • 当前 Lua 协议定义与 Game.exe 完全一致,bis() / bos() 都只处理 m_objID + m_idScene。
  • 现役发送点位于 character:on_obj_leave_view(obj):
    • 目标对象离开当前观察者视野时
    • 服务端构造 GCDelObject
    • 把目标对象 ID 和当前场景 ID 一起发给客户端
  • 这条包是当前旧版项目真正在线使用的“对象离视野删除”主链。

服务端落点

  • 协议定义:
    • /home/ubuntu/Game2/services/game/packet.lua
  • 现役发送点:
    • /home/ubuntu/Game2/services/scene/obj/character.lua

关键代码

packet.GCDelObject = {
    bis = function(self, buffer)
        local stream = bistream.new()
        stream:attach(buffer)
        self.m_objID = stream:readuint()
        self.m_idScene = stream:readushort()
    end,
    bos = function(self)
        local stream = bostream.new()
        stream:writeuint(self.m_objID)
        stream:writeushort(self.m_idScene)
        return stream:get()
    end
}
function character:on_obj_leave_view(obj)
    local ret = packet_def.GCDelObject.new()
    ret.m_objID = obj:get_obj_id()
    ret.m_idScene = self.scene:get_id()
    self.scene:send2client(self, ret)
    character.super.on_obj_leave_view(self, obj)
end

结论

GCDelObject(144) 是当前版本现役的视野删除通知包。结构非常稳定,就是 m_objID + m_idScene 两个字段;只要对象离开观察者视野,Lua 场景服就会直接发送它。

您需要登录后才可以回帖 登录 | registerss

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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