在 TrinityCore 中,AreaTrigger 可以与 SmartAI 系统联动,实现复杂的事件触发和响应机制。

1. AreaTrigger 与 SmartAI 联动机制

TrinityCore 提供了两种类型的 AreaTrigger 与 SmartAI 的联动机制:

1.1 AreaTrigger Entity 类型

这种类型的 AreaTrigger 是服务器端创建的实体,可以拥有自己的 AI。当单位进入或离开 AreaTrigger 时,会触发相应的 SAI 事件。

1.2 AreaTrigger 类型

这种类型是地图中预定义的 AreaTrigger,通过 areatrigger 数据库表定义。当玩家进入这些 AreaTrigger 时,会触发相应的 SAI 脚本。

2. 实现步骤

步骤 1: 创建 SmartAI 脚本

首先,需要在 smartai_scripts 表中为 AreaTrigger 创建相应的事件和动作:

-- 为 AreaTrigger 创建进入事件
INSERT INTO `smartai_scripts` VALUES 
(@ENTRY, @SOURCE_TYPE, 0, 0, 46, 0, 100, 0, 0, 0, 0, 0, 11, @SPELL_ID, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 'On AreaTrigger Enter - Cast Spell');

-- 为 AreaTrigger 创建离开事件
INSERT INTO `smartai_scripts` VALUES 
(@ENTRY, @SOURCE_TYPE, 0, 0, 47, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 'On AreaTrigger Exit - Despawn');

其中:

  • @ENTRY 是 AreaTrigger 的 ID 或 Entry
  • @SOURCE_TYPE 根据 AreaTrigger 类型设置(11 为 AreaTrigger Entity,2 为普通 AreaTrigger)
  • 事件类型 46 代表 SMART_EVENT_AREATRIGGER_ENTER
  • 事件类型 47 代表 SMART_EVENT_AREATRIGGER_EXIT

步骤 2: 配置 AreaTrigger Entity(如果使用实体类型)

如果使用 AreaTrigger Entity 类型,需要在 areatrigger_template 表中创建模板:

-- 创建 AreaTrigger 模板
INSERT INTO `areatrigger_template` VALUES 
(@ENTRY, 1, @AREATRIGGER_CREATE_PROPERTIES_ID, @SCRIPT_NAME);

-- 创建 AreaTrigger 动作
INSERT INTO `areatrigger_template_actions` VALUES 
(@ENTRY, 1, @ACTION_TYPE, @ACTION_PARAM, 0);

步骤 3: 配置 AreaTrigger Spawn(如果使用静态 Spawn 类型)

如果使用静态 Spawn 类型的 AreaTrigger,需要在 areatrigger 表中创建:

-- 创建 AreaTrigger Spawn
INSERT INTO `areatrigger` VALUES 
(@SPAWN_ID, @AREATRIGGER_CREATE_PROPERTIES_ID, @IS_CUSTOM, @MAP_ID, @SPAWN_DIFFICULTIES, @POS_X, @POS_Y, @POS_Z, @ORIENTATION, @PHASE_USE_FLAGS, @PHASE_ID, @PHASE_GROUP, @SCRIPT_NAME);

步骤 4: 创建相应的 AreaTrigger Create Properties(如果需要)

如果需要自定义 AreaTrigger 的外观和行为,可以在 areatrigger_create_properties 表中创建:

INSERT INTO `areatrigger_create_properties` VALUES 
(@ID, @IS_CUSTOM, @AREATRIGGER_ID, @IS_AREATRIGGER_CUSTOM, @FLAGS, @MOVE_CURVE_ID, @SCALE_CURVE_ID, @MORPH_CURVE_ID, @FACING_CURVE_ID, @ANIM_ID, @ANIM_KIT_ID, @DECAL_PROPERTIES_ID, @SPELL_FOR_VISUALS, @TIME_TO_TARGET_SCALE, @SPEED, @SPEED_IS_TIME, @SHAPE, @SHAPE_DATA_0, @SHAPE_DATA_1, @SHAPE_DATA_2, @SHAPE_DATA_3, @SHAPE_DATA_4, @SHAPE_DATA_5, @SHAPE_DATA_6, @SHAPE_DATA_7, @SCRIPT_NAME);

3. 实际应用示例

下面是一个完整的示例,展示如何创建一个当玩家进入时施放法术的 AreaTrigger:

3.1 创建 AreaTrigger 模板

-- 创建模板
INSERT INTO `areatrigger_template` VALUES (100001, 1, 1001, 'SmartAreaTriggerAI');

-- 添加动作(施放法术)
INSERT INTO `areatrigger_template_actions` VALUES (100001, 1, 0, 12345, 0);

3.2 创建 SmartAI 脚本

-- 当单位进入 AreaTrigger 时施放法术
INSERT INTO `smartai_scripts` VALUES 
(100001, 11, 0, 0, 46, 0, 100, 0, 0, 0, 0, 0, 11, 12345, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 'On Enter - Cast Spell on Invoker');

3.3 创建 AreaTrigger Spawn

-- 在指定位置创建 AreaTrigger
INSERT INTO `areatrigger` VALUES 
(1, 100001, 1, 0, '0', 100.0, 200.0, 50.0, 0.0, 0, 0, 0, 'SmartAreaTriggerAI');

4. 支持的事件类型

AreaTrigger 与 SmartAI 联动支持以下事件类型:

  1. SMART_EVENT_AREATRIGGER_ENTER (46) - 当单位进入 AreaTrigger 时触发
  2. SMART_EVENT_AREATRIGGER_EXIT (47) - 当单位离开 AreaTrigger 时触发
  3. SMART_EVENT_UPDATE_OOC (1) - AreaTrigger 的定时更新事件
  4. SMART_EVENT_AI_INIT (23) - AreaTrigger AI 初始化时触发
  5. SMART_EVENT_JUST_CREATED (63) - AreaTrigger 刚创建时触发

5. 注意事项

  1. AreaTrigger Entity 类型使用 SMART_SCRIPT_TYPE_AREATRIGGER_ENTITY (11) 或 SMART_SCRIPT_TYPE_AREATRIGGER_ENTITY_CUSTOM (12)
  2. 普通地图 AreaTrigger 使用 SMART_SCRIPT_TYPE_AREATRIGGER (2)
  3. AreaTrigger Entity 需要设置正确的 ScriptName 为 "SmartAreaTriggerAI"
  4. 确保 AreaTrigger 的 Shape 和尺寸设置正确,以便正确检测单位进入/离开

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐