找回密码
 registerss
搜索
查看: 22|回复: 0

洱海月 v0-07-0300 封包解析:ID 009 GCGuild(帮会信息复合回包)

[复制链接]
  • 打卡等级:本地老炮
  • 打卡总天数:603
  • 打卡月天数:1
  • 打卡总奖励:600
  • 最近打卡:2026-10-03 06:32:28
Waylee 发表于 2026-4-15 01:50 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?registerss

×

包信息

项目 内容
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
    • 定义 GCGuild 的公共头和全部分支读写
  • /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 六个分支即可;这六支已经覆盖现役帮会界面的主要数据来源。

您需要登录后才可以回帖 登录 | registerss

本版积分规则

QQ|手机版|雪舞知识库 ( 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 )|天天打卡

GMT+8, 2026-10-4 11:26 , Processed in 0.079989 second(s), 26 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表