GCMissionModify 是任务系统的增量更新包。当前 Lua 与 Game.exe 都能确认,它按 m_nFlag 分成两种结构:一种只推送 mission_id + mission_index,另一种直接带完整任务数据。
包信息
| 项目 |
内容 |
| 封包 ID |
473 |
| 包名 |
GCMissionModify |
| 方向 |
Server -> Client |
| 包长 |
7 / 42 |
| 对应请求 |
任务状态变化时主动触发 |
| 作用 |
增量更新单条任务或单个任务索引 |
包体结构
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x01 |
m_nFlag |
uint8 |
更新模式;当前 1 为索引更新,其余值走完整任务数据 |
0x01 |
0x06 |
mission_index_update |
bytes[6] |
mission_id:uint16 + mission_index:uint32 |
0x01 |
41 |
m_aMissionData |
bytes[41] |
完整任务条目:任务 ID、索引、标志和 8 个参数 |
当前实际行为
- 当前
human:update_md_value() 和登录初始化流程都会发送 GCMissionModify。
- 当
m_nFlag == 1 时,当前 Lua 实际发的是 mission_id:uint16 + mission_index:uint32。
- 否则,当前 Lua 会把整条任务数据打进
m_aMissionData。
- 因此这条包是任务系统的“局部刷新”,用来避免频繁回整包
GCMissionList。
服务端落点
- 协议定义:
/home/ubuntu/Game2/services/game/packet.lua
- 发送入口:
/home/ubuntu/Game2/services/scene/obj/human.lua
关键代码
if self.m_nFlag == 1 then
stream:writeuchar(self.m_nFlag)
stream:writeushort(self.mission_id)
stream:writeuint(self.mission_index)
else
stream:writeuchar(self.m_nFlag)
-- 写完整 m_aMissionData
end
结论
GCMissionModify(473) 是标准的任务增量回包。当前版本里,m_nFlag 决定它是“只刷新任务索引”还是“刷新整条任务数据”。
|