AreaTrigger.dbc
区域触发器定义文件,存储游戏世界中的区域触发器信息。当玩家进入这些无形触发区域时,客户端通知服务端触发对应事件
文件概述
AreaTrigger.dbc 定义了游戏世界中无形的触发区域。当玩家进入这些区域时,客户端检测并发送 AREA_TRIGGER 数据包给服务端,服务端根据触发器ID执行相应逻辑:如进入副本传送、触发剧情、切换位面等。支持球形和矩形两种触发器形状。
列结构
| 列号 | 字段 | 类型 | 详细说明 |
|---|---|---|---|
| 1 | 编号 | 整数 | 区域触发器唯一标识符 |
| 2 | 指向的地图编号 | 整数 | 触发器所在的地图编号,参考 Map.dbc |
| 3 | X | 浮点数 | 区域 X 坐标(触发器中心位置) |
| 4 | Y | 浮点数 | 区域 Y 坐标 |
| 5 | Z | 浮点数 | 区域 Z 坐标 |
| 6 | 半径 | 浮点数 | 球形触发半径。以 XYZ 坐标为中心点的码数大小。大于0时使用球形,忽略盒子参数 |
| 7 | 盒子长度 (box_x) | 浮点数 | 矩形触发器的长度,通常为0但不总是如此 |
| 8 | 盒子宽度 (box_y) | 浮点数 | 矩形触发器的宽度,通常为0但不总是如此 |
| 9 | 盒子高度 (box_z) | 浮点数 | 矩形触发器的高度,通常为0但不总是如此 |
| 10 | 盒子朝向 (box_orientation) | 浮点数 | 矩形触发器的旋转朝向,通常为0但不总是如此 |
重要字段详解
触发器形状:球形 vs 矩形
AreaTrigger 支持两种形状,通过半径和盒子参数区分:
| 形状 | 判别条件 | 参数说明 |
|---|---|---|
| 球形 (Sphere) | 半径 > 0 | 以 XYZ 坐标为中心,半径为码数大小的球体区域。盒子参数被忽略 |
| 矩形 (Box) | 半径 = 0 | 以盒子长度/宽度/高度定义长方体区域,盒子朝向定义旋转角度 |
注意:盒子参数通常为0是因为大多数触发器使用球形,但在门廊、走廊等场景中矩形触发器更合适。
常见应用场景
- 副本入口:玩家走入副本传送门时触发传送
- Boss战区域:进入Boss房间触发Boss激活
- 任务区域:到达指定位置触发任务进度更新
- 传送门:走进传送门触发传送效果
- 世界事件:进入触发区域开始特定剧情事件
客户端-服务端交互机制
AreaTrigger 是客户端主动检测并通知服务端的机制。工作流程如下:
- 客户端持续检测玩家所在位置
- 玩家进入 AreaTrigger 范围时,客户端发送 AREA_TRIGGER 数据包给服务端
- 服务端收到数据包后,根据触发器编号执行对应的处理逻辑
- 具体行为(传送、剧情、战利品等)由服务端的 C++ 代码或 Lua 脚本决定
使用技巧
- 添加自定义触发器时,编号需要与 areatrigger_teleport 数据库表或 areatrigger 脚本关联
- 球形触发器适合圆形区域(传送门周围),矩形触发器适合走廊、门口等狭长区域
- 触发器只在指向的地图编号匹配的地图生效
- AzerothCore 的 areatrigger_teleport 表通过此文件的编号关联传送目标