表概述

waypoint_data 表存储了生物移动路径的所有路径点信息,包括每个点的三维坐标(position_x, position_y, position_z)、朝向(orientation)、停留时间(delay)、移动类型(move_type)以及可选的脚本动作(action)。

使用本表需要先在 creature 表中将生物的 MovementType 设置为 2(路径点移动),然后本表中的 id 对应 creature 表的 guid。

id
int unsigned, 主键
路径 ID(通常对应生物 GUID)
point
int unsigned, 主键
路径点序号
position_x/y/z
float
世界坐标
delay
int unsigned
停留时间(毫秒)

表结构

字段名数据类型默认值说明
idint UNSIGNED0路径 ID,通常对应 creature.guid
pointint UNSIGNED0路径点序号,从 1 开始递增
position_xfloat0路径点的世界 X 坐标
position_yfloat0路径点的世界 Y 坐标
position_zfloat0路径点的世界 Z 坐标(高度)
orientationfloatNULL到达路径点后的朝向角度(弧度,0-2π)
delayint UNSIGNED0在路径点的停留时间,单位毫秒
move_typeint0从该点移动到下一个点的移动方式
actionint0到达时执行的脚本动作 ID(对应 waypoint_scripts.id)
action_chancesmallint100动作执行的概率(0-100)
wpguidint UNSIGNED0路径点全局 GUID

主键: (id, point) | 引擎: InnoDB | 字符集: utf8mb4

重要字段详解

id (路径 ID)

路径的唯一标识符。同一个路径的所有路径点必须使用相同的 id。通常情况下,id 对应 creature 表中的 guid 字段值。

point (路径点序号)

路径点在路径中的顺序编号,从 1 开始递增。生物会按照 point 的数值从小到大依次移动到各个路径点。最后一个路径点走完后的行为由 creature 表的 MovementType 决定(循环/往返/单次)。

position_x / position_y / position_z (坐标)

路径点在游戏世界中的三维坐标。获取方式:

  • .gps - GM 命令获取当前位置坐标
  • 数据库查询 - 从现有生物的坐标复制
  • 地图工具 - 使用第三方工具获取精确坐标
orientation (朝向)

生物到达路径点后的朝向角度,以弧度为单位(0 到 2π):

  • 0 朝向北
  • 1.57 (π/2)朝向东
  • 3.14 (π)朝向南
  • 4.71 (3π/2)朝向西
delay (停留时间)

生物到达路径点后的停留时间,以毫秒为单位:

  • 0 不停留,立即前往下一个点
  • 5000 停留 5 秒
  • 30000 停留 30 秒
move_type (移动类型)
  • 0 步行 (WAYPOINT_MOVE_TYPE_WALK)
  • 1 跑步 (WAYPOINT_MOVE_TYPE_RUN)
  • 2 着陆移动 (WAYPOINT_MOVE_TYPE_LAND)
  • 3 起飞移动 (WAYPOINT_MOVE_TYPE_TAKEOFF)
action / action_chance (动作/概率)

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

常见问题

Q: 生物不移动怎么办?
  • 检查 creature 表的 MovementType 是否设置为 2
  • 确认 waypoint_data 中 id 是否与 creature.guid 匹配
  • 验证路径点坐标是否可达
  • 重载数据:.reload waypoint_data
Q: 路径点之间的最小/最大距离?

建议路径点间距在 5-50 码之间。距离过小会造成频繁转向,距离过大可能导致生物穿越障碍物。高度差(position_z)也不宜过大。

相关表格