areatrigger 表
areatrigger表定义了游戏世界中的区域触发器。当玩家进入特定区域时触发事件,如传送、任务进度更新、剧情对话等。
表概述
areatrigger表在指定地图上定义了一个触发区域。area trigger可以是圆形或矩形区域,当玩家进入该区域时触发对应的事件。通常与 areatrigger_teleport(传送)、areatrigger_involvedrelation(任务关联)、areatrigger_scripts(脚本触发)等表配合使用。
主键为 entry,自增字段。每个trigger的位置由坐标和尺寸参数定义。
表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| entry | INT UNSIGNED | AUTO_INCREMENT | 触发器唯一ID,自增 |
| map | INT UNSIGNED | 0 | 所在地图ID,对应Map.dbc |
| x | FLOAT | 0 | 触发器中心点X坐标 |
| y | FLOAT | 0 | 触发器中心点Y坐标 |
| z | FLOAT | 0 | 触发器中心点Z坐标(高度) |
| radius | FLOAT | 0 | 触发器半径(码),圆形区域 |
| length | FLOAT | 0 | 矩形触发器长度(码) |
| width | FLOAT | 0 | 矩形触发器宽度(码) |
| height | FLOAT | 0 | 矩形触发器高度(码) |
| orientation | FLOAT | 0 | 矩形触发器的旋转角度 |
重要字段详解
radius (圆形区域) vs length/width/height (矩形区域)
area trigger支持两种形状定义:
- 圆形区域:设置 radius > 0,其他尺寸参数通常为0。以(x,y,z)为中心,radius为半径的圆形触发区域
- 矩形区域:设置 radius = 0,使用length、width、height定义长方体触发区域
最常用的是圆形区域,矩形区域通常用于副本入口等场景。
map (地图ID)
指定触发器所在的地图编号。常见副本入口地图:
- 0 - 东部王国
- 1 - 卡利姆多
- 530 - 外域
- 571 - 诺森德
orientation (矩形触发器旋转)
当使用矩形区域时,orientation定义矩形的旋转方向。值为弧度制,0=正北方向。大多数圆形触发器的此值为0。
实战案例
查询某地图上的所有区域触发器:
SELECT entry, map, x, y, z, radius
FROM areatrigger
WHERE map = 0
ORDER BY entry;
查询所有副本传送相关的区域触发器:
SELECT at.entry, at.map, at.x, at.y, at.z, att.Name, att.target_map
FROM areatrigger at
JOIN areatrigger_teleport att ON at.entry = att.ID
WHERE att.target_map > 1
ORDER BY att.target_map;
新增一个圆形区域触发器:
INSERT INTO areatrigger (map, x, y, z, radius, length, width, height, orientation)
VALUES (0, -9000.0, 500.0, 100.0, 10.0, 0, 0, 0, 0);
常见问题
Q: 玩家进入区域后没有触发事件,如何排查?
检查以下关联表:
areatrigger_teleport:如果配了传送目标,检查target_map和坐标areatrigger_involvedrelation:如果是任务触发,检查任务IDareatrigger_scripts:如果是脚本触发,检查ScriptName是否正确areatrigger_tavern:如果是旅店区域,检查配置
Q: radius、length、width如何配合使用?
有两种模式:圆形模式(radius > 0,其他尺寸为0)或矩形模式(radius = 0,使用length/width定义尺寸)。不要同时设置radius和长度宽度为非零值。