Aller au contenu

Bases de Sqript

Créer un script

Un script est défini par un unique fichier, dont l'extension est .sq. Chaque fichier possédant cette extension dans le dossier .minecraft/scripts/ correspondra donc à un script.

Info

Il est conseillé d'utiliser un éditeur de texte performant pour faciliter ou automatiser certaines tâches lors de la rédaction d'un script.

Pour fonctionner correctement, un script doit respecter une certaine structure.

Blocs

Un script fonctionnel est composé de blocs. Un bloc est un ensemble de lignes ayant un certain rôle lors de l'exécution du script, et constitue l'élément le plus important dans un script. Un bloc peut exécuter des actions, définir des valeurs, ou indiquer à Sqript comment se comporter avec les autres blocs. Voici un exemple de structure par blocs :

Tip

Pour l'instant, on ignorera le contenu de ces blocs. Tout sera expliqué dans les parties suivantes.

Un bloc peut contenir des sauts de lignes, Sqript considérera qu'un bloc s'arrête que lorsqu'un nouveau bloc commence ou lorsqu'on arrive à la fin du fichier. On remarquera qu'un nouveau bloc est défini par une première ligne dont l'indentation vaut zéro.

Info

L'indentation d'une ligne correspond au nombre de tabulations présentes au début de la ligne. Pour indenter une ligne, on peut utiliser la touche ++tab++, ou ajouter 4 espaces.

Warning

Il est bien précisé ci-dessus que 4 espaces sont nécessaires, si un espace est oublié l'indentation sera mauvaise. Si un script est mal indenté, de nombreuses erreurs peuvent se produire. Il est donc conseillé d'utiliser un éditeur de texte permettant une manipulation efficace et intuitive des tabulations (Sublime Text 3 👀).

Liste des blocs implémentés par Sqript

Certains blocs peuvent être rechargés (recompilés lors de l'exécution de la commande /sqript reload), et d'autres non. Un bloc rechargeable sera indiqué par l'annotation reloadable en haut à droite de celui-ci.

Events
Reloadable
Description: Bloc d'évènement. Permet de déclencher un ensemble d'actions lorsqu'un évènement est déclenché. Les évènements peuvent être déclenchés côté serveur ou côté client. Si un évènement n'est pas exécutable du côté souhaité, considérer l'utilisation des variables synchronisées ou des paquets pour communiquer les informations entre le client et le serveur.
Pattern: Events
Exemple(s):
on script load:
    print "Hello world !"
Imports
Reloadable
Description: Bloc d'importation. Permet d'importer une ou des fonction d'un autre script.
Pattern: Imports
Exemple(s):
import:
    * from my_script
Time loops
Reloadable
Description: Bloc de boucle temporelle. Permet de déclencher un ensemble d'actions à chaque intervalle de temps prédéfini.
Pattern: Time loops
Exemple(s):
every 1 minute:
    ...
Items
Description: Bloc de nouvel item. Permet de créer un nouvel item utilisable en jeu.
Pattern: Items
Exemple(s):
item test_item:
    name: My Test Item
    texture: sample:yellow_diamond.png
    creative tab: miscellaneous
    max stack size: 8
    type: item
Packets
Reloadable
Description: Bloc de paquet de données. Permet d'échanger des informations entre le serveur et les clients. Les paquets peuvent transporter des variables entre le serveur et les clients, grâce au paramètres définis après le nom du paquet. Les types des variables données en argument doivent absolument être sérialisable, sans quoi le paquet ne sera pas envoyé. Les types sérialisables les plus communs sont : number, array, string, boolean, dictionary, resource... Les paquets peuvent être envoyés du client vers le serveur, ou du serveur vers un client. Les sous-blocs 'client' et 'server' permettent de définir les actions à effectuer en fonction du côté de réception du paquet.
Pattern: Packets
Exemple(s):
packet test_packet(message):
    client:
        print message
    server:
        print message
Functions
Reloadable
Description: Bloc de fonction. Une fonction est bloc représentant un petit bout de code réutilisable n'importe où, qui peut ou non retourner un résultat.
Pattern: Functions
Exemple(s):
function broadcast(message): #Fonction qui envoie un message à tous les joueurs
    for p in all players:
        send message to p
Commands
Reloadable
Description: Bloc de commande. Permet de définir une nouvelle commande. Les sous-blocs permettent de configurer le comportement de la commande. Les actions à exécuter doivent être écrites directement après les sous-blocs.
Pattern: Commands
Exemple(s):
command /randomplayer:
    usage: /randomplayer
    description: returns a random player
    send a random element of all players to sender
Options
Reloadable
Description: Bloc d'options. Les options sont un ensemble de paramètres définis de manière globale dans un script. Elles permettent de faciliter la configuration d'un script pour modifier son fonctionnement.
Pattern: Options
Exemple(s):
options:
    my_value: 5