表概述

waypoint_scripts 表允许为路径点定义一到多个脚本动作。同一个 id(脚本 ID)下可以有多条记录,通过不同的 delay 值按时间顺序依次执行。这使 NPC 在路径点可以完成复杂的表演序列,如停下来说话、做表情、播放声音等。

配合 conditions 表可以实现条件性脚本执行,配合 action_chance 可以实现概率触发。

id
int unsigned, 主键
脚本 ID
delay
int unsigned
延迟时间(秒)
command
int unsigned
脚本命令类型
datalong/datalong2/dataint
int unsigned
命令参数

表结构

字段名数据类型默认值说明
idint UNSIGNED0脚本 ID,对应 waypoint_data.action
delayint UNSIGNED0执行延迟时间,单位秒
commandint UNSIGNED0执行的脚本命令编号
datalongint UNSIGNED0长整型参数1
datalong2int UNSIGNED0长整型参数2
dataintint UNSIGNED0整型参数
xfloat0X 坐标(位置相关命令)
yfloat0Y 坐标(位置相关命令)
zfloat0Z 坐标(位置相关命令)
ofloat0朝向(朝向相关命令)
guidint0生物 GUID(限制特定生物执行)

主键: guid | 引擎: InnoDB | 字符集: utf8mb4

重要字段详解

id (脚本 ID)

路径点脚本的唯一标识符,对应 waypoint_data 表中的 action 字段。相同 id 下的多条记录会在同一个路径点按 delay 顺序执行。

delay (延迟时间)

脚本命令执行前的延迟时间,以秒为单位。相同 id 的多个脚本按照 delay 从小到大的顺序依次执行。例如:

  • delay=0:立即执行
  • delay=3:3 秒后执行
  • delay=8:8 秒后执行
command (脚本命令) - 常用值
  • 0 说话 (TALK) - datalong=说话类型(0=普通,1=大喊,2=表情), dataint=文本ID
  • 1 表情 (EMOTE) - datalong=表情ID
  • 15 施放法术 (CAST) - datalong=法术ID
  • 16 播放声音 (SOUND) - datalong=声音ID
  • 10 召唤 (SUMMON) - datalong=生物ID, datalong2=持续时间(ms)
  • 11 开关门 (DOOR) - datalong=游戏对象GUID
  • 12 关闭门 (CLOSE) - datalong=游戏对象GUID
datalong / datalong2 / dataint (命令参数)

参数含义取决于 command:

  • command=0 (说话):datalong=说话类型, dataint=文本ID
  • command=1 (表情):datalong=表情ID(如 2=鞠躬, 66=敬礼)
  • command=15 (施法):datalong=法术ID, datalong2=目标类型
  • command=16 (声音):datalong=声音ID
guid (特定生物 GUID)

可选字段。如果设置,则只有该 GUID 的生物到达路径点时才执行此脚本。如果为 0,则所有使用相同路径 id 的生物都会执行。

x / y / z / o (坐标/朝向)

用于需要指定位置或朝向的命令,如召唤位置、朝向设置等。一般情况下留给默认值 0。

实战案例

案例1:巡逻守卫的对话和敬礼

INSERT INTO waypoint_scripts (id, delay, command, datalong, dataint) VALUES
(201, 0, 0, 0, 60001),    -- 立即说话:"一切正常!"
(201, 2, 1, 66, 0),       -- 2秒后敬礼
(201, 5, 0, 0, 60002);    -- 5秒后说话:"继续巡逻!"

案例2:商人的叫卖行为

INSERT INTO waypoint_scripts (id, delay, command, datalong, dataint) VALUES
(301, 0, 0, 1, 70001),    -- 大喊:"新货到啦!快来看看!"
(301, 1, 1, 5, 0),        -- 1秒后欢呼表情
(301, 3, 16, 8192, 0);    -- 3秒后播放音效

案例3:法师的施法演示

INSERT INTO waypoint_scripts (id, delay, command, datalong, datalong2, dataint) VALUES
(401, 0, 0, 0, 0, 80001),     -- 说话:"看好了!"
(401, 2, 15, 133, 0, 0),      -- 2秒后施放火球术
(401, 4, 1, 4, 0, 0);         -- 4秒后欢呼

案例4:环境交互(开门/关门)

INSERT INTO waypoint_scripts (id, delay, command, datalong, dataint) VALUES
(601, 0, 11, 180001, 0),   -- 打开指定 GUID 的门
(601, 2, 16, 9278, 0),     -- 播放开门音效
(601, 10, 12, 180001, 0);  -- 10秒后关门

配置流程

  1. 设置生物移动类型UPDATE creature SET MovementType = 2 WHERE guid = 12345;
  2. 创建路径点:在 waypoint_data 中创建路径点并设置 action 字段
  3. 创建脚本:在 waypoint_scripts 中创建对应 id 的脚本
  4. 重载数据.reload waypoint_data.reload waypoint_scripts

常见问题

Q: 脚本不执行怎么办?
  • 检查 waypoint_data 的 action 字段是否指向正确的脚本 id
  • 检查 waypoint_data 的 action_chance 是否大于 0
  • 确认生物 MovementType 是否为 2
  • 检查 guid 匹配(如果设置了特定 guid)
Q: 脚本之间的 delay 如何设置?

delay 是从到达路径点开始计算的。相同 id 的脚本按 delay 从小到大依次执行。建议给每个动作之间至少留 1-2 秒间隔。

Q: 可以每个路径点都执行脚本吗?

可以,但不建议。频繁的脚本执行会增加服务器负载。建议只在关键路径点设置脚本。

相关表格