找回密码
 registerss
搜索

洱海月 v0-07-0300 封包解析:ID 1014 GCRefreshKFSSkill(KFS 技能刷新)

[复制链接]
Waylee 发表于 2026-4-15 16:40 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

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

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

×

GCRefreshKFSSkill 是现役 Lua 仍在发送的另一条“三技能槽”刷新包。当前 Game.exe 与 /home/ubuntu/Game2 Lua 都能确认,它同样是固定 10 字节:一个背包位,加上 3 个技能槽。

包信息

项目 内容
封包 ID 1014
包名 GCRefreshKFSSkill
方向 GC 服务端 -> 客户端
固定包长 10
当前 Lua 协议定义 已接入
当前 Lua 发送入口 已接入
主要作用 同步 KFS 相关物品或系统的 3 个临时技能槽

当前 Game.exe 可直接确认:

GCRefreshKFSSkill
GetPacketID()   = 1014;
GetPacketSize() = 10;
Execute thunk   = 0x1405FEFF0 -> sub_14008E960;

包体结构

偏移 长度 字段 类型 含义
0x00 0x04 bag_index int32 背包位置
0x04 0x06 skills[3] int16[3] 三个技能槽

从线结构看,它与 GCRefreshDarkSkill(1012) 的差异主要不在长度,而在业务含义和客户端落地位置:两者分别写入不同的本地临时技能区。

当前实际行为

现役 Lua 在 /home/ubuntu/Game2/lualib/script_base.lua 中会先生成 skills[3],再执行:

  1. obj:set_temp_wh_skills(skills),把结果写入服务端临时缓存。
  2. 构造 GCRefreshKFSSkill,写入 bag_index 与 skills。
  3. 发给客户端。

客户端 Execute() 则把包体写入另一块本地临时技能区,并触发事件 883。因此它和 1012 属于“结构相同、落点不同”的并行协议。

服务端落点

  • 协议定义:/home/ubuntu/Game2/services/game/packet.lua
  • 发送 helper:/home/ubuntu/Game2/lualib/script_base.lua

关键代码

当前 Lua 的发送骨架

obj:set_temp_wh_skills(skills)
local msg = packet_def.GCRefreshKFSSkill.new()
msg.bag_index = bag_pos
msg.skills = skills
obj:get_scene():send2client(obj, msg)

当前 Game.exe 的执行结论

Execute() {
    local_kfs_skill_block.bag_index = bag_index;
    local_kfs_skill_block.skills[0] = skills[0];
    local_kfs_skill_block.skills[1] = skills[1];
    local_kfs_skill_block.skills[2] = skills[2];
    fire_event(883);
    return 2;
}

结论

  1. GCRefreshKFSSkill(1014) 是固定 10 字节的 KFS 技能刷新包。
  2. 包体结构可以明确写成 bag_index + 3 个 int16 技能槽。
  3. 现役 Lua 会先计算临时技能,再整体下发给客户端。
  4. 客户端收到后写入对应本地缓存,并触发事件 883。
您需要登录后才可以回帖 登录 | registerss

本版积分规则

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

GMT+8, 2026-10-24 13:00 , Processed in 0.028637 second(s), 27 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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