# Reactions Reactions are code objects that run when a message is fired - essentially a message handler attached to an instance of data. Reactions can be defined only for messages that have a definition (a *MsgDef* instance). Some data definitions inherit `MsgReactionsPreset` and can have *reactions* (message handlers) attached to any of their instances. Ractions can also have a *target* which can filter out messages. # Message definitions Message definitions (or *MsgDef*) are presets which describe a message or event. Their *Id* must match the message or event they describe, as well as their *Params*. Finally the message or event can be associated with a specific *Target* they are concerned with. # Message reaction presets Message reaction presets (or *MsgReactionPreset*) are presets that contain code which can react to messages being fired, similar to global message handlers ([see *OnMsg*](LuaMessages.md.html)). This message handler is associated with the preset instance and it's lifecycle. When the reaction function is called, the first parameter is always *preset*. # Unit reaction presets This type of data can contain event handlers that are attached to units (their *Target* is *Unit*), while the preset is associated with the unit in some way. Instead of reacting to global [Lua messages](LuaMessages.md.html), these handlers react to events the units can fire themselves by calling `self:CallReactions(event_id, ...)`. When the reaction function is called, the first two parameters are always *preset, unit*. ## Reference Note that *Unit* inherits *ReactionObject*. **function ReactionObject:AddReactions(instance, list, insert_locations)** : Registers all handlers from the reaction objects in *list*. These reactions are associated with the object *instance*. **function ReactionObject:RemoveReactions(instance)** : Removes the reactions associated with the object *instance*. **function ReactionObject:AddEventReaction(event_id, instance, handler)** : Registers a single event *handler* (as opposed to a *Reaction* object). The handler will react to the event *event_id*. **function ReactionObject:RemoveEventReactions(event_id, instance)** : Removes all event handlers associated with this *event_id* and *instance*. **ReactionObject:CallReactions(event_id, ...)** : Emits an event, which will call all registered reactions/handlers. (insert footer.md.html here)