目录
一、介绍
smart_script 表位于 TrnityCore 数据库 world 下,主要通过事件触发(event)和动作响应(action),定义游戏角色与对象的交互,是一种简易的 SAI 脚本。通过设置 smart_script 可以设置出复杂多变的交互效果。
二、字段解释
-
entryorguid
- 取值由 source_type 决定
- 当设置AI的 creature / game object / etc 选取 entry 时,字段取 creature_template.entry / gameobject_template.entry / etc
- 当设置AI的 creature / game object / etc 选取 guid 时,字段取 creature.guid / gameobject.guid / gameobject.guid / etc 的相反数(取负值)
- creature 和 gameobject 的 entryorguid 按照前两条规定取值
- areatrgger 的 entryorguid 按照 areatrigger_template.id 取值
- actionlist 的 entryorguid 按照 smart_scripts.entryorguid 取值
-
source_type
- 事件对象的类型,相关取值参考下表(以下为 master 分支取值,4、6、7、8暂未完成)
Name | Value | Source | Script name | Base Object |
---|---|---|---|---|
SMART_SCRIPT_TYPE_CREATURE | 0 | creature_template.entry creature.guid | creature_template.AIName SmartAI | Creature |
SMART_SCRIPT_TYPE_GAMEOBJECT | 1 | gameobject_template.entry or gameobject.guid | gameobject_template.AIName SmartGameObjectAI | GameObject |
SMART_SCRIPT_TYPE_AREATRIGGER | 2 | Areatrigger.db2 (ID) | areatrigger_scripts.ScriptName SmartTrigger | Player |
SMART_SCRIPT_TYPE_EVENT | 3 | event_script_names.Id | event_script_names.ScriptName SmartEventTrigger | Player, Creature or GameObject |
SMART_SCRIPT_TYPE_GOSSIP | 4 | |||
SMART_SCRIPT_TYPE_QUEST | 5 | quest_template.ID | quest_template_addon.ScriptName SmartQuest | Player |
SMART_SCRIPT_TYPE_SPELL | 6 | |||
SMART_SCRIPT_TYPE_TRANSPORT | 7 | |||
SMART_SCRIPT_TYPE_INSTANCE | 8 | |||
SMART_SCRIPT_TYPE_TIMED_ACTIONLIST | 9 | smart_scripts.entryorguid | Creature, GameObject or AreaTrigger | |
SMART_SCRIPT_TYPE_SCENE | 10 | scene_template.id | scene_template.ScriptName SmartScene | Player |
SMART_SCRIPT_TYPE_AREATRIGGER _ENTITY | 11 | areatrigger_template.Id (IsServerSide = 0) | areatrigger.ScriptName SmartAreaTriggerAI | AreaTrigger |
SMART_SCRIPT_TYPE_AREATRIGGER _ENTITY_SERVERSIDE | 12 | areatrigger_template.Id (IsServerSide = 1) | areatrigger.ScriptName SmartAreaTriggerAI | AreaTrigger |
-
id
- 从0开始,一次递增(0,1,2,3,…),可以理解为每个事件的执行编号
-
link
- 用于表述2个事件的触发关系
- 以下两条数据,只有当 id = 1 的事件触发后才会触发 id = 2 的事件
-
id link 备注 1 2 2 0 此条记录的 event_type 应设置为
61(SMART_EVENT_LINK)
-
event_phase_mask
- 用于表述事件发生的阶段
- 只有在当前事件处于选择的阶段时,事件才有可能发生
- 默认的事件阶段取值应为 0
- 如想让事件仅发生在 1 和 4 阶段, 则 event_phase_mask = 1+8 = 9
- 如何改变事件阶段
- 将事件由1阶段转换到3阶段,有以下两种方法:
- 将 SMART_ACTION_INC_EVENT_PHASE(23)的 param1 设置为2(param1为增加值,param2为减少值)
- 将 SMART_ACTION_SET_EVENT_PHASE(22)的 param1 设置为 3
- 将事件由6阶段转换到2阶段,有以下两种方法:
- 将 SMART_ACTION_INC_EVENT_PHASE(23)的 param2设置为 4(param1为增加值,param2 为减少值)
- 将 SMART_ACTION_SET_EVENT_PHASE(22)的 param1 设置为 2
- 将事件由1阶段转换到3阶段,有以下两种方法:
- 可用的事件阶段取值见下表
-
enum SMART_EVENT_PHASE_BITS { SMART_EVENT_PHASE_ALWAYS_BIT = 0, SMART_EVENT_PHASE_1_BIT = 1, SMART_EVENT_PHASE_2_BIT = 2, SMART_EVENT_PHASE_3_BIT = 4, SMART_EVENT_PHASE_4_BIT = 8, SMART_EVENT_PHASE_5_BIT = 16, SMART_EVENT_PHASE_6_BIT = 32, SMART_EVENT_PHASE_7_BIT = 64, SMART_EVENT_PHASE_8_BIT = 128, SMART_EVENT_PHASE_9_BIT = 256, SMART_EVENT_PHASE_10_BIT = 512, SMART_EVENT_PHASE_11_BIT = 1024, SMART_EVENT_PHASE_12_BIT = 2048, SMART_EVENT_PHASE_ALL = SMART_EVENT_PHASE_1_BIT + SMART_EVENT_PHASE_2_BIT + SMART_EVENT_PHASE_3_BIT + SMART_EVENT_PHASE_4_BIT + SMART_EVENT_PHASE_5_BIT + SMART_EVENT_PHASE_6_BIT + SMART_EVENT_PHASE_7_BIT + SMART_EVENT_PHASE_8_BIT + SMART_EVENT_PHASE_9_BIT + SMART_EVENT_PHASE_10_BIT + SMART_EVENT_PHASE_11_BIT + SMART_EVENT_PHASE_12_BIT };
-
event_chance
-
事件发生的几率 (0-100)
-
-
event_flags
- 事件标识(以下为 master 分支取值)
Name | Flag | Hex | Comment |
---|---|---|---|
SMART_EVENT_FLAG_NOT_REPEATABLE | 1 | 0x001 | 对同一对象当前事件不可重复 |
SMART_EVENT_FLAG_DIFFICULTY_0_DEPRECATED | 2 | 0x002 | UNUSED, DO NOT REUSE |
SMART_EVENT_FLAG_DIFFICULTY_1_DEPRECATED | 4 | 0x004 | UNUSED, DO NOT REUSE |
SMART_EVENT_FLAG_DIFFICULTY_2_DEPRECATED | 8 | 0x008 | UNUSED, DO NOT REUSE |
SMART_EVENT_FLAG_DIFFICULTY_3_DEPRECATED | 16 | 0x010 | UNUSED, DO NOT REUSE |
SMART_EVENT_FLAG_ACTIONLIST_WAITS | 32 | 0x020 | 在等待当前时间线列表事件完成前,后续时间线列表事件不会触发 |
SMART_EVENT_FLAG_RESERVED_6 | 64 | 0x040 | |
SMART_EVENT_FLAG_DEBUG_ONLY | 128 | 0x080 | 事件只会在调试版本触发 |
SMART_EVENT_FLAG_DONT_RESET | 256 | 0x100 | 就算执行 SmartScript::OnReset(),事件也不会重置 |
SMART_EVENT_FLAG_WHILE_CHARMED | 512 | 0x200 | Event occurs even if AI owner is charmed |
SMART_EVENT_FLAG_ACTIONLIST_WAITS 目前支持以下动作:
- SMART_ACTION_TALK
- SMART_ACTION_SIMPLE_TALK
- SMART_ACTION_CAST
- SMART_ACTION_SELF_CAST
- SMART_ACTION_INVOKER_CAST
- SMART_ACTION_MOVE_OFFSET
- SMART_ACTION_WP_START
- SMART_ACTION_MOVE_TO_POS
- SMART_ACTION_CROSS_CAST
- SMART_ACTION_ACTIVATE_TAXI
- SMART_ACTION_JUMP_TO_POS
- SMART_ACTION_START_CLOSEST_WAYPOINT
-
event_type
- 事件类型,即通过何种事件来触发相应动作
- 链接:event_type
-
action_type
- 动作类型,即触发的动作类型
- 链接:action_type
-
target_type
- 用于确定事件触发时指向的目标
- 链接:target_type