包信息
- PacketID:894
- 方向:服务端 -> 客户端
- 长度:22
- 功能:创建或释放指定动态阻挡区域
- 关联封包:无专用请求包
包体结构
| 偏移 |
长度 |
字段 |
类型 |
含义 |
| 0 |
2 |
region_id |
int16 |
动态区域客户端 ID |
| 2 |
4 |
data_index |
int32 |
动态区域保存槽位索引 |
| 6 |
4 |
world_x |
float |
动态区域中心点 X |
| 10 |
4 |
world_y |
float |
动态区域中心点 Y |
| 14 |
4 |
direction |
float |
动态区域朝向 |
| 18 |
4 |
enable |
int32 |
1 为创建,其他值为释放 |
当前实际行为
客户端收到后,如果 enable == 1,就按 region_id + data_index + world_x + world_y + direction 创建动态阻挡区域;否则直接按 data_index 释放该区域。也就是说,释放分支真正依赖的是 data_index,不是 region_id。
Lua 副本脚本已经在用这套逻辑控制副本里的动态阻挡开关,例如首领刷新时启用阻挡,击杀或阶段切换时关闭阻挡。
服务端落点
/home/ubuntu/Game2/services/game/packet.lua 中定义了 GCSetDynamicRegion 的完整写包结构。
/home/ubuntu/Game2/services/scripts/event/fuben/efuben_shuiyueshanzhuang.lua 通过 EnableDynamicRegion(...) / DisableDynamicRegion(...) 驱动这类动态区域开关。
关键代码
self:EnableDynamicRegion(region.id, region.data_index, region.x, region.y, region.dir)
self:DisableDynamicRegion(region.id, region.data_index)
结论
GCSetDynamicRegion 是单条动态阻挡区域的增删控制包。创建时用完整坐标和方向,释放时核心索引是 data_index。
|