表概述

areatrigger表在指定地图上定义了一个触发区域。area trigger可以是圆形或矩形区域,当玩家进入该区域时触发对应的事件。通常与 areatrigger_teleport(传送)、areatrigger_involvedrelation(任务关联)、areatrigger_scripts(脚本触发)等表配合使用。

主键为 entry,自增字段。每个trigger的位置由坐标和尺寸参数定义。

表结构

字段名数据类型默认值说明
entryINT UNSIGNEDAUTO_INCREMENT触发器唯一ID,自增
mapINT UNSIGNED0所在地图ID,对应Map.dbc
xFLOAT0触发器中心点X坐标
yFLOAT0触发器中心点Y坐标
zFLOAT0触发器中心点Z坐标(高度)
radiusFLOAT0触发器半径(码),圆形区域
lengthFLOAT0矩形触发器长度(码)
widthFLOAT0矩形触发器宽度(码)
heightFLOAT0矩形触发器高度(码)
orientationFLOAT0矩形触发器的旋转角度

重要字段详解

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: 玩家进入区域后没有触发事件,如何排查?

检查以下关联表:

  1. areatrigger_teleport:如果配了传送目标,检查target_map和坐标
  2. areatrigger_involvedrelation:如果是任务触发,检查任务ID
  3. areatrigger_scripts:如果是脚本触发,检查ScriptName是否正确
  4. areatrigger_tavern:如果是旅店区域,检查配置

Q: radius、length、width如何配合使用?

有两种模式:圆形模式(radius > 0,其他尺寸为0)或矩形模式(radius = 0,使用length/width定义尺寸)。不要同时设置radius和长度宽度为非零值。