smart_script

目录

一、介绍

二、字段解释

entryorguid

source_type

id

event_phase_mask

event_flags

event_type

action_type

target_type


一、介绍

        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暂未完成)
NameValueSourceScript nameBase Object
SMART_SCRIPT_TYPE_CREATURE0

creature_template.entry
or

creature.guid

creature_template.AIName

SmartAI

Creature
SMART_SCRIPT_TYPE_GAMEOBJECT1

gameobject_template.entry

or

gameobject.guid

gameobject_template.AIName

SmartGameObjectAI

GameObject
SMART_SCRIPT_TYPE_AREATRIGGER2Areatrigger.db2 (ID)

areatrigger_scripts.ScriptName

SmartTrigger

Player
SMART_SCRIPT_TYPE_EVENT3event_script_names.Id

event_script_names.ScriptName

SmartEventTrigger

Player, Creature or GameObject
SMART_SCRIPT_TYPE_GOSSIP4
SMART_SCRIPT_TYPE_QUEST5quest_template.ID

quest_template_addon.ScriptName

SmartQuest

Player
SMART_SCRIPT_TYPE_SPELL6
SMART_SCRIPT_TYPE_TRANSPORT7
SMART_SCRIPT_TYPE_INSTANCE8
SMART_SCRIPT_TYPE_TIMED_ACTIONLIST9smart_scripts.entryorguidCreature, GameObject or AreaTrigger
SMART_SCRIPT_TYPE_SCENE10scene_template.id

scene_template.ScriptName

SmartScene

Player

SMART_SCRIPT_TYPE_AREATRIGGER

_ENTITY

11areatrigger_template.Id (IsServerSide = 0)

areatrigger.ScriptName

SmartAreaTriggerAI

AreaTrigger

SMART_SCRIPT_TYPE_AREATRIGGER

_ENTITY_SERVERSIDE

12areatrigger_template.Id (IsServerSide = 1)

areatrigger.ScriptName

SmartAreaTriggerAI

AreaTrigger
  • id
    • 从0开始,一次递增(0,1,2,3,…),可以理解为每个事件的执行编号
    • 用于表述2个事件的触发关系
    • 以下两条数据,只有当 id = 1 的事件触发后才会触发 id = 2 的事件
    • idlink备注
      12
      20

      此条记录的 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
    • 可用的事件阶段取值见下表
    • 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 分支取值)
NameFlagHexComment
SMART_EVENT_FLAG_NOT_REPEATABLE10x001对同一对象当前事件不可重复
SMART_EVENT_FLAG_DIFFICULTY_0_DEPRECATED     20x002UNUSED, DO NOT REUSE
SMART_EVENT_FLAG_DIFFICULTY_1_DEPRECATED40x004UNUSED, DO NOT REUSE
SMART_EVENT_FLAG_DIFFICULTY_2_DEPRECATED80x008UNUSED, DO NOT REUSE
SMART_EVENT_FLAG_DIFFICULTY_3_DEPRECATED160x010UNUSED, DO NOT REUSE
SMART_EVENT_FLAG_ACTIONLIST_WAITS320x020在等待当前时间线列表事件完成前,后续时间线列表事件不会触发
SMART_EVENT_FLAG_RESERVED_6640x040
SMART_EVENT_FLAG_DEBUG_ONLY1280x080事件只会在调试版本触发
SMART_EVENT_FLAG_DONT_RESET2560x100就算执行 SmartScript::OnReset(),事件也不会重置
SMART_EVENT_FLAG_WHILE_CHARMED5120x200Event 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值