**Language / Langue :** [[fr:yaml:evenements|FR]] | **EN**
====== Events (YAML) ======
Events are action blocks triggered automatically when entering a room, or manually through buttons.
===== Base Syntax =====
events:
- if: "condition"
do: "action"
text: "Displayed message"
* ''if:'' - trigger condition. ''~'' or missing means always true.
* ''do:'' - action or list of actions.
* ''text:'' - optional displayed text.
===== Actions Available in do: =====
^ Syntax ^ Effect ^
| ''score.+.10'' | Add 10 to ''score''. |
| ''hp.-.3'' | Subtract 3 from ''hp''. |
| ''score.=.0'' | Set ''score'' to 0. |
| ''score.=.v_other_v'' | Copy another variable. |
| ''score.=.%1:6'' | Random value from 1 to 6. |
| ''object&&inventory&&Description'' | Add an object. |
| ''-object&&inventory&&null'' | Remove an object. |
| ''event_global:id:ON'' | Enable a global event. |
| ''event_global:id:OFF'' | Disable a global event. |
| ''event_global:id:SWITCH'' | Toggle a global event. |
| ''timer_global:id:ON'' | Start a global timer. |
| ''timer_global:id:OFF'' | Stop a global timer. |
| ''trigger_event:id'' | Trigger a global event directly. |
===== Endings =====
events:
- if: "v_hp_v <= 0"
end: defeat
text: "You died."
- if: "v_score_v >= 100"
end: victory
text: "Congratulations!"
===== Redirection =====
events:
- if: "v_hp_v <= 0"
to: death_room
text: "You pass out..."
An event with ''to:'' stops following events.
===== Event Button =====
events:
- if: ~
button: "Eat an apple (+3 HP)"
do: "hp.+.3"
text: "You eat the apple. HP: v_hp_v"
===== Limit Uses =====
events:
- if: ~
button: "Pick up a coin"
do: "score.+.10"
max: 3
text:
- if: "_max_atteint_"
text: "No coins remain."
- text: "+10 score."
===== Conditional buttons (visible-si / grise-si) =====
events:
- if: ~
button: "⚔️ Attack"
visible-if: "v_hp_v > 0" # hidden when HP reach 0
do: "score.+.5"
text: "You attack!"
- if: ~
button: "🏃 Flee"
disabled-if: "v_hp_v <= 0" # visible but inactive when HP reach 0
to: accueil
''visible-if:'' hides the button when the condition is false. ''disabled-if:'' keeps the button visible but inactive when the condition is true.
⚠ On Discord, buttons are frozen inside the message that was sent. Clicking 🔄 (refresh) forces a redisplay with up to date buttons.
===== Conditional text on an event =====
The ''text:'' field accepts a list of conditional blocks:
text:
- if: "_max_atteint_"
text: "No charge left!"
- if: "v_score_v > 50"
text: "🏆 Wealthy adventurer: score v_score_v!"
- text: "Action done." # fallback, always shown
===== Sequential behaviour =====
⚠ Important: events run in order. Each one sees the values **already changed** by the previous ones. An event carrying ''to:'' or ''end:'' **stops** the ones after it.
===== Timer started by an event =====
events:
- if: ~
timer: hourglass
duration: "30"
to: expiration_room
text: "The hourglass is running!"
''v_hourglass_v'' holds the remaining seconds. A local timer is cancelled when the player leaves the room.
===== Manual command inside do: (v4.9) =====
The ''command:'' action inside ''do:'' runs a text command of the bot, from an event, a choice or an action:
do:
- command: "take key"
- command: "inspect chest"
- command: "go laboratory"
It works with the standard commands: ''go'', ''back'', ''take'', ''throw'', ''inspect'', ''inventory'', ''refresh'', ''reply'', ''edit'', ''vars''. Their French names are accepted too (''avancer'', ''reculer'', ''prendre'', ''jeter'', ''examiner'', ''inventaire'', ''rafraichir'', ''repondre'', ''modifier'', ''variables'').
Useful to chain a series of actions automatically, or to simulate an interaction from an event.
===== Inline Events =====
A local event can be triggered by a tooltip or clickable element, and a ''source:'' + ''target:'' pair defines a drag&drop event.
* [[en:yaml:tooltips|Interactive tooltips]]: ''%%{{label:?text:!id}}%%'' or ''%%{{label:!id}}%%''.
* [[en:yaml:clickable-elements|Clickable elements]]: ''%%{{label:@id}}%%''.
* [[en:yaml:drag-drop|Drag & drop]]: ''source:'' + ''target:'' on the event.
Local events can be controlled with ''event:id:ON'', ''event:id:OFF'' and ''event:id:SWITCH''.