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)覆盖了几乎所有的行为需求:

  1. 施法(11):对目标施放技能,action_param1 = spell_id。
  2. 召唤(36):召唤生物,action_param1 = creature_id。
  3. 说话(1):播放文本,action_param1 = broadcast_text_id。
  4. 移动(48):移动到指定坐标。
  5. 改变阵营(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 开发常见坑与验证方法:

  1. entry 混淆:确保 entryorguid 对应 creature_template 的 entry。
  2. 参数错位:不同 event_type 的参数语义不同,务必对照源码文档。
  3. 测试:用 GM 命令 .npc add 15214 拉出生物,.cast 触发条件观察行为。
-- 用 .debug 检查生物当前 SmartAI 状态
.debug smart -- 输出当前生物的活动脚本

小结

SmartAI 是”用 SQL 写 AI”的典范:把事件、动作、目标三要素组合进 smart_scripts 表,就能实现从单技能到多阶段 Boss 的完整状态机。相比 C++ 脚本,它省去了编译流程,非常适合快速原型与线上热修。