AzerothCore
Posts (Latest 10 updated) :
Read all

smart_scripts

<-Back-to:World

The smart_scripts table has 30 attributes. It serves to make scripts in SQL language. The important thing is always to analyze, who is the event that motivates the execution of an action and of course, who is the objective. As a recommendation, you can review the scripts that are already inside the table, to understand how it works. The advantage, for which several use this method, is that it is not required to compile, when adding records, with restarting the server, if it is well programmed, you can appreciate the changes. Another reason is the portability, but it depends on the point of view of the developer, the response you can get.

Table Structure

Field Type Attributes Key Null Default Extra Comment
entryorguid int(11) signed PRI NO
source_type tinyint(3) unsigned PRI NO 0
id smallint(5) unsigned PRI NO 0
link smallint(5) unsigned PRI NO 0
event_type tinyint(3) unsigned NO 0
event_phase_mask smallint(5) unsigned NO 0
event_chance tinyint(3) unsigned NO 100
event_flags smallint(5) unsigned NO 0
event_param1 int(10) unsigned NO 0
event_param2 int(10) unsigned NO 0
event_param3 int(10) unsigned NO 0
event_param4 int(10) unsigned NO 0
event_param5 int(10) unsigned NO 0
action_type tinyint(3) unsigned NO 0
action_param1 int(10) unsigned NO 0
action_param2 int(10) unsigned NO 0
action_param3 int(10) unsigned NO 0
action_param4 int(10) unsigned NO 0
action_param5 int(10) unsigned NO 0
action_param6 int(10) unsigned NO 0
target_type tinyint(3) unsigned NO 0
target_param1 int(10) unsigned NO 0
target_param2 int(10) unsigned NO 0
target_param3 int(10) unsigned NO 0
target_param4 int(10) unsigned NO 0
target_x float signed NO 0
target_y float signed NO 0
target_z float signed NO 0
target_o float signed NO 0
comment text NO Event Comment

Description of the fields

entryorguid

  • EntryOrGuid > 0: entry of the creature / game object / etc.
  • EntryOrGuid < 0: guid of the creature / game object / etc.
  • Depends on source_type.

source_type

Object type: creature, game object, spell. see table below for values

Name Value
SMART_SCRIPT_TYPE_CREATURE 0
SMART_SCRIPT_TYPE_GAMEOBJECT 1
SMART_SCRIPT_TYPE_AREATRIGGER 2
SMART_SCRIPT_TYPE_TIMED_ACTIONLIST 9

id

Incremental id bound to each entryorguid & source_type (0, 1, 2, ...).

Simple event linking;

  • Example: if id = 0 and link = 1; id 1 will only be able to occur if id = 0 was triggered (id 1 has to use event_type SMART_EVENT_LINK).
  • Smart_event to be used.

Thanks to the use of links, you can execute several actions, keeping the same event.

event_phase_mask

When dealing with phases, phase IDs have to be used. There are 13 (12+1) different phases: 1, 2, ... 12 and the default 0.

Example: The script is in phase 0 by default - If we want it to go to phase 1, we got two choices:

  • SMART_ACTION_INC_PHASE by 1 or SMART_ACTION_SET_PHASE 1

If the script is in phase 0 and want to skip to phase 2:

  • SMART_ACTION_INC_PHASE by 2 or SMART_ACTION_SET_PHASE 2

If the script is in phase 1 and want to skip to phase 2:

  • SMART_ACTION_INC_PHASE by 1 or SMART_ACTION_SET_PHASE 2
Name Flag Hex Comment
SMART_EVENT_PHASE_ALWAYS_BIT 0 0x000 Means all phases (1 ... 12)
SMART_EVENT_PHASE_1 1 0x001 Phase 1 only.
SMART_EVENT_PHASE_2 2 0x002 Phase 2 only.
SMART_EVENT_PHASE_3 4 0x004 Phase 3 only.
SMART_EVENT_PHASE_4 8 0x008 Phase 4 only.
SMART_EVENT_PHASE_5 16 0x010 Phase 5 only.
SMART_EVENT_PHASE_6 32 0x020 Phase 6 only.
SMART_EVENT_PHASE_7 64 0x040 Phase 7 only.
SMART_EVENT_PHASE_8 128 0x080 Phase 8 only.
SMART_EVENT_PHASE_9 256 0x100 Phase 9 only.
SMART_EVENT_PHASE_10 512 0x200 Phase 10 only.
SMART_EVENT_PHASE_11 1024 0x400 Phase 11 only.
SMART_EVENT_PHASE_12 2048 0x800 Phase 12 only.
  • Event will only be able to occur if creature/GO is in this phase.
  • Example: If we want an event to only be able to occure in phase 1 and 4, event_phase_mask = 1+8 = 9

event_chance

This is the probability of the event to occur as a percentage from 0-100. So, if you want the event to occur roughly half of the time, then set this to 50.

event_flags

Name Flag Hex Comment
SMART_EVENT_FLAG_NOT_REPEATABLE 1 0x01 Event can not repeat
SMART_EVENT_FLAG_DIFFICULTY_0 2 0x02 Event only occurs in normal dungeon
SMART_EVENT_FLAG_DIFFICULTY_1 4 0x04 Event only occurs in heroic dungeon
SMART_EVENT_FLAG_DIFFICULTY_2 8 0x08 Event only occurs in normal raid
SMART_EVENT_FLAG_DIFFICULTY_3 16 0x10 Event only occurs in heroic raid
SMART_EVENT_FLAG_RESERVED_5 32 0x20
SMART_EVENT_FLAG_RESERVED_6 64 0x40
SMART_EVENT_FLAG_DEBUG_ONLY 128 0x80 Event only occurs in debug build
SMART_EVENT_FLAG_DONT_RESET 256 0x100 Event will not reset in SmartScript::OnReset()
  • Sets if the event should not repeat or should only happen in a given instance/dungeon difficulty (if applicable);
  • Values can be added together (bitwise math).

event_type

Name Value Param1 Param2 Param3 Param4 Param5 Comment
SMART_EVENT_UPDATE_IC 0 InitialMin InitialMax RepeatMin RepeatMax In combat.
SMART_EVENT_UPDATE_OOC 1 InitialMin InitialMax RepeatMin RepeatMax Out of combat.
SMART_EVENT_HEALTH_PCT 2 HPMin% HPMax% RepeatMin RepeatMax Health Percentage
SMART_EVENT_MANA_PCT 3 ManaMin% ManaMax% RepeatMin RepeatMax Mana Percentage
SMART_EVENT_AGGRO 4 On Creature Aggro
SMART_EVENT_KILL 5 CooldownMin CooldownMax Player only (0/1) Creature entry (if param3 is 0) On Creature Kill
SMART_EVENT_DEATH 6 On Creature Death
SMART_EVENT_EVADE 7 On Creature Evade Attack
SMART_EVENT_SPELLHIT 8 SpellID School CooldownMin CooldownMax On Creature/Gameobject Spell Hit
SMART_EVENT_RANGE 9 MinDist MaxDist RepeatMin RepeatMax On Target In Range
SMART_EVENT_OOC_LOS 10 NoHostile MaxRange CooldownMin CooldownMax 0/1 Player Only On Target In Distance Out of Combat
SMART_EVENT_RESPAWN 11 type (None = 0, Map = 1, Area = 2) MapId ZoneId On Creature/Gameobject Respawn
SMART_EVENT_TARGET_HEALTH_PCT 12 HPMin% HPMax% RepeatMin RepeatMax On Target Health Percentage
SMART_EVENT_VICTIM_CASTING 13 RepeatMin RepeatMax Spell id (0 any) On Target Casting Spell
SMART_EVENT_FRIENDLY_HEALTH 14 HPDeficit Radius RepeatMin RepeatMax On Friendly Health Deficit
SMART_EVENT_FRIENDLY_IS_CC 15 Radius RepeatMin RepeatMax
SMART_EVENT_FRIENDLY_MISSING_BUFF 16 SpellId Radius RepeatMin RepeatMax On Friendly Lost Buff
SMART_EVENT_SUMMONED_UNIT 17 CretureId (0 all) CooldownMin CooldownMax On Creature/Gameobject Summoned Unit
SMART_EVENT_TARGET_MANA_PCT 18 ManaMin% ManaMax% RepeatMin RepeatMax On Target Mana Percentage
SMART_EVENT_ACCEPTED_QUEST 19 QuestID (0 any) On Target Accepted Quest
SMART_EVENT_REWARD_QUEST 20 QuestID (0 any) On Target Rewarded Quest
SMART_EVENT_REACHED_HOME 21 On Creature Reached Home
SMART_EVENT_RECEIVE_EMOTE 22 EmoteId CooldownMin CooldownMax On Receive Emote.
SMART_EVENT_HAS_AURA 23 SpellID Stacks RepeatMin RepeatMax On Creature Has Aura
SMART_EVENT_TARGET_BUFFED 24 SpellID Stacks RepeatMin RepeatMax On Target Buffed With Spell
SMART_EVENT_RESET 25 After Combat, On Respawn or Spawn
SMART_EVENT_IC_LOS 26 NoHostile MaxRange CooldownMin CooldownMax 0/1 Player Only On Target In Distance In Combat
SMART_EVENT_PASSENGER_BOARDED 27 CooldownMin CooldownMax
SMART_EVENT_PASSENGER_REMOVED 28 CooldownMin CooldownMax
SMART_EVENT_CHARMED 29 On Creature Charmed
SMART_EVENT_CHARMED_TARGET 30 On Target Charmed
SMART_EVENT_SPELLHIT_TARGET 31 SpellId School RepeatMin RepeatMax On Target Spell Hit
SMART_EVENT_DAMAGED 32 MinDmg MaxDmg RepeatMin RepeatMax On Creature Damaged
SMART_EVENT_DAMAGED_TARGET 33 MinDmg MaxDmg RepeatMin RepeatMax On Target Damaged
SMART_EVENT_MOVEMENTINFORM 34 MovementType (0=any) PointID ESCORT_MOTION_TYPE = 17, POINT_MOTION_TYPE = 8
SMART_EVENT_SUMMON_DESPAWNED 35 Entry CooldownMin CooldownMax On Summoned Unit Despawned
SMART_EVENT_CORPSE_REMOVED 36 On Creature Corpse Removed
SMART_EVENT_AI_INIT 37
SMART_EVENT_DATA_SET 38 Field Value CooldownMin CooldownMax On Creature/Gameobject Data Set, Can be used with SMART_ACTION_SET_DATA
SMART_EVENT_WAYPOINT_START 39 PointId (0 any) pathId (0 any) On Creature Waypoint ID Started
SMART_EVENT_WAYPOINT_REACHED 40 PointId (0 any) pathId (0 any) On Creature Waypoint ID Reached
SMART_EVENT_AREATRIGGER_ONTRIGGER 46 TriggerId (0 any)
SMART_EVENT_TEXT_OVER 52 creature_text.GroupID creature.id (0 any) On TEXT_OVER Event Triggered After SMART_ACTION_TALK
SMART_EVENT_RECEIVE_HEAL 53 MinHeal MaxHeal CooldownMin CooldownMax On Creature Received Healing
SMART_EVENT_JUST_SUMMONED 54 On Creature Just spawned
SMART_EVENT_WAYPOINT_PAUSED 55 PointId (0 any) pathID (0 any) On Creature Paused at Waypoint ID
SMART_EVENT_WAYPOINT_RESUMED 56 PointId (0 any) pathID (0 any) On Creature Resumed after Waypoint ID
SMART_EVENT_WAYPOINT_STOPPED 57 PointId (0 any) pathID (0 any) On Creature Stopped On Waypoint ID
SMART_EVENT_WAYPOINT_ENDED 58 PointId (0 any) pathID (0 any) On Creature Waypoint Path Ended
SMART_EVENT_TIMED_EVENT_TRIGGERED 59 Id
SMART_EVENT_UPDATE 60 InitialMin InitialMax RepeatMin RepeatMax
SMART_EVENT_LINK 61 Used to link together multiple events as a chain of events.
SMART_EVENT_GOSSIP_SELECT 62 gossip_menu_option.MenuID gossip_menu_option.OptionID On gossip clicked (gossip_menu_option).
SMART_EVENT_JUST_CREATED 63
SMART_EVENT_GOSSIP_HELLO 64 On Right-Click Creature/Gameobject that have gossip enabled.
SMART_EVENT_FOLLOW_COMPLETED 65
SMART_EVENT_UNUSED_66 66 UNUSED
SMART_EVENT_IS_BEHIND_TARGET 67 CooldownMin CooldownMax On Creature is behind target.
SMART_EVENT_GAME_EVENT_START 68 game_event.eventEntry On game_event started.
SMART_EVENT_GAME_EVENT_END 69 game_event.eventEntry On game_event ended.
SMART_EVENT_GO_STATE_CHANGED 70 State (0 - Active, 1 - Ready, 2 - Active alternative)
SMART_EVENT_GO_EVENT_INFORM 71 EventId
SMART_EVENT_ACTION_DONE 72 EventId
SMART_EVENT_ON_SPELLCLICK 73
SMART_EVENT_FRIENDLY_HEALTH_PCT 74 minHpPct maxHpPct repeatMin repeatMax
SMART_EVENT_DISTANCE_CREATURE 75 database guid database entry distance repeat interval (ms) On creature guid OR any instance of creature entry is within distance.
SMART_EVENT_DISTANCE_GAMEOBJECT 76 database guid database entry distance repeat interval (ms) On gameobject guid OR any instance of gameobject entry is within distance.
SMART_EVENT_COUNTER_SET 77 counterID value cooldownMin cooldownMax If the value of specified counterID is equal to a specified value
SMART_EVENT_NEAR_PLAYERS 101 minPlayers Range (yards) FirstCheck (ms) RepeatCheck (ms) Event will trigger if there are more than minPlayers in range.
SMART_EVENT_NEAR_PLAYERS_NEGATION 102 maxPlayers Range (yards) FirstCheck (ms) RepeatCheck (ms) Event will trigger if there are less than maxPlayers in range.

action_type

Name Value Param1 Param2 Param3 Param4 Param5 Param6 Comment
SMART_ACTION_NONE 0 Do nothing
SMART_ACTION_TALK 1 creature_text.GroupID Duration to wait before SMART_EVENT_TEXT_OVER is triggered. 0 It will try to trigger talk of the target
1 Set target as talk target (used for $vars in texts and whisper target)
Param2 in Milliseconds.
SMART_ACTION_SET_FACTION 2 FactionID (or 0 for default) Sets faction to creature.
SMART_ACTION_MORPH_TO_ENTRY_OR_MODEL 3 creature_template.entry(param1) creature_template.modelidx(param2) Take DisplayID of creature (param1) OR Turn to DisplayID (param2) OR Both = 0 for Demorph
SMART_ACTION_SOUND 4 SoundId onlySelf (0/1) Play Sound; onlySelf = 1 only sends sound to self, onlySelf = 0 sends sound to everyone in visibility range
SMART_ACTION_PLAY_EMOTE 5 EmoteId Play Emote
SMART_ACTION_FAIL_QUEST 6 QuestID Fail Quest of Target
SMART_ACTION_OFFER_QUEST 7 quest_template.id directAdd (0/1) Add Quest to Target
SMART_ACTION_SET_REACT_STATE 8 ReactState React State. Can be Passive (0), Defensive (1), Aggressive (2).
SMART_ACTION_ACTIVATE_GOBJECT 9 Activate Object
SMART_ACTION_RANDOM_EMOTE 10 EmoteId1 EmoteId2 EmoteId3 EmoteId4 EmoteId5 EmoteId6 Play Random Emote
SMART_ACTION_CAST 11 SpellId castFlags limitTargets (0 = all targets) Cast Spell ID at Target(s)
SMART_ACTION_SUMMON_CREATURE 12 creature_template.entry Summon type duration in ms attackInvoker (0/1/2) attackScriptOwner (0/1) Summon Unit; attackInvoker 1: attack target; attackInvoker 2: attack actual invoker
SMART_ACTION_THREAT_SINGLE_PCT 13 Threat% inc Threat% dec Change Threat Percentage for Single Target
SMART_ACTION_THREAT_ALL_PCT 14 Threat% inc Threat% dec Change Threat Percentage for All Enemies
SMART_ACTION_CALL_AREAEXPLOREDOREVENTHAPPENS 15 quest_template.id
SMART_ACTION_RESERVED_16 16 For 4.3.4 + only
SMART_ACTION_SET_EMOTE_STATE 17 EmoteId Play Emote Continuously
SMART_ACTION_SET_UNIT_FLAG 18 (may be more than one field OR'd together) type
If false set creature_template.unit_flags
If true set creature_template.unit_flags2
Can set Multi-able flags at once
SMART_ACTION_REMOVE_UNIT_FLAG 19 (may be more than one field OR'd together) type
If false set creature_template.unit_flags
If true set creature_template.unit_flags2
Can Remove Multi-able flags at once
SMART_ACTION_AUTO_ATTACK 20 AllowAttackState (0 = Stop attack, anything else means continue attacking) Stop or Continue Automatic Attack.
SMART_ACTION_ALLOW_COMBAT_MOVEMENT 21 AllowCombatMovement (0 = Stop combat based movement, anything else continue attacking) Allow or Disable Combat Movement
SMART_ACTION_SET_EVENT_PHASE 22 event_phase_mask Set event phase 0-12 (the actual values, no bit mask!)
SMART_ACTION_INC_EVENT_PHASE 23 Increment Decrement Set param1 OR param2 (not both). Value 0 has no effect.
SMART_ACTION_EVADE 24 Evade Incoming Attack
SMART_ACTION_FLEE_FOR_ASSIST 25 0/1 (If you want the fleeing NPC to say attempts to flee text on flee, use 1 on param1. For no message use 0.) If you want the fleeing NPC to say '%s attempts to run away in fear' on flee, use 1 on param1. 0 for no message.
SMART_ACTION_CALL_GROUPEVENTHAPPENS 26 quest_template.id
SMART_ACTION_COMBAT_STOP 27
SMART_ACTION_REMOVEAURASFROMSPELL 28 Spellid (0 removes all auras) charges (0 removes aura)
SMART_ACTION_FOLLOW 29 Distance (0 = Default value) Angle (0 = Default value) End creature_template.entry credit creditType (0 monsterkill, 1 event) Follow Target
SMART_ACTION_RANDOM_PHASE 30 event_phase_mask 1 event_phase_mask 2 event_phase_mask 3 event_phase_mask 4 event_phase_mask 5 event_phase_mask 6
SMART_ACTION_RANDOM_PHASE_RANGE 31 event_phase_mask minimum event_phase_mask maximum
SMART_ACTION_RESET_GOBJECT 32 Reset Gameobject
SMART_ACTION_CALL_KILLEDMONSTER 33 creature_template.entry This is the ID from quest_template.RequiredNpcOrGo
SMART_ACTION_SET_INST_DATA 34 Field Data Set Instance Data
SMART_ACTION_SET_INST_DATA64 35 Field Set Instance Data uint64
SMART_ACTION_UPDATE_TEMPLATE 36 creature_template.entry Update Level Updates creature_template to given entry
SMART_ACTION_DIE 37 Kill Target
SMART_ACTION_SET_IN_COMBAT_WITH_ZONE 38 Range in yards for all players to be forced into combat with the creature. Only used in the open world. Leave as 0 if used in an instance. Sets the creature in combat with its zone, can be used in instances and open world. Useful for creatures inside instances so all players will be set in combat until the fight ends.
SMART_ACTION_CALL_FOR_HELP 39 Radius in yards that other creatures must be to acknowledge the cry for help. 0/1 (say calls for help text) If you want the NPC to say '%s calls for help!'. Use 1 on param1, 0 for no message.
SMART_ACTION_SET_SHEATH 40 Sheath (0-unarmed, 1-melee, 2-ranged)
SMART_ACTION_FORCE_DESPAWN 41 Despawn timer "ms" Despawn Target after param1 in Milliseconds.
SMART_ACTION_SET_INVINCIBILITY_HP_LEVEL 42 flat hp value percent hp value If you use both params, only percent will be used.
SMART_ACTION_MOUNT_TO_ENTRY_OR_MODEL 43 creature_template.entry creature_template.modelidx Mount to Creature Entry (param1) OR Mount to Creature Display (param2) Or both = 0 for Unmount
SMART_ACTION_SET_INGAME_PHASE_MASK 44 creature.phaseMask
SMART_ACTION_SET_DATA 45 Field Data Set Data For Target, can be used with SMART_EVENT_DATA_SET
SMART_ACTION_MOVE_FORWARD 46 distance move self forward for the specified distance (point movement)
SMART_ACTION_SET_VISIBILITY 47 0/1 Makes creature Visible = 1 or Invisible = 0
SMART_ACTION_SET_ACTIVE 48 0/1 If a creature or GO is set active it will stay active even if no player is near. Take care, though, as it needs additional ressources (CPU/RAM) to keep them active (other objects/creatures nearby stay active).
SMART_ACTION_ATTACK_START 49 Allows basic melee swings to creature.
SMART_ACTION_SUMMON_GO 50 gameobject_template.entry De-spawn time in seconds. targetSummon (0/1) Spawns Gameobject, use target_type to set spawn position; if an entity is specified as target and also coordinates are set (target x,y,z) those coordinates are handled as offset from the target's position; if targetSummon is 1 then the target will summon the GO on the position of the actor
SMART_ACTION_KILL_UNIT 51 Kills Creature.
SMART_ACTION_ACTIVATE_TAXI 52 TaxiID Sends player to flight path. You have to be close to Flight Master, which gives Taxi ID you need.
SMART_ACTION_WP_START 53 0 = walk / 1 = run waypoints.entry canRepeat quest_template.id despawntime reactState Creature starts Waypoint Movement. Use waypoints table to create movement.
SMART_ACTION_WP_PAUSE 54 time (in ms) Creature pauses its Waypoint Movement for given time.
SMART_ACTION_WP_STOP 55 despawnTime quest_template.id fail (0/1) Creature stops its Waypoint Movement.
SMART_ACTION_ADD_ITEM 56 item_template.entry count Adds item(s) to player.
SMART_ACTION_REMOVE_ITEM 57 item_template.entry count Removes item(s) from player.
SMART_ACTION_INSTALL_AI_TEMPLATE 58 TemplateID (see Predefined SAI templates below)
SMART_ACTION_SET_RUN 59 0 = Off / 1 = On
SMART_ACTION_SET_FLY 60 fly (0/1) speed disable gravity (0/1) Only works for creatures with inhabit air.
SMART_ACTION_SET_SWIM 61 0 = Off / 1 = On
SMART_ACTION_TELEPORT 62 MapID Continue this action with the TARGET_TYPE column. Use any target_type (except 0), and use target_x, target_y, target_z, target_o as the coordinates
SMART_ACTION_SET_COUNTER 63 counterID value reset (0/1) If reset is 0 the counter with the specified ID is increased by the given value; if reset is 1 the counter is set to the value.
SMART_ACTION_STORE_TARGET_LIST 64 varID
SMART_ACTION_WP_RESUME 65 Creature continues in its Waypoint Movement.
SMART_ACTION_SET_ORIENTATION 66 Depends on the script target. If SMART_TARGET_SELF, facing will be the same as in HomePosition, For SMART_TARGET_POSITION you need to set target_o : 0 = North, West = 1.5, South = 3, East = 4.5 Random orientation? (0/1)
SMART_ACTION_CREATE_TIMED_EVENT 67 id InitialMin InitialMax RepeatMin(only if it repeats) RepeatMax(only if it repeats) chance
SMART_ACTION_PLAYMOVIE 68 entry
SMART_ACTION_MOVE_TO_POS 69 PointId isTransport (0 or 1) controlled (0 or 1) ContactDistance PointId is called by SMART_EVENT_MOVEMENTINFORM. Continue this action with the TARGET_TYPE column. Use any target_type, and use target_x, target_y, target_z as the coordinates; if an entity is specified as target and also coordinates are set (target x,y,z) those coordinates are handled as offset from the target's position
SMART_ACTION_RESPAWN_TARGET 70 Respawntime in seconds
SMART_ACTION_EQUIP 71 creature_equip_template.ID Slotmask Slot1 (item_template.entry) Slot2 (item_template.entry) Slot3 (item_template.entry) only slots with mask set will be sent to client, bits are 1, 2, 4, leaving mask 0 is defaulted to mask 7 (send all), Slots1-3 are only used if no Param1 is set
SMART_ACTION_CLOSE_GOSSIP 72 Closes gossip window.
SMART_ACTION_TRIGGER_TIMED_EVENT 73 id(>1)
SMART_ACTION_REMOVE_TIMED_EVENT 74 id(>1)
SMART_ACTION_ADD_AURA 75 SpellId Adds aura to player(s). Use target_type 17 to make AoE aura.
SMART_ACTION_OVERRIDE_SCRIPT_BASE_OBJECT 76 WARNING: CAN CRASH CORE, do not use if you dont know what you are doing
SMART_ACTION_RESET_SCRIPT_BASE_OBJECT 77
SMART_ACTION_CALL_SCRIPT_RESET 78
SMART_ACTION_SET_RANGED_MOVEMENT 79 attackDistance attackAngle Sets movement to follow at a specific range to the target.
SMART_ACTION_CALL_TIMED_ACTIONLIST 80 EntryOrGuid * 100 (entryorguid with 00 added after the entry, or 01, 02, 03 etc. for multiple action lists) timer update type(0 OOC, 1 IC, 2 ALWAYS)
SMART_ACTION_SET_NPC_FLAG 81 creature_template.npcflag
SMART_ACTION_ADD_NPC_FLAG 82 creature_template.npcflag
SMART_ACTION_REMOVE_NPC_FLAG 83 creature_template.npcflag
SMART_ACTION_SIMPLE_TALK 84 creature_text.GroupID Makes a player say text. SMART_EVENT_TEXT_OVER is not triggered and whispers can not be used.
SMART_ACTION_INVOKER_CAST 85 SpellID castFlags triggeredFlags if avaliable, last used invoker will cast spellId with castFlags on targets (warning: TC 3.3.5 uses another action here: SMART_ACTION_SELF_CAST)
SMART_ACTION_CROSS_CAST 86 SpellID castFlags CasterTargetType (caster is selected here, use it as target_type) CasterTarget (target_param1) CasterTarget (target_param2) CasterTarget (target_param3) This action is used to make selected caster (in CasterTargetType) to cast spell. Actual target is entered in target_type as normally.
SMART_ACTION_CALL_RANDOM_TIMED_ACTIONLIST 87 EntryOrGuid 1 (entryorguid * 100 + n) EntryOrGuid 2 (entryorguid * 100 + n) EntryOrGuid 3 (entryorguid * 100 + n) EntryOrGuid 4 (entryorguid * 100 + n) EntryOrGuid 5 (entryorguid * 100 + n) EntryOrGuid 6 (entryorguid * 100 + n) Will select one entry from the ones provided. 0 is ignored.
SMART_ACTION_CALL_RANDOM_RANGE_TIMED_ACTIONLIST 88 EntryOrGuid 1 (entryorguid * 100 + n) EntryOrGuid 2 (entryorguid * 100 + n) 0 is ignored.
SMART_ACTION_RANDOM_MOVE 89 Radius Creature moves to random position in given radius.
SMART_ACTION_SET_UNIT_FIELD_BYTES_1 90 Value Type
SMART_ACTION_REMOVE_UNIT_FIELD_BYTES_1 91 Value Type
SMART_ACTION_INTERRUPT_SPELL 92 With delay (0/1) SpellId Instant (0/1) This action allows you to interrupt the current spell being cast. If you do not set the spellId, the core will find the current spell depending on the withDelay and the withInstant values.
SMART_ACTION_SEND_GO_CUSTOM_ANIM 93 animprogress (0-255)
SMART_ACTION_SET_DYNAMIC_FLAG 94 creature_template.dynamicflags
SMART_ACTION_ADD_DYNAMIC_FLAG 95 creature_template.dynamicflags
SMART_ACTION_REMOVE_DYNAMIC_FLAG 96 creature_template.dynamicflags
SMART_ACTION_JUMP_TO_POS 97 Speed XY Speed Z selfJump (0/1) If selfJump is 1 the actor will jump to the target (you can add an offset from the target's position by also specifying target coordinates); if selfJump is 0 the targeted creature will jump to the target position
SMART_ACTION_SEND_GOSSIP_MENU 98 gossip_menu.entry gossip_menu.text_id
(same value as npc_text.ID)
Can be used together with 'SMART_EVENT_GOSSIP_HELLO' to set custom gossip.
SMART_ACTION_GO_SET_LOOT_STATE 99 LootState (0 - Not ready, 1 - Ready, 2 - Activated, 3 - Just deactivated)
SMART_ACTION_SEND_TARGET_TO_TARGET 100 Id Send targets previously stored with SMART_ACTION_STORE_TARGET, to another npc/go, the other npc/go can then access them as if it was its own stored list
SMART_ACTION_SET_HOME_POS 101 0: if the target is a creature, set it's current position as it's new home position; if the target is SMART_TARGET_POSITION, use this position as new home position for the actor
1: if the target is a creature, reset it's home position to the one from the DB; if the target is SMART_TARGET_POSITION, reset the actor's home position to the one from the DB (the actual values of the target position are ignored)
SMART_ACTION_SET_HEALTH_REGEN 102 0/1 Sets the current creatures health regen on or off.
SMART_ACTION_SET_ROOT 103 0/1 Enables or disables creature movement
SMART_ACTION_SET_GO_FLAG 104 gameobject_template_addon.flags oldFlag = newFlag
SMART_ACTION_ADD_GO_FLAG 105 gameobject_template_addon.flags oldFlag |= newFlag
SMART_ACTION_REMOVE_GO_FLAG 106 gameobject_template_addon.flags oldFlag &= ~newFlag
SMART_ACTION_SUMMON_CREATURE_GROUP 107 creature_summon_groups.groupId attackInvoker (0/1) attackScriptOwner (0/1) Use creature_summon_groups table. SAI target has no effect, use 0
SMART_ACTION_SET_POWER 108 Power type New power
SMART_ACTION_ADD_POWER 109 Power type Power to add
SMART_ACTION_REMOVE_POWER 110 Power type Power to remove
SMART_ACTION_GAME_EVENT_STOP 111 game_event.eventEntry
SMART_ACTION_GAME_EVENT_START 112 game_event.eventEntry
SMART_ACTION_START_CLOSEST_WAYPOINT 113 wp1 wp2 wp3 wp4 wp5 wp6 Make target follow closest waypoint to its location
SMART_ACTION_RISE_UP 114 distance move up for the specified distance (warning: TC 3.3.5 uses another action here: SMART_ACTION_MOVE_OFFSET)
SMART_ACTION_RANDOM_SOUND 115 soundId1 soundId2 soundId3 soundId4 onlySelf (0/1)
SMART_ACTION_SET_SIGHT_DIST 121 SightDistance
SMART_ACTION_FLEE 122 FleeTime
SMART_ACTION_ADD_THREAT 123 +threat -threat
SMART_ACTION_LOAD_EQUIPMENT 124 Id force
SMART_ACTION_TRIGGER_RANDOM_TIMED_EVENT 125 id min range id max range
SMART_ACTION_REMOVE_ALL_GAMEOBJECTS 126
SMART_ACTION_MOVE_TO_POS_TARGET 201 pointId
SMART_ACTION_SET_GO_STATE 202 state
SMART_ACTION_EXIT_VEHICLE 203
SMART_ACTION_SET_UNIT_MOVEMENT_FLAGS 204 flags
SMART_ACTION_SET_COMBAT_DISTANCE 205 combatDistance
SMART_ACTION_SET_CASTER_COMBAT_DIST 206 followDistance resetToMax
SMART_ACTION_SET_HOVER 207 0/1
SMART_ACTION_ADD_IMMUNITY 208 type id value
SMART_ACTION_REMOVE_IMMUNITY 209 type id value
SMART_ACTION_FALL 210
SMART_ACTION_SET_EVENT_FLAG_RESET 211 0/1
SMART_ACTION_STOP_MOTION 212 stopMoving movementExpired
SMART_ACTION_NO_ENVIRONMENT_UPDATE 213
SMART_ACTION_ZONE_UNDER_ATTACK 214
SMART_ACTION_LOAD_GRID 215
SMART_ACTION_MUSIC 216 SoundId onlySelf type Plays the specified sound file as music. Type can be one of these values:
0: Play music for the specified target(s)
1: Play music for all players in the entire zone
2: Play music for all players in the area.
SMART_ACTION_RANDOM_MUSIC 217 SoundId1 SoundId2 SoundId3 SoundId4 onlySelf type Plays randomly one of the specified sound files as music. Type can be one of these values:
0: Play music for the specified target(s)
1: Play music for all players in the entire zone
2: Play music for all players in the area.
SMART_ACTION_CUSTOM_CAST 218 spellId castFlag bp0 bp1 bp2
SMART_ACTION_CONE_SUMMON 219 entry Duration (ms)
0 = permanent
Distance between rings (yards) Distance between each summons in a row (yards) Length of the cone (yards) Width of the cone (angle 1°-360°) Allows you to spawn creatures in a cone (As seen in later expansions). Useful for custom cone aoes
SMART_ACTION_PLAYER_TALK 220 acore_string.id yell? (0/1) Make the player say something
SMART_ACTION_VORTEX_SUMMON 221 entry Duration (ms)
0 = permanent
Spiral scaling Spiral appearance range max phi_delta Allows you to summon creature in a customizable spiral(/vortex). Parameters can be confusing, exmaple parameters for testing: 5000 - summon duration, 5 - Spiral Scaling, 25 - spiral appearance, 60 - range max, 40 - phi delta
SMART_ACTION_CU_ENCOUNTER_START 222 Resets all cooldowns and removes exhausted debuffs when action is called

Predefined SAI templates

Description Name Value (Param1) Param2 Param3 Param4 Param5 Param6 Comment
SMARTAI_TEMPLATE_BASIC 0
SMARTAI_TEMPLATE_CASTER 1 spellid repeatMin repeatMax range manaPCT +JOIN: target_param1 as castFlag
SMARTAI_TEMPLATE_TURRET 2 spellid repeatMin repeatMax range manaPCT +JOIN: target_param1 as castflag
SMARTAI_TEMPLATE_PASSIVE 3
SMARTAI_TEMPLATE_CAGED_GO_PART 4 creatureID give credit at point end (0/1)
SMARTAI_TEMPLATE_CAGED_NPC_PART 5 gameObjectID despawntime run (0/1) dist TextGroupID

target_type

Name Value target_param1 target_param2 target_param3 target_param4 target_x target_y target_z target_o Comment
SMART_TARGET_NONE 0 None.
SMART_TARGET_SELF 1 Self cast.
SMART_TARGET_VICTIM 2 Our current target. (ie: highest aggro)
SMART_TARGET_HOSTILE_SECOND_AGGRO 3 Second highest aggro.
SMART_TARGET_HOSTILE_LAST_AGGRO 4 Dead last on aggro.
SMART_TARGET_HOSTILE_RANDOM 5 Just any random target on our threat list.
SMART_TARGET_HOSTILE_RANDOM_NOT_TOP 6 Any random target except top threat.
SMART_TARGET_ACTION_INVOKER 7 Unit who caused this Event to occur.
SMART_TARGET_POSITION 8 x y z o Use xyz from event params.
SMART_TARGET_CREATURE_RANGE 9 creature_template.entry (0 any) minDist maxDist alive state (1 alive, 2 dead, 0 both) All creatures with the specified ID within the specified range and the specified alive state.
SMART_TARGET_CREATURE_GUID 10 creature.guid creature_template.entry getFromHashMap (0/1, this does not work in instances!) Creature with specified GUID and/or specified creature template ID.
SMART_TARGET_CREATURE_DISTANCE 11 creature_template.entry (0 any) maxDist alive state (1 alive, 2 dead, 0 both) All creatures with the specified ID within the specified distance and the specified alive state.
SMART_TARGET_STORED 12 id Uses pre-stored target(list)
SMART_TARGET_GAMEOBJECT_RANGE 13 gameobject_template.entry (0 any) minDist maxDist All game objects with the specified ID within the specified range.
SMART_TARGET_GAMEOBJECT_GUID 14 gameobject.guid gameobject_template.entry getFromHashMap (0/1, this does not work in instances!) Object with specified GUID and/or specified game object template ID.
SMART_TARGET_GAMEOBJECT_DISTANCE 15 gameobject_template.entry (0 any) maxDist All objects with the specified ID within the specified distance.
SMART_TARGET_INVOKER_PARTY 16 Invoker's party members
SMART_TARGET_PLAYER_RANGE 17 minDist maxDist maxCount When target.o is set and it didnt find any targets in min-max range, it will try all possible targets in max range instead. All players up to maxCount within the specified range. Excluding GMs and Dead.
SMART_TARGET_PLAYER_DISTANCE 18 maxDist All players within the specified distance.
SMART_TARGET_CLOSEST_CREATURE 19 creature_template.entry (0 any) maxDist (Can be from 0-100 yards) dead? (0/1) Closest creature with the specified ID within the specified range.
SMART_TARGET_CLOSEST_GAMEOBJECT 20 gameobject_template.entry (0 any) maxDist (Can be from 0-100 yards) Closest object with specified ID within specified range.
SMART_TARGET_CLOSEST_PLAYER 21 maxDist Closest player within specified range.
SMART_TARGET_ACTION_INVOKER_VEHICLE 22 Unit's vehicle who caused this Event to occur
SMART_TARGET_OWNER_OR_SUMMONER 23 use owner of owner (0/1) Unit's owner or summoner
SMART_TARGET_THREAT_LIST 24 maxDist (0 any) All units on creature's threat list within the specified distance if maxDist > 0
SMART_TARGET_CLOSEST_ENEMY 25 maxDist playerOnly (0/1) Any attackable target (creature or player) within maxDist
SMART_TARGET_CLOSEST_FRIENDLY 26 maxDist playerOnly (0/1) Any friendly unit (creature, player or pet) within maxDist
SMART_TARGET_FARTHEST 28 maxDist playerOnly (0/1) isInLos (0/1) Farthest unit on the threat list
SMART_TARGET_PLAYER_WITH_AURA 201 spellID Negative (0/1) MaxDist MinDist Number to resize the target list Target players with or without aura
SMART_TARGET_RANDOM_POINT 201 range (yards) amount (for summoning creature) self as middle (0/1)
else use xyz
This only works with SMART_ACTION_SUMMON_CREATURE, SMART_ACTION_MOVE_TO_POS and SMART_ACTION_JUMP_TO_POS
SMART_TARGET_ROLE_SELECTION 201 rangeMax (yards) TargetMask (Tanks (1), Healer (2) Damage (4)) Resize list Target a Tank/Healer/DPS role. Based on the players spec.

comment

Commenting on SAI uses a template which is the following: (with an example)

"Creature name - Event - Action"

"Minion of Gurok - On spawn - Set Random Movement"

Quick notes:

  • Always update creature_template,gameobject_template or areatrigger_scripts with:
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = y;

UPDATE `gameobject_template` SET `AIName` = 'SmartGameObjectAI' WHERE `entry` = y;

INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES (y, 'SmartTrigger');
  • If the creature or GO is inside a dungeon, set event_flags accordingly to the instance difficulty (heroic, 25 man, etc.).

In case of doubt about an Event, Action_or _Target,_check source code (_src/server/game/AI/SmartScripts files; mainly *SmartScript.cpp)

Cast Flags

Name Flag Hex Comment
SMARTCAST_INTERRUPT_PREVIOUS 1 0x01 Interrupt any spell casting
SMARTCAST_TRIGGERED 2 0x02 Triggered (this makes spell cost zero mana and have no cast time)
CAST_AURA_NOT_PRESENT 32 0x20 Only casts the spell if the target does not have an aura from the spell
SMARTCAST_COMBAT_MOVE 64 0x40 Prevent combat movement on cast, allow on fail range, mana, LOS

React States

Name Value Comment
REACT_PASSIVE 0 Does not defend or attack at all. Does nothing.
REACT_DEFENSIVE 1 Only attacks back when attacked.
REACT_AGGRESSIVE 2 Will attack if on threat list and in threat radius. (default)

Summon Types

Name Value Comment
TEMPSUMMON_TIMED_OR_DEAD_DESPAWN 1 Despawns after a specified time OR when the creature disappears.
TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN 2 Despawns after a specified time OR when the creature dies.
TEMPSUMMON_TIMED_DESPAWN 3 Despawns after a specified time.
TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT 4 Despawns after a specified time after the creature is out of combat.
TEMPSUMMON_CORPSE_DESPAWN 5 Despawns instantly after death.
TEMPSUMMON_CORPSE_TIMED_DESPAWN 6 Despawns after a specified time after death.
TEMPSUMMON_DEAD_DESPAWN 7 Despawns when the creature disappears.
TEMPSUMMON_MANUAL_DESPAWN 8 Despawns when UnSummon() (or Force Despawn action) is called.

Invoker:

white list of events that actually have an invoker passed to them

Actions like SMART_ACTION_INVOKER_CAST and targets like SMART_TARGET_ACTION_INVOKER will work only if the event is in this list:

  • SMART_EVENT_AGGRO
  • SMART_EVENT_DEATH
  • SMART_EVENT_KILL
  • SMART_EVENT_SUMMONED_UNIT
  • SMART_EVENT_SPELLHIT
  • SMART_EVENT_SPELLHIT_TARGET
  • SMART_EVENT_DAMAGED
  • SMART_EVENT_RECEIVE_HEAL
  • SMART_EVENT_RECEIVE_EMOTE
  • SMART_EVENT_JUST_SUMMONED
  • SMART_EVENT_DAMAGED_TARGET
  • SMART_EVENT_SUMMON_DESPAWNED
  • SMART_EVENT_PASSENGER_BOARDED
  • SMART_EVENT_PASSENGER_REMOVED
  • SMART_EVENT_GOSSIP_HELLO
  • SMART_EVENT_GOSSIP_SELECT
  • SMART_EVENT_ACCEPTED_QUEST
  • SMART_EVENT_REWARD_QUEST
  • SMART_EVENT_FOLLOW_COMPLETED
  • SMART_EVENT_ON_SPELLCLICK
  • SMART_EVENT_GO_LOOT_STATE_CHANGED
  • SMART_EVENT_AREATRIGGER_ONTRIGGER
  • SMART_EVENT_IC_LOS
  • SMART_EVENT_OOC_LOS
  • SMART_EVENT_DISTANCE_CREATURE
  • SMART_EVENT_FRIENDLY_HEALTH
  • SMART_EVENT_FRIENDLY_HEALTH_PCT
  • SMART_EVENT_FRIENDLY_IS_CC
  • SMART_EVENT_FRIENDLY_MISSING_BUFF
  • SMART_EVENT_ACTION_DONE
  • SMART_EVENT_TARGET_HEALTH_PCT
  • SMART_EVENT_TARGET_MANA_PCT
  • SMART_EVENT_RANGE
  • SMART_EVENT_VICTIM_CASTING
  • SMART_EVENT_TARGET_BUFFED
  • SMART_EVENT_IS_BEHIND_TARGET
  • SMART_EVENT_INSTANCE_PLAYER_ENTER
  • SMART_EVENT_TRANSPORT_ADDCREATURE
  • SMART_EVENT_DATA_SET