CGStopTeamFollow 是旧版客户端里用于退出组队跟随状态的请求包。
包信息
| 项目 |
内容 |
| 封包 ID |
100 |
| 包名 |
CGStopTeamFollow |
| 对应回包 |
GCReturnTeamFollow / GCTeamFollowList |
| 回包 ID |
346 / 547 |
| 作用 |
退出当前组队跟随状态 |
包体结构
这条包是空包,不携带任何业务参数。
| 偏移 |
长度 |
字段 |
类型 |
含义 |
- |
0x00 |
无 |
- |
空包,无附带参数 |
总长度:
0 字节
当前实际行为
- 当前 Lua 服务端收到后,会直接进入场景服处理。
- 处理入口是
scenecore:char_stop_team_follow()。
- 最终实际逻辑在
human:stop_team_follow()。
- 如果当前角色不是组队跟随状态,这条包不会产生额外回包。
- 如果是普通跟随成员,当前角色会退出跟随,并收到一条
GCReturnTeamFollow。
- 如果是队长停止组队跟随,会把当前跟随列表中的成员全部退出跟随,并广播新的
GCTeamFollowList。
结果值
GCReturnTeamFollow 里与这条包直接相关的结果值是:
| 项目 |
值 |
含义 |
TF_RESULT_STOP_FOLLOW |
2 |
退出组队跟随状态 |
服务端落点
这条包在当前项目里的关键位置如下:
- 协议定义:
- 请求入口:
- 场景服入口:
services/scene/scenecore.lua
- 实际停止逻辑:
services/scene/obj/human.lua
关键代码
空包定义
packet.CGStopTeamFollow = {
xy_id = packet.XYID_CG_STOP_TEAM_FOLLOW,
bis = function(self, buffer)
local stream = bistream.new()
stream:attach(buffer)
end
}
请求入口
function request:CGStopTeamFollow()
skynet.call(my_scene, "lua", "char_stop_team_follow", my_obj_id, self)
end
场景服处理
function scenecore:char_stop_team_follow(who)
local obj_me = self.objs[who]
obj_me:stop_team_follow()
end
实际停止逻辑
if self:get_team_follow_flag() then
if self:get_is_team_leader() then
...
msg.return_type = define.TEAM_FOLLOW_RESULT.TF_RESULT_STOP_FOLLOW
...
else
...
msg.return_type = define.TEAM_FOLLOW_RESULT.TF_RESULT_STOP_FOLLOW
...
end
end
结论
CGStopTeamFollow 这条包本质上就是“退出组队跟随”的空请求包。
当前项目里真正要记住的只有四点:
- 这条包的 ID 是
100。
- 包体长度是
0,没有任何请求参数。
- 当前 Lua 里它最终调用的是
human:stop_team_follow()。
- 成功退出后,相关角色会收到
GCReturnTeamFollow(return_type = 2),队长停止时还会刷新 GCTeamFollowList。
|