[skript] apprenez les bases

Discussion dans 'Astuces' créé par Fiery, 14 Avril 2017.

  1. Fiery

    Fiery Membre ancien

    Inscrit:
    18 Février 2016
    Messages:
    136
    J'aime reçus:
    1 222
    Bonjour, aujourd'hui on vas voir comment faire des Skripts assez basique.

    Commençons par le prérequis:
    - Le plugin https://dev.bukkit.org/projects/skript
    - Un serveur Bukkit / Spigot

    Connectez-vous au (S)FTP de votre serveur minecraft puis allez dans le plugins/Skript/script/ ici il y a tout les scripts. Les scripts qui commencent par un - sont désactivés.

    Créez un fichier avec notepad++ et nommé le tuto.sk est écrivez dedans:
    Code:
    on join:
    
        if player is op:
            broadcast "Un opérateur nommé %player% à rejoint le jeu !"
    Après chaque : il faut rajouter une tabulation à la ligne suivante sinon votre Skript ne fonctionnera pas.

    Si vous copiez/collez les exemples n'oubliez pas de mettre les tabulations.

    Regardons de plus près:
    "on join:" est le déclencheur, on met ":" pour dire "alors" on pourrait traduire cela par "Quand un joueur se connecte alors:"

    "if player is op" est une condition, si elle n'est pas respectée les actions ne s'exécuterons pas .
    "broadcast" Permet d'envoyer un message dans la chat, on peut voir que j'utilise une variable %player% qui sera automatiquement remplacé par le pseudonyme du joueur.


    Nous pourrons traduire se Skript par:
    Quand un jour se connecte si il est "op" alors envoyer un message dans le chat disant Un opérateur nommé %player% a rejoint le jeu !

    Maintenant chargeons votre script sur votre serveur avec la commande /skript reload all.

    Nous allons créer votre premier vrais Skript, (ayant une vraie utilité) un anti build:
    Code:
    on build: # Quant quelqu’un pose un bloc
      cancel event #Annule l'événement
    
    He oui rien de plus simple ! maintenant nous aimerons juste interdire le fais de casser des blocs de stone

    Code:
    on break of stone: # Quant quelqu’un casse un bloc de stone
      cancel event #Annule l'événement
    
    Bon c'est bien beau mais un anti build est généralement conçu pour les joueur non pas pour les opérateurs donc nous allons modifier le Skript en rajoutant une condition:

    Code:
    on break of stone: # Quant quelqu’un casse un bloc de stone
      if player is not op: # Si le joueur n'est pas opérateur
       cancel event #Annule l'événement
    
    
    Et voilà, vous venez de créer un Skript qui empêche aux joueur de casser les blocs de stone.
    Si vous voulez la liste des déclencheur je vous laisse regarder ici https://skript-mc.fr/doc/skript/Evenéments



    Maintenant regardons comment créer des commandes avec des Skripts, je vais vous mettre un petit exemple :
    Code:
     
    command /tutoriel:
        description: Permet d'envoyer un message dans le chat
        permission: op
        permission message: T KI?
       trigger:
         send "Coucou %player% vous être un administrateur c:"
    #Pour quitter la partie trigger de créer une nouvelle ligne sans les tabulation vous pouvez continuer votre skript comme sa:
    on join:
        if player is op:
            broadcast "Un opérateur nommé %player% a rejoint le jeu !"
    
    
    Bon sa ce complique un peu mais pas de panique, regardons cela en détaille:
    "command /tutoriel:" Vas enregistrer la commande /tutoriel
    "permission" Définit la permission nécessaire à l’exécution de la commande. Si la ligne est supprimé tout le monde sera en mesure d’exécuter cette commande.
    "permission message:" Définit le message qui sera envoyé à la personne si elle n'a pas les permissions de l’exécuter.
    "trigger" Signifie alors, toutes les actions en dessous de trigger seront exécutés
    "send" permet d'envoyer un message à la personne (seulement) concerné par l'événement ou la commande.

    On pourrait traduire sa par:
    Quant la commande /tutoriel est exécuté et que le joueur en possède la permission alors lui envoie un message. Si il ne possède pas la permission alors lui notifier.


    Maintenant je vous propose d'exercer ce que vous avez appris:
    Faites un script qui fait que quand un joueur ce connecte cela envoi un message lui disant "Bienvenue (sontpseudo) sur Mineria fait /jispaestbeau pour avoir la liste des commandes.". Et faites que quand /jispaestbeau est exécuté cela affiche "/spawn pour retourner au spawn.".

    Correction:
    Code:
    on join:
         send "Bienvenue %player% sur Mineria fait /jispaestbeau pour avoir la liste des commandes."
    
    command /jispaestbeau:
       trigger:
         send "/spawn pour retourner au spawn."
    
    
    

    Maintenant je vous propose un nouvel exercice, vous allez devoir créer un script qui empêche que tout les joueurs puissent drop de la stone. A chaque fois qu'un joueur lancera de la stone l'événement sera annulé.
    Indice

    Correction:
    Code:
    on drop of stone:
      cancel event
    


    Voilà la partie 1 de ce petit tutoriel est finis je le compléterais lorsque j'aurais plus de temps :3

    Et @Jispa vous apprendra la TI Basic prochainement ;)

    EDIT:

    Je me permet de compléter ce petit tutoriel avec les avantages et le inconvénients du Skript pour vous guider, puis on continua sur la variables:

    Les avantages:
    + Rapide à développer
    + Simple
    + Aucune expérience en programmation n'est nécessaire

    Les inconvénients:
    - Lent*
    - Peut être source de lag si mal codé / trop volumineux
    - Limité

    * Le Skript et lent car contrairement à Java ce langage n'est pas directement exécuté il a besoin d'être interprété. Un plugin java est compilé donc directement converti en langage machine.

    Pour un plugin mini jeux je vous conseil de le faire en Java, sa évitera la lag et cela vous offrira plus de possibilité.

    Pour un "plugin" de modération je vous conseil le Skript sa sera bien plus simple et rapide à développer.

    Commençons les variables

    Il existe 3 types de variables:

    Les variables locales :
    Ce type de variables ne fonctionnes que dans un événement en dehors de celui-ci elle n’existe pas. Ces variables sont reconnaissable car elle commence par un underscore (pour les plus perdus d'entre vous c'est sa un underscore _ ).

    Exemple:
    Code:
    on chat: #Quant un utilisateur parle
    set {_player} to player # Définir la variable _player sur le nom d'utilisateur de la personne
       broadcast "La variables contient %{_player}%" #Affiche le contenu de la variable donc le nom d'utilisateur de la personne
    
    on join
    broadcast "La variables contient %{_player}%" # Cela ne fonctionnera pas car la variable est définit dans une autre fonction elle n'existe pas ici
    

    Les variables normal:
    Sont noté comme cela {nomdelavariable}. Ce sont comme les variables locales à l’exception qu'elle sont accessible depuis n'importe qu'elle fonction.

    Les variables options:

    Sont des variables qui se définissent dans le Skript et qui ne sont pas modifiable à par si on modifie le code source du Skript. Elles sont notées : {@variable} et contrairement aux autres types de variables les "%" ne sont pas nécessaires.

    Exemple:
    Code:
    options:
        test : valeur #Définit {@test} sur valeur
        broadcast "{@test}" #Affichera valeur
    
    /!\ Ce type de variable n'est pas modifiable via la commande set /!\

    Il est aussi possible de créer des listes de variables. Une liste de variable est une variable contenant plusieurs valeurs.

    On peut altéré cette liste avec :

    add
    pour ajouter du contenu

    remove
    pour supprimer du contenu

    clear:
    pour supprimer tout le contenu

    Exemple:
    Code:
    on join:
       loop all players: #S’exécute au tant de fois qu'il y a de joueur.
       add loop-player to {_online player::*} # Ajoute tout les joueurs dans la liste des variables
       send "Bienvenue %player% sur Mineria, les joueur connectés sont: %{_online player::*}%"
    


    Je compléterais ce tutoriel quand j'aurais le temps si vous avez des question / remarques je suis disponible via message privé :) !
     
    Dernière édition: 28 Avril 2017
  2. Jispa

    Jispa Thug Life depuis 1986 à peu près

    Inscrit:
    17 Décembre 2015
    Messages:
    7
    J'aime reçus:
    287
    C'était vraiment trop bien comme tutoriel. Dommage que je ne sache pas lire.
    +1 abo
     
  3. Fujitorii

    Fujitorii Membre ancien

    Inscrit:
    10 Février 2016
    Messages:
    28
    J'aime reçus:
    376
    Normal que je n'ai rien compris?
    Ah ouais j'ai pas lu ! C'est normal !
    Ouais mais même si j'avais lu j'aurai rien compris.
    Jtm @Fiery @Jispa ossi tqt ps de jalou
     
    Boum4 et Jispa aiment ça.
  4. KietsuSama

    KietsuSama Membre ancien

    Inscrit:
    16 Mai 2016
    Messages:
    171
    J'aime reçus:
    557
    ça ressemble vachement à du python comme style de langage....
    Du coup j'imagine que ça doit pas être très dur mais limité dans les possibilités non?
     
    Dimitri56 apprécie ceci.
  5. ulteamate

    ulteamate Membre très actif

    Inscrit:
    6 Janvier 2016
    Messages:
    140
    J'aime reçus:
    363
    gj pour le tuto ^^
    Je tiens à préciser que Notepade++ peut être substitué par l'outil "bloc note"

    En vérité, c'est même bien plus simplifié que du python (pas de boucle for possible par exemple).
    Donc oui les possibilités en sont réduites.
    Cependant, je n'ai pas encore assez expérimenté la chose pour le confirmer, mais je pense que les connaissances suivantes peuvent améliorer les possibilités :
    - connaître les bases en bukkit (pas si compliqué)
    - connaître les bases en codage quelconque aide beaucoup
    - s'y connaître en bloc de commande peut localement servir (car les "outils" utilisés sont parfois les mêmes, entités, téléportation..)
     
  6. Fiery

    Fiery Membre ancien

    Inscrit:
    18 Février 2016
    Messages:
    136
    J'aime reçus:
    1 222
    Exactement, en plus de n'être pas performant ce langage est extrêmement limité mais suffisant pour de petit projet. Rien ne vaudra un bon petit plugin en java ;)!

    J'enlève conseil pas, contrairement à bloc note note pad ++ a une meilleure gestion des tabulations de plus la syntaxe du langage skript et disponible en add-ons pour avoir une auto complétion.
     
    Dernière édition: 15 Avril 2017
    ulteamate apprécie ceci.
  7. KietsuSama

    KietsuSama Membre ancien

    Inscrit:
    16 Mai 2016
    Messages:
    171
    J'aime reçus:
    557
    En vrai à la place de blocnote go sublime text c'est beaucoup plus adapté au code (même si ça reste basique)
     
    Dimitri56, NFE404 et Fiery aiment ça.
  8. KietsuSama

    KietsuSama Membre ancien

    Inscrit:
    16 Mai 2016
    Messages:
    171
    J'aime reçus:
    557
  9. Zecrum_

    Zecrum_ Membre ancien

    Inscrit:
    5 Mars 2016
    Messages:
    242
    J'aime reçus:
    746
    Cool comme tuto ! J'en ai appris aujourd'hui ! J'attends la suite avec impatience :D

    PS: A ton exercice 1, pour moi j'ai fallut rajouter un espace devant le send de la ligne 6.
    Ce qui donne :
    Code:
    on join:
         send "Bienvenue %player% sur Mineria fait /jispaestbeau pour avoir la liste des commandes."
    
    command /jispaestbeau:
       trigger:
          send "/spawn pour retourner au spawn."
    
    
     
    Dernière édition: 15 Avril 2017
    Fiery apprécie ceci.
  10. kirito96300

    kirito96300 Membre

    Inscrit:
    16 Février 2017
    Messages:
    7
    J'aime reçus:
    9
    sa a l'air...compliqué^^.
     
  11. Fiery

    Fiery Membre ancien

    Inscrit:
    18 Février 2016
    Messages:
    136
    J'aime reçus:
    1 222
    Tutoriel complété avec une partie sur les variables ;).

    J'ajoute prochainement une partie sur les conditions ^~^ !
     
    Dernière édition: 17 Avril 2017
    Zecrum_ et Dimitri56 aiment ça.
  12. MrSimsim11

    MrSimsim11 Membre très actif

    Inscrit:
    20 Décembre 2015
    Messages:
    156
    J'aime reçus:
    243
    J'ai pas le temps pour l'instant, mais j'ai seulement regardé les " codes '' on dirait des algo'
    ( j'y connait rien en code )
     
    Dimitri56 apprécie ceci.
  13. Fevone

    Fevone Membre très actif

    Inscrit:
    31 Mars 2016
    Messages:
    81
    J'aime reçus:
    339
    Atom > NotePad++ ^^
     
  14. Fiery

    Fiery Membre ancien

    Inscrit:
    18 Février 2016
    Messages:
    136
    J'aime reçus:
    1 222
    Si cela vous intéresse toujours je peut continuer le petit tutoriel avec pour exemple comment faire un système économique ^^
     
  15. Empereur_HaydN

    Empereur_HaydN Membre ancien

    Inscrit:
    8 Juin 2016
    Messages:
    132
    J'aime reçus:
    983
    Putain tu fais tjrs des trucs stylés bb <3
     
    Fiery apprécie ceci.
  16. Quexyo_

    Quexyo_ Membre actif

    Inscrit:
    30 Janvier 2016
    Messages:
    15
    J'aime reçus:
    28
    Chui le seul qui ai lus une ligne et qui ces dit ou la c'est pas dans mes compétence et j'ai pas lus la suite :p