waypoint_scripts 表
waypoint_scripts 表用于定义生物到达路径点时执行的脚本动作。它与 waypoint_data 表配合使用,通过 waypoint_data.action 字段引用本表的 id,为生物的移动路径添加说话、播放表情、施放法术、播放声音等丰富的行为效果。
表概述
waypoint_scripts 表允许为路径点定义一到多个脚本动作。同一个 id(脚本 ID)下可以有多条记录,通过不同的 delay 值按时间顺序依次执行。这使 NPC 在路径点可以完成复杂的表演序列,如停下来说话、做表情、播放声音等。
配合 conditions 表可以实现条件性脚本执行,配合 action_chance 可以实现概率触发。
id
int unsigned, 主键
脚本 ID
int unsigned, 主键
脚本 ID
delay
int unsigned
延迟时间(秒)
int unsigned
延迟时间(秒)
command
int unsigned
脚本命令类型
int unsigned
脚本命令类型
datalong/datalong2/dataint
int unsigned
命令参数
int unsigned
命令参数
表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| id | int UNSIGNED | 0 | 脚本 ID,对应 waypoint_data.action |
| delay | int UNSIGNED | 0 | 执行延迟时间,单位秒 |
| command | int UNSIGNED | 0 | 执行的脚本命令编号 |
| datalong | int UNSIGNED | 0 | 长整型参数1 |
| datalong2 | int UNSIGNED | 0 | 长整型参数2 |
| dataint | int UNSIGNED | 0 | 整型参数 |
| x | float | 0 | X 坐标(位置相关命令) |
| y | float | 0 | Y 坐标(位置相关命令) |
| z | float | 0 | Z 坐标(位置相关命令) |
| o | float | 0 | 朝向(朝向相关命令) |
| guid | int | 0 | 生物 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秒后关门
配置流程
- 设置生物移动类型:
UPDATE creature SET MovementType = 2 WHERE guid = 12345; - 创建路径点:在 waypoint_data 中创建路径点并设置 action 字段
- 创建脚本:在 waypoint_scripts 中创建对应 id 的脚本
- 重载数据:
.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: 可以每个路径点都执行脚本吗?
可以,但不建议。频繁的脚本执行会增加服务器负载。建议只在关键路径点设置脚本。
相关表格
- waypoint_data - 通过 action 字段引用本表
- creature - 设置生物 MovementType
- smart_scripts - SmartAI 系统(现代替代方案)
- conditions - 条件控制系统