event_scripts表
概述
event_scripts表是AzerothCore中事件脚本系统的核心表格,用于定义各种游戏事件触发时执行的脚本动作。这个表格提供了一种灵活的方式来创建复杂的游戏事件序列,如任务事件、区域触发事件、物品使用事件等。
表格作用
- 事件脚本 - 定义事件触发时的具体动作序列
- 游戏逻辑 - 实现复杂的游戏逻辑和交互
- 剧情控制 - 控制游戏剧情的发展和演出
- 特效展示 - 创建视觉和音效特效
表格结构
| 字段名 |
数据类型 |
默认值 |
说明 |
| 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 |
朝向角度 |
字段详细说明
id (事件ID)
事件的唯一标识符,用于在其他表格中引用此事件脚本。相同ID的多个记录会按照delay字段的顺序依次执行。
delay (延迟时间)
脚本命令执行前的延迟时间,以秒为单位:
- 0 - 立即执行
- 5 - 延迟5秒执行
- 30 - 延迟30秒执行
command (脚本命令)
要执行的脚本命令类型,定义了具体的动作:
| 命令值 |
命令名称 |
说明 |
| 0 |
SCRIPT_COMMAND_TALK |
说话/聊天 |
| 1 |
SCRIPT_COMMAND_EMOTE |
表情动作 |
| 2 |
SCRIPT_COMMAND_FIELD_SET |
设置字段值 |
| 3 |
SCRIPT_COMMAND_MOVE_TO |
移动到指定位置 |
| 4 |
SCRIPT_COMMAND_FLAG_SET |
设置标志 |
| 5 |
SCRIPT_COMMAND_FLAG_REMOVE |
移除标志 |
| 6 |
SCRIPT_COMMAND_TELEPORT_TO |
传送到指定位置 |
| 7 |
SCRIPT_COMMAND_QUEST_EXPLORED |
任务探索完成 |
| 8 |
SCRIPT_COMMAND_KILL_CREDIT |
给予击杀奖励 |
| 9 |
SCRIPT_COMMAND_RESPAWN_GAMEOBJECT |
重生游戏对象 |
| 10 |
SCRIPT_COMMAND_TEMP_SUMMON_CREATURE |
临时召唤生物 |
| 11 |
SCRIPT_COMMAND_OPEN_DOOR |
打开门 |
| 12 |
SCRIPT_COMMAND_CLOSE_DOOR |
关闭门 |
| 13 |
SCRIPT_COMMAND_ACTIVATE_OBJECT |
激活对象 |
| 14 |
SCRIPT_COMMAND_REMOVE_AURA |
移除光环 |
| 15 |
SCRIPT_COMMAND_CAST_SPELL |
施放法术 |
| 16 |
SCRIPT_COMMAND_PLAY_SOUND |
播放声音 |
| 17 |
SCRIPT_COMMAND_CREATE_ITEM |
创建物品 |
| 18 |
SCRIPT_COMMAND_DESPAWN_SELF |
自我消失 |
| 19 |
SCRIPT_COMMAND_LOAD_PATH |
加载路径 |
| 20 |
SCRIPT_COMMAND_CALLSCRIPT_TO_UNIT |
对单位调用脚本 |
参数字段说明
datalong / datalong2 (数据参数)
根据不同的命令类型,这些字段有不同的含义:
| 命令 |
datalong |
datalong2 |
| TALK (0) |
聊天类型 |
语言ID |
| EMOTE (1) |
表情ID |
未使用 |
| FIELD_SET (2) |
字段ID |
字段值 |
| MOVE_TO (3) |
移动选项 |
移动时间(毫秒) |
| TELEPORT_TO (6) |
地图ID |
未使用 |
| QUEST_EXPLORED (7) |
任务ID |
距离 |
| KILL_CREDIT (8) |
生物ID |
未使用 |
| TEMP_SUMMON_CREATURE (10) |
生物ID |
消失时间(毫秒) |
| CAST_SPELL (15) |
法术ID |
目标类型 |
| PLAY_SOUND (16) |
声音ID |
播放标志 |
| CREATE_ITEM (17) |
物品ID |
数量 |
dataint (整数参数)
通常用于存储文本ID、额外的数值参数或特殊标志。
x, y, z, o (坐标和朝向)
用于需要位置信息的命令,如移动、传送、召唤等。
使用示例
示例1:NPC对话序列
场景:NPC说话后做表情动作
INSERT INTO event_scripts (id, delay, command, datalong, dataint) VALUES
(1001, 0, 0, 0, 12345), -- 立即说话,文本ID 12345
(1001, 3, 1, 3, 0); -- 3秒后做表情动作,表情ID 3
说明:事件1001先让NPC说话,3秒后做表情
示例2:任务完成特效
场景:任务完成时播放声音和施放法术
INSERT INTO event_scripts (id, delay, command, datalong, datalong2) VALUES
(2001, 0, 16, 8192, 0), -- 播放声音ID 8192
(2001, 1, 15, 26740, 1); -- 1秒后施放法术ID 26740给自己
说明:事件2001播放完成音效,然后施放庆祝法术
示例3:召唤和移动序列
场景:召唤生物并让其移动到指定位置
INSERT INTO event_scripts (id, delay, command, datalong, datalong2, x, y, z, o) VALUES
(3001, 0, 10, 12345, 30000, -8913.23, 554.633, 93.0517, 0), -- 召唤生物ID 12345,持续30秒
(3001, 2, 3, 0, 5000, -8923.45, 564.123, 93.0517, 0); -- 2秒后移动到新位置,耗时5秒
说明:事件3001召唤生物,然后让其移动到指定位置
常用脚本模式
对话脚本模式
-- 多段对话序列
INSERT INTO event_scripts VALUES
(4001, 0, 0, 0, 0, 10001, 0, 0, 0, 0), -- 第一句话
(4001, 4, 0, 0, 0, 10002, 0, 0, 0, 0), -- 4秒后第二句话
(4001, 8, 0, 0, 0, 10003, 0, 0, 0, 0), -- 8秒后第三句话
(4001, 10, 1, 2, 0, 0, 0, 0, 0, 0); -- 10秒后鞠躬表情
战斗脚本模式
-- 战斗开始特效
INSERT INTO event_scripts VALUES
(5001, 0, 0, 1, 0, 20001, 0, 0, 0, 0), -- 大喊战斗口号
(5001, 1, 15, 12345, 0, 0, 0, 0, 0, 0), -- 施放增益法术
(5001, 2, 16, 9278, 0, 0, 0, 0, 0, 0); -- 播放战斗音效
环境脚本模式
-- 环境变化效果
INSERT INTO event_scripts VALUES
(6001, 0, 9, 180001, 0, 0, 0, 0, 0, 0), -- 重生门对象
(6001, 2, 16, 8959, 1, 0, 0, 0, 0, 0), -- 播放环境音效
(6001, 5, 11, 180002, 0, 0, 0, 0, 0, 0); -- 打开另一扇门
脚本调试技巧
测试脚本
使用GM命令测试事件脚本:
.event start 1001 -- 启动事件ID 1001
.event stop 1001 -- 停止事件ID 1001
调试输出
在脚本中添加说话命令作为调试输出:
INSERT INTO event_scripts (id, delay, command, dataint) VALUES
(9999, 0, 0, 99999); -- 调试文本:"脚本执行到此处"
性能优化建议
💡 优化技巧
- 合理延迟 - 避免过多的0延迟命令,分散服务器负载
- 脚本长度 - 避免创建过长的脚本序列
- 资源清理 - 及时清理临时召唤的对象
- 条件检查 - 在脚本中添加必要的条件检查
- 错误处理 - 为关键脚本添加错误处理机制
注意事项
⚠️ 重要提醒
- ID唯一性 - 确保事件ID不与其他系统冲突
- 参数正确性 - 验证所有参数的有效性,错误参数可能导致崩溃
- 坐标准确性 - 确保坐标位置的准确性,避免卡在地形中
- 资源存在性 - 确保引用的生物、物品、法术等资源存在
- 脚本测试 - 在测试环境中充分测试脚本效果
- 性能影响 - 复杂脚本可能影响服务器性能
相关表格
event_scripts表经常与以下表格配合使用: