Les variables sont une méthode de sauvegarde de données utilisée par Skript. Chaque variable a un nom et une valeur. Vous pouvez utiliser les variables partout dans vos événements et commandes.
Vous pouvez, par exemple, créer un système de point d'apparition (home) qui stockera la position courante du joueur dans une variable afin qu'il puisse s'y téléporter plus tard.
Pour distinguer les variables du reste du code, on utilise les accolades comme ceci : {nom de la variable}.

Le nom d'une variable peut aussi contenir une expressionDans le cas d'une commande /home, la position du joueur serait stockée dans ce genre de variable : {home.%player's uuid%}. La variable, une fois enregistrée, comporterait alors l'identifiant universel unique du joueur (ex : {home.dfff0cf0-ff6f-45b9-9652-74d7347646fc}). L'objectif étant de créer une variable pour chaque joueur. Vous pourriez tout à fait utiliser l'expression player (ex : {home.%player%}) mais ceci est déconseillé dû aux système de changement de pseudo introduit dans la version 1.8 de Minecraft.

Toutes les variables sont stockées dans un fichier nommé " variables.csv " à l'intérieur du dossier Skript. Il est déconseillé d'éditer ce fichier manuellement car il pourrait en résulter la suppression de certaines variables. Les variables sont écrites dans ce ficher en permanence ; si un serveur crash, vous pourriez perdre les dernières enregistrées.
Depuis la version 2.0 de Skript, vous avez également la possibilité de sauvegarder les variables dans une base de données. Ceci peut-être utile si vous souhaitez synchroniser les variables de différents serveurs.

Il existe trois genre de " variables " : les variables dîtes " normales " (celles décrites ci-dessus), les variables locales et les options
Les variables " normales " (que l'on peut nommer simplement variables) sont uniques (il ne peut exister qu'une variable avec le même nom) et sont sauvegardées entre chaque redémarrage d'un serveur.
Les variables locales, dont le nom commence par un underscore (tiret du bas de la touche 8), sont " locales à un événement ou à une commande " ; cela signifie qu'elles n'existent plus en dehors d'un de ces contextes (elles sont en quelques sortes temporaires). L'avantage, c'est que vous pouvez créer un même nom de variable locale plusieurs fois dans votre skript.
Si L'explication ci-dessus n'est pas assez clair, voici un exemple sous forme de code :
# La variable " {_message} " est locale car elle utilise un underscore " _ " au début de son nom ;
# elle est donc utilisable localement, c'est à dire à l'intérieur du contexte dans lequel elle a été définie
# Ici le contexte est la commande /set_message. En dehors de ce contexte, la variable {_message} n'existe plus...
# ---------------------------------------------------------------------------------------------------------------
command /set_message :
	trigger:
		set {_messsage} to text-argument
		
# ... il est donc impossible de récupérer sa valeur dans un contexte différent (ici la commande /get_message).
# ---------------------------------------------------------------------------------------------------------------
command /get_message:
	trigger:
		send "%{_message}%" to player # Cette effet ne fonctionnera pas. Aucun message ne sera retourné

Comme illustrer ci-dessus, ces variables sont éphémères, ce qui signifient qu'elles ne sont pas sauvegardées dans le fichier " variables.csv ".

Les options sont un type de variable qui n'ont pas le même mode de fonctionnement que les variables " normales " ou locales. En effet, une fois que vous avez défini la valeur d'une option (voir exemple ci-dessous), il est impossible de la modifier ailleurs dans votre script.
options:
	nom : valeur
En revanche,  les options présentent plusieurs avantages. Tout comme les variables locales, elle ne sont pas enregistrées et évitent donc d'alourdir inutilement le fichier " variables.csv ". Elles peuvent contenir n'importe quel type de données (texte, nombre entier et décimaux, entités, objets (item), blocs, des lignes entières de script ou seulement une partie de ces lignes). Elles peuvent également être utilisées n'importe où dans votre script (ce qui n'est pas le cas des autres types de variables). Pour les utiliser, il suffit d'utiliser cette syntaxe {@nom de l'option}.
Contrairement aux variables " normales " et locales, on ne doit pas entourer une option des signes pourcentages (%%).

Variables liste

Les variables liste sont des variables qui peuvent contenir plusieurs valeurs. Elles ressemblent à ceci {nom de la variable::*}.
On peut leur ajouter de nouvelles valeurs ou en supprimer grâce aux effets " add " et " remove ". 
On peut les supprimer entièrement en utilisant l'effet " clear " ou redéfinir les valeurs qu'elles contiennent.
Pour accéder à une valeur spécifique, on utilise cette syntaxe {nom de la variable::index} ou " index " représente l'index de la valeur que vous souhaitez récupérer. Un index peut-être n'importe quoi (ex : le nom d'un joueur ou un nombre) mais si vous utilisez l'effet " add " pour ajouter une nouvelle valeur l'index sera un nombre.

Les variables liste peuvent être bouclées avec loop {variable list::*}. Pour récupérer la valeur courante d'une boucle, on utilise loop-value et pour l'index loop-index.

Les variables liste sont également très utile pour afficher le contenu d'une liste dans message.
L'exemple ci-dessous donne un exemple pratique de leur utilisation. Vous remarquerez également l'utilisation d'une variable liste locale (oui, c'est possible).
L'intérêt est, bien évidemment, de pouvoir travailler sur une liste temporaire.
command /staff:
	description: Affiche les membres du staff d'un serveur
	trigger:
		loop all players:
			loop-player has permission "perm.staff"
			add loop-player to {_online staff::*}
 
		size of {_online staff::*} is 0:
			message "Aucun membre du staff. Grief à donf !"
		else:
			message "Membres du staff en ligne : %{_online staff::*}%"

Dernier point, il est possible (même si c'est peu utilisé), de définir la valeur d'une variable " normale " par défaut. Voir exemple ci-dessous.
variables:
	{servername} = "Mon serveur"
	{maxplayer} = 100