TrinityCore SmartAI 脚本实战:从条件触发到行为状态机的完整开发链路 原创
温馨提示:
本文最后更新于 2026-10-27,已超过 1 天没有更新。
若文章内的图片失效(无法正常加载),请留言反馈或直接 联系我。
TrinityCore SmartAI 脚本实战:从条件触发到行为状态机的完整开发链路
TrinityCore 的生物 AI 有两种主流实现:C++ 脚本(ScriptMgr)与数据驱动的 SmartAI。SmartAI 的优势在于无需重新编译,直接用 SQL 写入 smart_scripts 表即可配置复杂行为。本文从条件触发到行为状态机,讲透 SmartAI 的完整开发链路。
一、SmartAI 的核心表结构
SmartAI 的所有逻辑都放在 smart_scripts 表里,核心字段如下:
| 字段 | 含义 | 示例 |
|---|---|---|
| entryorguid | 生物 entry 或 GUID | 15214 |
| source_type | 触发类型(生物/游戏对象/区域) | 0 (生物) |
| event_type | 事件类型 | 0 (进入战斗) |
| action_type | 动作类型 | 11 (施放技能) |
| target_type | 目标类型 | 2 (敌人) |
| event_param1~3 | 事件参数(血量/冷却/计时) | 30 (30% 血量) |
| action_param1~3 | 动作参数 | 技能 ID |
-- 最小示例:生物血量低于 30% 时施放狂暴技能
INSERT INTO smart_scripts
(entryorguid, source_type, event_type, action_type, target_type,
event_param1, action_param1)
VALUES (15214, 0, 2, 11, 2, 30, 24435);
二、事件驱动:从”条件触发”到”行为切换”
SmartAI 是事件驱动的。事件触发后执行对应动作,并可组合条件形成状态机。常用事件类型:
| event_type | 含义 | 典型参数 |
|---|---|---|
| 0 | 进入战斗 | – |
| 1 | 脱离战斗 | – |
| 2 | 血量低于阈值 | event_param1 = 血量百分比 |
| 9 | 收到特定法术 | param1 = 法术 ID |
| 10 | 计时器触发 | param1/2 = 首次/间隔毫秒 |
| 54 | 死亡 | – |
-- 状态机示例:Boss 三阶段切换
-- 阶段1: 血量 > 66% 使用普通技能
-- 阶段2: 血量 33%-66% 召唤小怪
-- 阶段3: 血量 < 33% 狂暴 + 范围AOE
三、动作执行:施法、召唤、说话、传送
SmartAI 动作(action_type)覆盖了几乎所有的行为需求:
- 施法(11):对目标施放技能,
action_param1 = spell_id。 - 召唤(36):召唤生物,
action_param1 = creature_id。 - 说话(1):播放文本,
action_param1 = broadcast_text_id。 - 移动(48):移动到指定坐标。
- 改变阵营(3):临时切换敌对/中立。
-- 召唤小怪 + 喊话 的组合动作
INSERT INTO smart_scripts (entryorguid, source_type, event_type, action_type,
target_type, event_param1, action_param1)
VALUES
(15214, 0, 2, 36, 1, 30, 15215), -- 血量<30% 召唤小怪
(15214, 0, 2, 1, 1, 30, 90001); -- 同时播放广播文本
四、目标选择:target_type 的用法
动作要作用于谁,由 target_type 决定:
| target_type | 目标 | 场景 |
|---|---|---|
| 2 | 当前敌人 | 攻击技能 |
| 1 | 自身 | 自身增益/回血 |
| 6 | 最近的敌对玩家 | 范围仇恨技能 |
| 8 | 召唤者 | 跟随/保护 |
五、调试与验证
SmartAI 开发常见坑与验证方法:
- entry 混淆:确保 entryorguid 对应 creature_template 的 entry。
- 参数错位:不同 event_type 的参数语义不同,务必对照源码文档。
- 测试:用 GM 命令
.npc add 15214拉出生物,.cast触发条件观察行为。
-- 用 .debug 检查生物当前 SmartAI 状态
.debug smart -- 输出当前生物的活动脚本
小结
SmartAI 是”用 SQL 写 AI”的典范:把事件、动作、目标三要素组合进 smart_scripts 表,就能实现从单技能到多阶段 Boss 的完整状态机。相比 C++ 脚本,它省去了编译流程,非常适合快速原型与线上热修。