GCNewMonster 是怪物进入视野时的创建广播包。当前 Game.exe 与 Lua 都确认它固定 116 字节,但现役 Lua 只明确使用了其中少数字段,其余大段内容仍是旧客户端兼容区。
包信息
| 项目 |
内容 |
| 封包 ID |
321 |
| 包名 |
GCNewMonster |
| 方向 |
Server -> Client |
| 对应请求 |
无专用请求;当前由场景对象主动广播 |
| 固定包长 |
116 |
| 作用 |
把新怪物对象的创建信息广播给客户端 |
包体结构
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x04 |
m_objID |
uint32 |
怪物对象 ID |
0x04 |
0x04 |
story_point |
uint32 |
剧情点字段,当前 Lua 名为 juqing_point |
0x08 |
0x0C |
reserved_block_1 |
bytes[12] |
旧客户端兼容区 |
0x14 |
0x04 |
guid |
int32 |
怪物 GUID |
0x18 |
0x10 |
reserved_block_2 |
bytes[16] |
旧客户端兼容区 |
0x28 |
0x08 |
world_pos |
float[2] |
怪物坐标 |
0x30 |
0x10 |
reserved_block_3 |
bytes[16] |
旧客户端兼容区 |
0x40 |
0x04 |
dir |
float |
朝向 |
0x44 |
0x10 |
reserved_block_4 |
bytes[16] |
旧客户端兼容区 |
0x54 |
0x04 |
speed |
float |
移动速度 |
0x58 |
0x14 |
reserved_block_5 |
bytes[20] |
旧客户端兼容区 |
0x6C |
0x08 |
reserved_tail |
bytes[8] |
尾部保留字节 |
总长度:
116 字节
当前实际行为
- 当前
monster:create_new_obj_packet() 明确填写的字段只有 guid、m_objID、dir、speed、juqing_point 和 world_pos。
- 其余字段当前 Lua 仍写一组固定常量,明显属于旧客户端兼容区。
- 因此写文档时最重要的是把“现役明确使用字段”和“大段兼容保留区”分开。
服务端落点
- 协议定义:
/home/ubuntu/Game2/services/game/packet.lua
- 怪物创建点:
/home/ubuntu/Game2/services/scene/obj/monster.lua
关键代码
local msg = packet_def.GCNewMonster.new()
msg.guid = self:get_guid()
msg.m_objID = self:get_obj_id()
msg.dir = self:get_dir()
msg.speed = self:get_speed()
msg.juqing_point = 0
msg.world_pos = table.clone(self:get_world_pos())
msg.worldPos = msg.world_pos
结论
GCNewMonster(321) 是固定 116 字节的怪物创建广播包。
- 当前真正坐实的现役字段只有对象 ID、GUID、剧情点、坐标、朝向和速度。
- 其余大段内容应按兼容旧客户端的保留区记录。
|