GCMissionRemove 是当前旧版项目仍在使用的任务删除包。无论是主动放弃任务,还是服务端按任务 ID 删除任务,最终都会给客户端发送这条固定 4 字节下行包。
包信息
| 项目 |
内容 |
| 封包 ID |
190 |
| 包名 |
GCMissionRemove |
| 方向 |
Server -> Client |
| 包长 |
4 |
| 当前 Lua 协议定义 |
已实现 bos() |
| 作用 |
通知客户端把指定任务从任务列表中删除 |
包体结构
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x04 |
mission_id |
int32 |
需要删除的任务 ID |
当前实际行为
- 当前
Game.exe 中,GetPacketID() 返回 190,GetPacketSize() 返回 4。
- 当前 Lua 协议定义只实现了
bos(),并固定写出一个 int32 id。
- 现役发送点位于
human.lua:
mission_abandon(index):按任务索引放弃任务后发送
del_mission(mission_id):按任务 ID 删除任务后发送
- 发送时写入的值都是任务对象里的
mission.id,不是任务脚本索引。
服务端落点
- 协议定义:
/home/ubuntu/Game2/services/game/packet.lua
- 现役发送点:
/home/ubuntu/Game2/services/scene/obj/human.lua
关键代码
packet.GCMissionRemove = {
bos = function(self)
local stream = bostream.new()
stream:writeint(self.id)
return stream:get()
end
}
function human:mission_abandon(index)
for i, mission in ipairs(self.mission_data.char_missions) do
if mission.index == index then
table.remove(self.mission_data.char_missions, i)
local msg = packet_def.GCMissionRemove.new()
msg.id = mission.id
self:get_scene():send2client(self, msg)
return
end
end
end
结论
GCMissionRemove(190) 是当前版本现役的任务删除通知包,结构只有一个 int32 mission_id。它的作用非常单纯,就是告诉客户端把对应任务从任务列表里移除。
|