包信息
| 项目 |
内容 |
| PacketID |
9 |
| 包名 |
GCGuild |
| 方向 |
服务端 -> 客户端 |
| 长度 |
变长,按 packet_type 复用不同载荷 |
| 主要用途 |
统一返回帮会列表、成员列表、帮会详情、任命信息、自身帮会信息、职位名称列表等数据 |
| 当前主链状态 |
现役;当前 Lua 主链主要发送 58 / 59 / 60 / 61 / 62 / 63 六个分支 |
包体结构
公共头
| 偏移 |
长度 |
字段 |
类型 |
含义 |
| 0 |
1 |
packet_type |
uint8 |
分支类型 |
| 1 |
4 |
askid |
uint32 |
请求流水号,当前 Lua 一般回 cg.askid + 1 |
当前活跃分支
packet_type |
当前用途 |
载荷概览 |
58 |
帮会成员列表 |
成员数量、权限信息、帮会描述、成员条目列表 |
59 |
帮会详情 |
帮会基础资料、建设等级、繁荣度、城战场景等 |
60 |
任命信息 |
可任命职位列表 |
61 |
自身帮会信息 |
当前角色职位、贡献、帮会公告、宣言、野战状态等 |
62 |
帮会职位名称列表 |
多条职位名称记录 |
63 |
帮会名称列表 |
原始名称块数据 |
62 分支职位名称条目
| 偏移 |
长度 |
字段 |
类型 |
含义 |
| 0 |
4 |
pos |
int32 |
职位编号 |
| 4 |
25 |
std_name |
char[25] |
默认职位名 |
| 29 |
25 |
name |
char[25] |
当前自定义职位名 |
| 54 |
4 |
modify_time |
uint32 |
修改时间 |
| 58 |
1 |
reset |
uint8 |
是否重置标记 |
| 59 |
5 |
reserved_1 |
byte[5] |
保留位 |
当前实际行为
- 当前 Lua 主链已经把
GCGuild 当作帮会系统的统一下行回包使用。
58 分支用于成员列表;每个成员条目至少包含名字、GUID、等级、门派、当前贡献、累计贡献、周贡献、入帮时间、离线时间、在线状态、职位。
59 分支用于帮会详情;当前 Lua 已明确写入 name、creator、chief_name、city_name、confederate_name、level、port_scene_id、成员数、建设等级、繁荣度等信息,其中原 unknow_4 实际对应 city_scene_id。
61 分支用于当前角色的自身帮会信息;当前 Lua 已明确写入当前贡献、周贡献、最大贡献、city_scene_id、帮会公告、入帮时间、离线时间、野战状态和备战人数。
62 分支用于职位名称列表;当前服务端通过 guild_get_position_name_list 返回最多 10 条职位名记录。
63 分支用于整块帮会名称列表。
- 当前
Game.exe 仍保留非空 GCGuildHandler,说明客户端对这些分支仍有实际处理和界面刷新逻辑。
服务端落点
/home/ubuntu/Game2/services/game/packet.lua
/home/ubuntu/Game2/msgagent_module/ma_guild.lua
- 当前主链实际发送
58 / 59 / 60 / 61 / 62 / 63 分支
/home/ubuntu/Game2/services/guild/guildmanager_core.lua
- 提供帮会名列表、帮会详情、任命信息、职位名称等原始数据
关键代码
function ma_guild:get_guild_info(cg, guild_id)
local guild = skynet.call(".Guildmanager", "lua", "ask_guild_info", cg)
if guild then
local msg = packet_def.GCGuild.new()
msg.packet_type = 59
msg.city_name = guild.city_name
msg.confederate_name = guild.confederate_name
msg.chief_name = guild.chief_name
msg.creator = guild.creator
msg.name = guild.name
msg.mem_num = #guild.users
msg.unknow_4 = self:get_city_scene_id(guild.city_id)
msg.askid = cg.askid + 1
self:send2client(msg)
end
end
function ma_guild:on_guild_info(guild, askid)
local self_guild_info = self:get_my_guild_info_in_guild(self:get_guid(), guild)
local msg = packet_def.GCGuild.new()
msg.packet_type = 61
msg.guild_id = guild.id
msg.position = self_guild_info.position
msg.position_name = resolve_guild_position_name(guild, self_guild_info.position)
msg.unknow_9 = cur_contribute
msg.unknow_10 = week_contribute
msg.unknow_11 = max_contribute
msg.unknow_12 = self:get_city_scene_id(guild.city_id)
msg.unknow_23 = self:get_prepare_count(guild)
self:send2client(msg)
end
结论
GCGuild 是当前版本帮会系统的复合回包,真正需要区分的是 packet_type,而不是把它当作单一固定结构包。
在当前 Temp_Release_v0-07-0300 主链里,优先关注 58 到 63 六个分支即可;这六支已经覆盖现役帮会界面的主要数据来源。
|