waypoint_data 表
waypoint_data 表是 AzerothCore 中路径点系统的核心数据表,用于定义生物的移动路径。通过设置一系列路径点(point),可以让 NPC 按照预定的路线进行巡逻、移动或执行特定的行为模式。
表概述
waypoint_data 表存储了生物移动路径的所有路径点信息,包括每个点的三维坐标(position_x, position_y, position_z)、朝向(orientation)、停留时间(delay)、移动类型(move_type)以及可选的脚本动作(action)。
使用本表需要先在 creature 表中将生物的 MovementType 设置为 2(路径点移动),然后本表中的 id 对应 creature 表的 guid。
int unsigned, 主键
路径 ID(通常对应生物 GUID)
int unsigned, 主键
路径点序号
float
世界坐标
int unsigned
停留时间(毫秒)
表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| id | int UNSIGNED | 0 | 路径 ID,通常对应 creature.guid |
| point | int UNSIGNED | 0 | 路径点序号,从 1 开始递增 |
| position_x | float | 0 | 路径点的世界 X 坐标 |
| position_y | float | 0 | 路径点的世界 Y 坐标 |
| position_z | float | 0 | 路径点的世界 Z 坐标(高度) |
| orientation | float | NULL | 到达路径点后的朝向角度(弧度,0-2π) |
| delay | int UNSIGNED | 0 | 在路径点的停留时间,单位毫秒 |
| move_type | int | 0 | 从该点移动到下一个点的移动方式 |
| action | int | 0 | 到达时执行的脚本动作 ID(对应 waypoint_scripts.id) |
| action_chance | smallint | 100 | 动作执行的概率(0-100) |
| wpguid | int UNSIGNED | 0 | 路径点全局 GUID |
主键: (id, point) | 引擎: InnoDB | 字符集: utf8mb4
重要字段详解
路径的唯一标识符。同一个路径的所有路径点必须使用相同的 id。通常情况下,id 对应 creature 表中的 guid 字段值。
路径点在路径中的顺序编号,从 1 开始递增。生物会按照 point 的数值从小到大依次移动到各个路径点。最后一个路径点走完后的行为由 creature 表的 MovementType 决定(循环/往返/单次)。
路径点在游戏世界中的三维坐标。获取方式:
- .gps - GM 命令获取当前位置坐标
- 数据库查询 - 从现有生物的坐标复制
- 地图工具 - 使用第三方工具获取精确坐标
生物到达路径点后的朝向角度,以弧度为单位(0 到 2π):
- 0 朝向北
- 1.57 (π/2)朝向东
- 3.14 (π)朝向南
- 4.71 (3π/2)朝向西
生物到达路径点后的停留时间,以毫秒为单位:
- 0 不停留,立即前往下一个点
- 5000 停留 5 秒
- 30000 停留 30 秒
- 0 步行 (WAYPOINT_MOVE_TYPE_WALK)
- 1 跑步 (WAYPOINT_MOVE_TYPE_RUN)
- 2 着陆移动 (WAYPOINT_MOVE_TYPE_LAND)
- 3 起飞移动 (WAYPOINT_MOVE_TYPE_TAKEOFF)
action 对应 waypoint_scripts 表中的 id,定义到达路径点时执行的脚本。action_chance 控制执行概率(0-100),默认为 100(每次触发)。
实战案例
案例1:创建简单巡逻路径
-- 设置生物移动类型
UPDATE creature SET MovementType = 2 WHERE guid = 12345;
-- 创建巡逻路径
INSERT INTO waypoint_data (id, point, position_x, position_y, position_z, delay, move_type)
VALUES
(12345, 1, -8913.23, 554.633, 93.0517, 3000, 0),
(12345, 2, -8923.45, 564.123, 93.0517, 5000, 0),
(12345, 3, -8933.67, 574.456, 93.0517, 3000, 0);
案例2:带脚本动作的路径
INSERT INTO waypoint_data (id, point, position_x, position_y, position_z, delay, move_type, action, action_chance)
VALUES
(67890, 1, -8913.23, 554.633, 93.0517, 0, 0, 0, 100),
(67890, 2, -8923.45, 564.123, 93.0517, 10000, 0, 101, 100), -- 执行脚本101
(67890, 3, -8933.67, 574.456, 93.0517, 5000, 0, 102, 50); -- 50%概率执行脚本102
案例3:查询和调试
-- 查看生物的完整路径
SELECT * FROM waypoint_data WHERE id = 12345 ORDER BY point;
-- 重载路径数据
.reload waypoint_data
-- 传送到生物位置观察
.go creature 12345
常见问题
- 检查 creature 表的 MovementType 是否设置为 2
- 确认 waypoint_data 中 id 是否与 creature.guid 匹配
- 验证路径点坐标是否可达
- 重载数据:
.reload waypoint_data
建议路径点间距在 5-50 码之间。距离过小会造成频繁转向,距离过大可能导致生物穿越障碍物。高度差(position_z)也不宜过大。
相关表格
- creature - 设置生物的 MovementType=2
- waypoint_scripts - 路径点脚本动作
- smart_scripts - SmartAI 系统(可替代路径点脚本)