Les actions et les expressions
Les actions et les expressions
Une action est une ligne de script réalisant une ou plusieurs modification, au jeu ou au contexte d'exécution. Pour pouvoir paramétrer le fonctionnement d'une action, celles-si s'appuient sur des expressions. Cependant, une action peut fonctionner sans expression, tout comme une expression peut être utilisée en dehors d'une action, comme pour définir une variable, vérifier une condition, etc.
La principale différence entre les actions et les expressions réside dans le fait que les actions ne retournent aucun résultat, là où les expressions retournent forcément un résultat. Ce résultat peut être de n'importe quel type.
Tous les types primitifs peuvent être utilisés en tant que paramètre d'une expression ou d'une action. Par exemple, cos(5)
reconnaît le nombre 5 et lui applique la fonction cosinus. Autre exemple, l'expression numbers in range of {number}
retourne un tableau contenant tous les nombres allant de 0 à {number}
.
Cependant, l'action shuffle {array}
ne fait que mélanger aléatoirement un tableau, et ne retourne aucun résultat. Elle applique directement la modification sur la variable passée en paramètre.
Certaines expressions peuvent demander plusieurs paramètres pour pouvoir s'exécuter. Par exemple, l'expression {element} is in {array}
fonctionne avec n'importe quel élément en premier paramètre, et avec un tableau en second paramètre.
Warning
Les expressions sont reconnues en fonction de leur "position" dans la ligne, les expressions les plus à droites ayant la priorité. Cela permet une interprétation cohérente de la ligne, comme le ferait un lecteur humain.
Tip
Pour éviter les confusions, il est possible d'utiliser des parenthèses pour définir l'ordre dans lequel les expressions doivent s'appliquer aux données. Par exemple, l'expression ① random element of numbers in range of (50+20) + 10
sera sensiblement différente de l'expression ② random element of numbers in range of (50) + 20 + 10
. Dans ①, le résultat sera la somme d'un élément aléatoire du tableau contenant les nombres entiers jusqu'à 70, et de 10. L'expression ① retournera donc un nombre compris entre 10 et 80. Cependant, l'expression ② retournera la somme d'un élément aléatoire du tableau contenant les nombres entiers jusqu'à 50, et de 10 et de 20. L'expression ② retournera donc un nombre compris entre 30 et 80. Cela peut paraître évident, mais dans des expressions plus complexes l'usage des parenthèses est important, d'une part pour éviter des problèmes liés aux types des paramètres de l'expression, et d'autre part pour permettre une meilleure lecture du script.
Liste des actions implémentées par Sqript
Certaines actions ou certaines expressions ne sont executable que du côté client ou du côté serveur. Une annotation client
ou server
permet de l'indiquer lorsque c'est le cas. Si une action que vous souhaitez utiliser ne fonctionne pas du côté souhaité, considérez l'utilisation de variables synchronisées ou de paquets [?].
Shuffle array
Description: Mélange aléatoirement les éléments d'un tableau.
Pattern: shuffle {array}
Exemple(s):
Add an array to another array
Description: Ajoute les éléments d'un tableau à un autre tableau.
Pattern: add elements of {array to {array}
Exemple(s):
Remove an array from an array
Description: Supprime les éléments d'un tableau à un autre tableau.
Pattern: remove elements of {array from {array}
Exemple(s):
remove ["a","b"] from ["a","b","c"]
Sort elements of an array
Description: Trie un tableau en ordre ascendant ou descendant. Les dictionnaires peuvent également être triés par clés (par défaut, il sont triés par valeurs) en utilisant le mot-clé keys.
Pattern: sort (elements|keys) of {array [by] [(ascending|descending)] [order]
Exemple(s):
sort elements of [1,5,7,4,2,3]
Add an element to another
Description: Ajoute un élément à un autre élément. Synonyme de l'opérateur "+"
Pattern: add {element to {element}
Exemple(s):
Remove an element from another
Description: Retire un élément à un autre élément. Synonyme de l'opérateur "-"
Pattern: remove {element to {element}
Exemple(s):
remove 5 from my_variable
Set a variable or an element
Description: Définit un élément à un autre élément.
Pattern: set {element to {element}
Exemple(s):
Return
Description: Dans une fonction, permet de retourner un élément.
Pattern: return {element}
Exemple(s):
Cancel event
Description: Dans un évènement, permet de l'annuler
Pattern: cancel event
Exemple(s):
Break loop
Description: Dans une boucle, permet d'interrompre et de quitter la boucle
Pattern: break loop
Exemple(s):
for i in numbers in range of 10:
if i = 2:
break #Seules les itérations 0, 1 et 2 auront été effectuées
Break multiple loops
Description: Lorsque plusieurs boucles sont imbriquées, permet d'interrompre et de quitter le nombre de boucles passé en paramètre.
Pattern: break {number loops
Exemple(s):
for i in numbers in range of 10:
for j in numbers in range of 10:
if j*i = 10:
break 2 loops
Synchronise an element to all players
Description: Synchronise un élément sous la clé donnée en second paramètre avec tous les joueurs. Ainsi, les joueurs pourront utiliser l'élément envoyé en utilisant la clé donnée lorsque leurs scripts sont exécutés côté client.
Pattern: sync {element as {string to all players
Exemple(s):
sync true as "game_started" to all players #La variable synchronisée "game_started" est maintenant à true pour tous les joueurs
Synchronise an element to a player
Description: Synchronise un élément sous la clé donnée en second paramètre avec le joueur passé en troisième paramètre. Ainsi, le joueur pourra utiliser l'élément envoyé en utilisant la clé donnée lorsque ses scripts sont exécutés côté client.
Pattern: sync {element as {string to {player}
Exemple(s):
sync $money[player] as "my_money" to player #La variable synchronisée "my_money" contient maintenant le contenu de la variable $money[player], stockée côté serveur.
Wait/delay
Description: Permet de délayer l'exécution d'un script.
Pattern: (wait|delay) {date}
Exemple(s):
wait 1 minute and 30 seconds
Print
Description: Affiche un élément dans la console.
Pattern: print {element}
Exemple(s):
Drop item
Description: Fait apparaître un ou des items à la position donnée
Pattern: drop [{+number}] {item at {array}
Exemple(s):
drop 1 minecraft:diamond_sword at player's location
Description: Dessine du texte à l'écran pendant une frame. Cette action n'ayant un effet que pendant une seule frame, elle doit être appelé dans un évènement approprié (les évènements de rendu par exemple).
Pattern: draw [(shadowed)] text {string at {array [with scale {number}] [[and] with color {number}]
Exemple(s):
draw text player's name at [50,150] with scale 0.5
Draw colored rectangle
Client
Description: Dessine un rectangle coloré à l'écran. Cette action n'ayant un effet que pendant une seule frame, elle doit être appelé dans un évènement approprié (les évènements de rendu par exemple).
Pattern: draw colored rect[angle] at {array with size {array [and] with color {number}
Exemple(s):
draw colored rectangle at [-15,-7.5] with size [30,15] and with color 16711680
Draw textured rectangle
Client
Description: Dessine un rectangle texturé à l'écran. Cette action n'ayant un effet que pendant une seule frame, elle doit être appelé dans un évènement approprié (les évènements de rendu par exemple).
Pattern: draw textured rect[angle] at {array with size {array using texture {resource [with uv {array}]
Exemple(s):
draw textured rectangle at [-15,-7.5] with size [30,15] using texture sample:logo.png
Description: Dessine une ligne entre les deux points données avec une certaine épaisseur et une certaine couleur
Pattern: draw line from {array to {array with stroke {number [and] with color {number}
Exemple(s):
draw line from [10,10] to [100,100] with stroke 6 and with color 0
Description: Applique une rotation de centre 0 et d'un angle donné sur la matrice de projection de l'interface dessinée à l'écran. Tous les éléments dessinés sur la même matrice sont affectés.
Pattern: rotate canvas by {number [(degrees|radians)]
Exemple(s):
draw text "Texte 1" at [10,10] #Ne sera pas tourné
push canvas matrix #Pousse une nouvelle matrice sur la pile de matrices
rotate canvas by 90 degrees
draw text "Texte 2" at [20,20] #Sera tourné de 90 degrés
pop canvas matrix
draw text "Texte 3" at [20,20] #Ne sera pas tourné car la matrice a été tirée.
Description: Applique une translation de vecteur donné sur la matrice de projection de l'interface dessinée à l'écran. Tous les éléments dessinés sur la même matrice sont affectés.
Pattern: translate canvas by {array}
Exemple(s):
draw text "Texte 1" at [10,10] #Ne sera pas déplacé
push canvas matrix #Pousse une nouvelle matrice sur la pile de matrices
translate canvas by [10,0,0]
draw text "Texte 2" at [20,20] #Sera déplacé de 10 unités vers la droite
pop canvas matrix
draw text "Texte 3" at [20,20] #Ne sera pas déplacé car la matrice a été tirée.
Description: Applique une homothétie de scalaire donné sur la matrice de projection de l'interface dessinée à l'écran. Tous les éléments dessinés sur la même matrice sont affectés.
Pattern: scale canvas by {array}
Exemple(s):
draw text "Texte 1" at [10,10] #Ne sera pas agrandi
push canvas matrix #Pousse une nouvelle matrice sur la pile de matrices
scale canvas by [2,2,0]
draw text "Texte 2" at [20,20] #La taille aura été multipliée par 2
pop canvas matrix
draw text "Texte 3" at [20,20] #Ne sera pas agrandi car la matrice a été tirée.
Push canvas matrix
Client
Description: Pousse une nouvelle matrice sur la pile de matrices de projection. Permet de "sauvegarder" la configuration précédente avant d'en effectuer une nouvelle.
Pattern: push canvas matrix
Exemple(s):
Description: Tire la matrice en haut de la pile de matrices de projection et la supprime. Permet de revenir à l'état précédent les modifications faites sur la dernière matrice poussée.
Pattern: pop canvas matrix
Exemple(s):
Teleport player
Description: Téléporte un joueur à une position.
Pattern: teleport {player to {array}
Exemple(s):
teleport player at [10,25,20]
Give item to player
Description: Donne un item à un joueur.
Pattern: give [{+number}] {item to {player}
Exemple(s):
give 1 minecraft:diamond_sword to player
Kick player
Description: Expulse un joueur du serveur, avec un message.
Pattern: kick {player [with message {string}]
Exemple(s):
kick player with message "Vous avez été expulsé pour triche"
Send element to the console/server
Description: Envoie un message à la console ou au serveur.
Pattern: send {element to (console|server)
Exemple(s):
Send element
Description: Envoie un message à un élément qui peut en recevoir. Le message peut être un paquet ou une chaîne de caractères
Pattern: send {element to {element}
Exemple(s):
send my_packet(10,"Test") to server
Send element
Description: Envoie un message à un élément qui peut en recevoir. Le message peut être un paquet ou une chaîne de caractères
Pattern: send {element to {element}
Exemple(s):
send my_packet(10,"Test") to server
Listes des expressions implémentées par Sqript
X coordinate of location
Description: Renvoie la coordonnées x d'un élément qui peut être associé à une position.
Pattern: x coord[inate] of {array}:number
Exemple(s):
x coord of [1,52,47] #Renvoie 1
Y coordinate of location
Description: Renvoie la coordonnées y d'un élément qui peut être associé à une position.
Pattern: y coord[inate] of {array}:number
Exemple(s):
y coord of [1,52,47] #Renvoie 52
Z coordinate of location
Description: Renvoie la coordonnées z d'un élément qui peut être associé à une position.
Pattern: z coord[inate] of {array}:number
Exemple(s):
z coord of [1,52,47] #Renvoie 47
Location of an element
Description: Renvoie la position d'un élément (qui peut en retourner une).
Pattern: (location of {element}|{+element}'s location): array
Exemple(s):
Distance between two locations
Description: Renvoie la distance entre deux éléments qui peuvent être associés à des positions.
Pattern: distance between {element and {element}:number
Exemple(s):
distance between [1,42,56] and [15,65,89]
Vector of a location
Description: Créé un vecteur à partir d'un élément pouvant être associé à une position. Les vecteurs peuvent être additionnés, multipliés par un scalaire, et plus encore.
Pattern: (vector of {array}|{array vector):vector
Exemple(s):
Block at location
Description: Renvoie le bloc à la position donnée.
Pattern: block at {array [in world {number}]:block
Exemple(s):
Blocks in radius of location
Description: Renvoie un tableau de blocs autour d'une position donnée dans un rayon donné.
Pattern: blocks in radius {number around {element [in world {number}]:array
Exemple(s):
blocks in radius 5 around [15,54,56]
Description: Renvoie la largeur de l'écran.
Pattern: screen width:number
Exemple(s):
Description: Renvoie la hauteur de l'écran.
Pattern: screen height:number
Exemple(s):
Screen width of a string
Client
Description: Renvoie la largeur d'une chaîne de caractères dessinée à l'écran.
Pattern: screen width of {string}:number
Exemple(s):
Screen height of a string
Client
Description: Renvoie la hauteur d'une chaîne de caractères dessinée à l'écran.
Pattern: screen height of font:number
Exemple(s):
Date
Description: Renvoie le temps donné.
Pattern: [{number year[s]] [[and] {number month[s]] [[and] {number week[s]] [[and] {number day[s]] [[and] {number hour[s]] [[and] {number minute[s]] [[and] {number second[s]] [[and] {number tick[s]] [[and] {number (millisecond[s]|ms)]
Exemple(s):
1 hour 25 minutes and 30 seconds
Now
Description: Renvoie sous forme de date à partir du Unix Epoch la date actuelle de la machine sur laquelle le script est exécuté.
Pattern: now
Exemple(s):
New dictionary
Description: Renvoie un nouveau dictionaire vide.
Pattern: [a] [new] dictionary:dictionary
Exemple(s):
set dict to a new dictionary
New dictionary from an array of key-value couples
Description: Renvoie un nouveau dictionaire défini par les couples clé-valeurs donnés.
Pattern: [a] [new] dictionary with {array*}:dictionary
Exemple(s):
set dict to a dictionary with [["Clé 1","Valeur 1"]]
Console
Description: Renvoie la référence de la console.
Pattern: console|server:sender
Exemple(s):
Random number
Description: Renvoie un nombre à virgule aléatoire entre les deux bornes données.
Pattern: random (number|([float] number)|float) [between {number and {number}]:number
Exemple(s):
random number between 1 and 50
Random integer
Description: Renvoie un entier aléatoire entre les bornes données.
Pattern: random (integer|(integer number)|int) between {number and {number}:number
Exemple(s):
random integer between 1 and 100
All players
Description: Renvoie un tableau de tous les joueurs connectés au serveur.
Pattern: all players:array
Exemple(s):
Player from username
Description: Renvoie une référence du joueur avec le nom donné
Pattern: player (named|with username) {string}:player
Exemple(s):
player with username Dartcher
Player's name
Description: Renvoie le nom du joueur donné.
Pattern: {+player}['s] name:player
Exemple(s):
Player's health
Description: Renvoie la vie du joueur donné.
Pattern: {+player}['s] health:number
Exemple(s):
Player's hunger level
Description: Renvoie le niveau de faim du joueur donné.
Pattern: {+player}['s] (hunger|food):number
Exemple(s):
Player's look vector
Description: Renvoie le vecteur du regard du joueur donné.
Pattern: {+player}['s] look vector:vector
Exemple(s):
Execution side
Description: Renvoie le côté d'exécution (client ou serveur) du script, sous forme de chaîne de caractères.
Pattern: [execution] side:string
Exemple(s):
Window title
Description: Renvoie le nom de la fenêtre du jeu.
Pattern: window (name|title):string
Exemple(s):
set window name to "Sqript."
Window icons
Description: Renvoie les icônes de la fenêtre du jeu. Pour pouvoir définir les icônes de la fenêtre, il faut fournir un tableau comportant deux éléments, qui doivent respectivement pointer vers une image .png de taille 16x16 et une image .png de taille 32x32.
Pattern: window icons:array
Exemple(s):
set window icons to [sample:favicon_wb_16.png,sample:favicon_wb_32.png]
Key is synced
Description: Renvoie true si la clé donnée est une variable synchronisée.
Pattern: value [of] {string is synced:boolean
Exemple(s):
Synced value of key
Description: Renvoie la variable synchronisée associée à la clé donnée.
Pattern: synced value [of] {string}:element
Exemple(s):
Array
Description: Permet de définir explicitement un tableau.
Pattern: ~[{element*}~]:array
Exemple(s):
Size of array
Description: Renvoie la taille d'un tableau.
Pattern: size of {array}:number
Exemple(s):
size of [1,2,5,6,8] #Renvoie 5
Random element of an array
Description: Renvoie un élément aléatoire d'un tableau.
Pattern: [a] random element of {array}:element
Exemple(s):
set winner to a random element of all players #Tire au sort un joueur parmi les joueurs connectés
First element of an array
Description: Renvoie le premier élément d'un tableau.
Pattern: first element of {array}:element
Exemple(s):
first element of [1,2,3,4,5] #Renvoie 1
Last element of an array
Description: Renvoie le dernier élément d'un tableau.
Pattern: last element of {array}:element
Exemple(s):
first element of [1,2,3,4,5] #Renvoie 5
Element of an array
Description: Renvoie l'élément d'indice donné du tableau. Attention, en Sqript, les indices commencent à 0.
Pattern: {+array}~[{+number}~]:element
Exemple(s):
[7,1,0,2,6][0] #Renvoie 7
Range of two numbers
Description: Renvoie un tableau contenant les nombres entiers compris entre les deux bornes.
Pattern: numbers from {number to {number}:array
Exemple(s):
numbers from 1 to 5 #Renvoie [1,2,3,4,5]
Range of numbers
Description: Renvoie un tableau contenant les nombres entiers compris entre 0 et la borne donnée.
Pattern: [numbers] in range of {number}:array
Exemple(s):
numbers in range of 5 #Renvoie [0,1,2,3,4,5]
Random numbers in range of number
Description: Renvoie un tableau contenant une partie aléatoire des nombres entiers compris entre 0 et la borne donnée.
Pattern: random numbers in range of {number}:array
Exemple(s):
random numbers in range of 10
Element is in an array
Description: Renvoie true si l'élément donné est dans le tableau.
Pattern: {element is in {array}:boolean
Exemple(s):
1 is in [1,5,6] #Renvoie true
Element is not in an array
Description: Renvoie true si l'élément donné n'est pas dans le tableau.
Pattern: {element is not in {array}:boolean
Exemple(s):
1 is not in [4,5,6] #Renvoie false
Array contains an element
Description: Renvoie true si l'élément donné est dans le tableau.
Pattern: {array contains {element}:boolean
Exemple(s):
1 is in [1,5,6] #Renvoie true
Sorted array
Description: Renvoie le tableau trié à partir du tableau donné. Les éléments du tableau ne seront affectés que si leur type est comparable.
Pattern: sorted [(ascending|descending)] (elements|keys) of {array}:array
Exemple(s):
sorted elements of [1,8,5,4] #Renvoie [1,4,5,8]
Copy of an array
Description: Renvoie une copie du tableau donné. Permet de modifier la copie sans modifier le tableau donné.
Pattern: copy of {array}:array
Exemple(s):
Type of an element
Description: Renvoie le type de l'élément donné sous forme de chaîne de caractères.
Pattern: type of {element}:string
Exemple(s):
type of 5 #Renvoie "number"
Element parsed as
Description: Renvoie l'élément sous un autre type.
Pattern: {element parsed as {string}:element
Exemple(s):
Element is set
Description: Renvoie true si l'élément est bien défini.
Pattern: {element is (set|defined):boolean
Exemple(s):
Element is not set
Description: Renvoie true si l'élément n'est pas défini.
Pattern: {element is not (set|defined):boolean
Exemple(s):
my_variable is not defined