waypoint_scripts表
概述
waypoint_scripts表是AzerothCore中路径点脚本系统的核心表格,用于定义生物到达特定路径点时执行的脚本动作。它与waypoint_data表配合使用,为生物的移动路径添加丰富的交互和行为。
表格作用
- 路径点行为 - 定义生物到达路径点时的具体行为
- 巡逻脚本 - 为巡逻生物添加复杂的行为模式
- 剧情演出 - 创建生动的剧情和演出效果
- 环境互动 - 生物与环境的动态交互
表格结构
字段名 |
数据类型 |
默认值 |
说明 |
id |
INT UNSIGNED |
0 |
脚本ID |
delay |
INT UNSIGNED |
0 |
延迟时间(秒) |
command |
INT UNSIGNED |
0 |
脚本命令 |
datalong |
INT UNSIGNED |
0 |
数据参数1 |
datalong2 |
INT UNSIGNED |
0 |
数据参数2 |
dataint |
INT |
0 |
整数参数 |
x |
FLOAT |
0 |
X坐标 |
y |
FLOAT |
0 |
Y坐标 |
z |
FLOAT |
0 |
Z坐标 |
o |
FLOAT |
0 |
朝向角度 |
guid |
INT |
0 |
生物GUID |
字段详细说明
id (脚本ID)
路径点脚本的唯一标识符,对应waypoint_data表中的action字段。当生物到达设置了action的路径点时,会执行对应ID的脚本。
delay (延迟时间)
脚本命令执行前的延迟时间,以秒为单位。相同ID的多个脚本会按照delay的顺序依次执行。
command (脚本命令)
要执行的脚本命令,与event_scripts表使用相同的命令系统。
guid (生物GUID)
可选字段,指定特定的生物GUID。如果设置,则只有该GUID的生物才会执行此脚本。
与waypoint_data表的关联
配置流程
要使用路径点脚本,需要按以下步骤配置:
- 设置生物移动类型:在creature表中设置MovementType=2
- 创建路径点:在waypoint_data表中创建路径点
- 设置脚本ID:在waypoint_data表的action字段中设置脚本ID
- 创建脚本:在waypoint_scripts表中创建对应的脚本
关联示例
-- 1. 设置生物移动类型
UPDATE creature SET MovementType = 2 WHERE guid = 12345;
-- 2. 创建路径点(在第2个路径点执行脚本101)
INSERT INTO waypoint_data (id, point, position_x, position_y, position_z, action) VALUES
(12345, 1, -8913.23, 554.633, 93.0517, 0),
(12345, 2, -8923.45, 564.123, 93.0517, 101), -- 执行脚本101
(12345, 3, -8933.67, 574.456, 93.0517, 0);
-- 3. 创建路径点脚本
INSERT INTO waypoint_scripts (id, delay, command, datalong, dataint) VALUES
(101, 0, 0, 0, 50001), -- 立即说话
(101, 3, 1, 3, 0); -- 3秒后做表情
使用示例
示例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秒后说话:"继续巡逻"
说明:脚本201让守卫说话、敬礼,然后继续巡逻
示例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秒后播放叫卖音效
说明:脚本301让商人叫卖、做手势并播放音效
示例3:法师的施法演示
场景:法师NPC在特定位置演示法术
INSERT INTO waypoint_scripts (id, delay, command, datalong, datalong2, x, y, z) VALUES
(401, 0, 0, 0, 0, 80001), -- 说话:"观看我的法术"
(401, 2, 15, 133, 0, 0), -- 2秒后施放火球术
(401, 4, 10, 15352, 10000, 5, 0, 0); -- 4秒后召唤法术效果,距离5码
说明:脚本401让法师说话、施法并召唤特效
常用脚本模式
对话和表情模式
-- NPC在路径点的对话和表情序列
INSERT INTO waypoint_scripts VALUES
(501, 0, 0, 0, 0, 90001, 0, 0, 0, 0, 0), -- 说话
(501, 3, 1, 2, 0, 0, 0, 0, 0, 0, 0), -- 鞠躬
(501, 6, 0, 0, 0, 90002, 0, 0, 0, 0, 0), -- 再次说话
(501, 8, 1, 4, 0, 0, 0, 0, 0, 0, 0); -- 挥手告别
环境交互模式
-- NPC与环境对象的交互
INSERT INTO waypoint_scripts VALUES
(601, 0, 11, 180001, 0, 0, 0, 0, 0, 0, 0), -- 打开门
(601, 2, 16, 9278, 0, 0, 0, 0, 0, 0, 0), -- 播放开门音效
(601, 10, 12, 180001, 0, 0, 0, 0, 0, 0, 0); -- 10秒后关门
战斗准备模式
-- 守卫进入战斗准备状态
INSERT INTO waypoint_scripts VALUES
(701, 0, 0, 1, 0, 95001, 0, 0, 0, 0, 0), -- 大喊警告
(701, 1, 15, 12345, 1, 0, 0, 0, 0, 0, 0), -- 施放增益法术
(701, 2, 1, 53, 0, 0, 0, 0, 0, 0, 0), -- 做战斗姿态
(701, 3, 16, 8192, 0, 0, 0, 0, 0, 0, 0); -- 播放战斗音效
高级应用
条件脚本
结合conditions表实现条件性脚本执行:
-- 只在夜晚执行的脚本
INSERT INTO conditions (SourceTypeOrReferenceId, SourceEntry, ConditionTypeOrReference, ConditionValue1) VALUES
(22, 801, 12, 1); -- 智能脚本条件:活动事件1(夜晚)
INSERT INTO waypoint_scripts (id, delay, command, dataint) VALUES
(801, 0, 0, 96001); -- 说话:"夜深了..."
随机脚本
使用action_chance实现随机脚本执行:
-- 在waypoint_data中设置50%概率
UPDATE waypoint_data SET action_chance = 50 WHERE id = 12345 AND point = 2;
-- 对应的脚本只有50%概率执行
INSERT INTO waypoint_scripts (id, delay, command, dataint) VALUES
(901, 0, 0, 97001); -- 随机说话
特定生物脚本
使用guid字段为特定生物设置专属脚本:
-- 只有GUID为12345的生物执行此脚本
INSERT INTO waypoint_scripts (id, delay, command, dataint, guid) VALUES
(1001, 0, 0, 98001, 12345); -- 特殊NPC的专属对话
调试和测试
测试路径点脚本
-- 重载路径点数据
.reload waypoint_data
.reload waypoint_scripts
-- 强制生物重新开始路径
.npc move
-- 传送到生物位置观察
.go creature 12345
调试技巧
💡 调试建议
- 添加调试对话 - 在脚本中添加说话命令作为调试输出
- 检查路径连续性 - 确保路径点之间的连接正常
- 验证脚本ID - 确保waypoint_data中的action对应正确的脚本ID
- 测试延迟时间 - 合理设置延迟避免脚本冲突
- 观察生物行为 - 在游戏中实际观察生物的行为是否符合预期
性能优化
优化建议
💡 性能优化
- 避免频繁脚本 - 不要在每个路径点都设置脚本
- 合理延迟 - 使用适当的延迟分散服务器负载
- 简化脚本 - 避免在路径点脚本中执行复杂操作
- 限制召唤 - 谨慎使用召唤命令,及时清理临时对象
- 优化路径 - 设计合理的路径长度和复杂度
注意事项
⚠️ 重要提醒
- 脚本ID唯一性 - 确保脚本ID不与其他脚本系统冲突
- 路径点配置 - 确保waypoint_data中正确设置了action字段
- 生物移动类型 - 确保生物的MovementType设置为2
- 坐标准确性 - 验证脚本中使用的坐标位置
- 资源有效性 - 确保引用的生物、物品、法术等资源存在
- 脚本测试 - 在测试环境中充分测试脚本效果
相关表格
waypoint_scripts表经常与以下表格配合使用: