GCSpecialObj_ActNow 是特殊场景对象触发时使用的广播包。当前 Lua 主链明确会把触发对象 ID、逻辑计数和命中目标列表发给客户端。
包信息
| 项目 |
内容 |
| 封包 ID |
530 |
| 包名 |
GCSpecialObj_ActNow |
| 方向 |
Server -> Client |
| 包长 |
12 + 4 * obj_count |
| 对应请求 |
特殊对象触发链路内部广播 |
| 作用 |
通知客户端某个特殊对象立刻对一组目标生效 |
包体结构
| 偏移 |
长度 |
字段 |
类型 |
含义 |
0x00 |
0x04 |
m_objID |
int32 |
特殊对象 ID |
0x04 |
0x04 |
logic_count |
int32 |
逻辑计数 |
0x08 |
0x04 |
obj_count |
int32 |
目标数量 |
0x0C |
4 * obj_count |
obj_list |
int32[n] |
命中目标对象 ID 列表 |
当前实际行为
- 当前
special:on_trigger() 会把所有命中目标的对象 ID 收集到 obj_list 中后广播。
- 这条包的结构和用途都非常直接,就是“哪个特殊对象现在对谁生效”。
- 客户端收到后可立即播放特殊对象表现或附加效果。
- 和
GCTargetListAndHitFlags 相比,它省掉了目标点与技能 ID,只保留特殊对象触发所需的最小信息。
服务端落点
- 协议定义:
/home/ubuntu/Game2/services/game/packet.lua
- 触发逻辑:
/home/ubuntu/Game2/services/scene/obj/special.lua
关键代码
local msg = packet_def.GCSpecialObj_ActNow.new()
msg.m_objID = self:get_obj_id()
msg.obj_count = #obj_list
msg.obj_list = obj_list
msg.logic_count = self:get_logic_count()
结论
GCSpecialObj_ActNow(530) 是特殊对象系统的即时生效广播包,当前版本里可以直接理解成“某个特殊对象对这批目标立即生效”。
|