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表的关联

配置流程

要使用路径点脚本,需要按以下步骤配置:

  1. 设置生物移动类型:在creature表中设置MovementType=2
  2. 创建路径点:在waypoint_data表中创建路径点
  3. 设置脚本ID:在waypoint_data表的action字段中设置脚本ID
  4. 创建脚本:在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

调试技巧

💡 调试建议

性能优化

优化建议

💡 性能优化

注意事项

⚠️ 重要提醒

相关表格

waypoint_scripts表经常与以下表格配合使用: