Aller au contenu

Classement


Contenu populaire

Affichage du contenu avec la meilleure réputation le 03/06/18 dans toutes les zones

  1. 2 points
    Bonjour, dans ce tutoriel, je vais vous expliquer comment créer ses propres syntax skript tel que des effets, des conditions, des expressions, des types et des événements (pas encore disponible pour les types et éventements). Bien, commençons par savoir par quoi commencer : Qu'est-ce skript-mirror ? Pour résumer, skript-mirror est un addon vous permettant d'utiliser du java dans skript. Dans un premier temps, vous devrez télécharger l'addon skript-mirror qui est disponible sur le forum de skunity : [Contenu masqué] Il vous suffit de le mettre dans votre dossier "plugins" et de relancer votre serveur. A la base, SkQuery permettait de faire ça à partir de fichiers skq mais ce système n'était plus à jour. Skript-mirror à donc remis à jour ce système mais de façon bien meilleur. Créer ses propres syntax: /!\ Attention /!\ Une partie de ce tutoriel ne sera que de la traduction du tutoriel de base pour créer ses propres syntax. /!\ Attention /!\ Tout les "return" dans les codes/exemples sont qu'à partir de la version 0.9+ de skript-mirror. Pensez donc à bien avoir la bonne version de celui-ci. Sinon, remplacer "return" par "continue". Vous pouvez créer des effets et des expressions personnalisés pour créer des blocs de code réutilisables. La syntaxe personnalisée peut être utilisée dans tous les scripts, mais elle ne peut être utilisée qu'après avoir été analysée, alors prenez soin de vous assurer que les scripts contenant des déclarations syntaxiques personnalisées sont chargés en premier. La syntaxe personnalisée présente quelques avantages par rapport aux fonctions Skript: * Ils ressemblent plus à d'autres effets Skript et expressions * Ils se comportent bien avec les retards et l'effet de changement tel que les wait.... Création d'effets personnalisés Les effets personnalisés peuvent être créés à l'aide de la syntaxe suivante: effect <syntax>: # code Par exemple: effect greet the world: broadcast "Hello, world!" Cela crée un effet personnalisé pour dire "Hello world!" La syntaxe peut utiliser tous les éléments de pattern que Skript utilise, même les expressions imbriquées: effect greet [the] world %number% times: loop expression-1 times: broadcast "Hello, world" Les expressions peuvent être consultées avec la syntaxe suivante: [the] expr[ession][s](-| )%*number% Pluraliser l'expression vous permet d'accepter plusieurs valeurs. Remarque, le code suivant utilise expressions-1 PAS expression-1. effect greet %strings%: loop expressions-1: broadcast "Hello, %loop-expression%" Si l'effet n'est pas terminé immédiatement (par exemple, il y a une attente ou un effet asynchrone), vous devez déclarer que l'effet a un délai avant que le délai ne soit exécuté. Vous devez également continuer (PAS arrêter) après que l'effet soit terminé pour indiquer que le code d'appel peut continuer. effect greet [the] world slowly: delay the current effect broadcast "Hello" wait 10 seconds broadcast "World" continue Pour les effets personnalisés, avoir un continue n'est nécessaire que pour les effets retardés. Création d'expressions personnalisées : Les expressions personnalisées sont créées de manière similaire. Les expressions doivent toujours se poursuivre, avec une valeur de retour optionnelle. get expression <syntax>: # code return <valeur retournée> C'est une expression qui retourne toujours 6.28: get expression tau: return 6.28 Si une expression a toujours la possibilité de renvoyer plusieurs valeurs, elle doit être définie comme telle: get plural expression %number% random numbers: loop expression-1 times: add 4 to {_output::*} return {_output::*} Dans certains cas, vous aurez une expression qui renvoie plusieurs valeurs si plusieurs valeurs lui sont données et seulement une seule valeur si une seule valeur lui est donné. Vous pouvez préfixer ce paramètre par un $ pour indiquer que son montant détermine si l'expression peut renvoyer plusieurs valeurs. get expression just %$strings%: return expressions-1 # Autorise à écrire des deux façon set {single} to just "une valeur simple" set {multiple::*} to just "plusieurs", "valeurs", "différentes" Il y a aussi un raccourci pour écrire les expressions de propriété sous forme de [the] <quoi> of %$type%" et %$type%'[s] <quoi> . L'expression passée à %type% est toujours stockée dans l'expression-1 et toutes les expressions de <quoi> sont stockées dans les expressions suivantes. # [the] charisma of %player% # %player%'[s] charisma get player property charisma: return {charisma::%expression-1%} Création de conditions personnalisés: Les conditions personnalisées sont créées de même manière que les effets. Les conditions doivent toujours se poursuive. condition player has variable %string% set: if {players::%expression-1%} is set: return true else: return false Utilisation concrète : Pour utiliser ces effets, conditions et expressions personnalisés, vous devez les mettre dans un second fichier nommé "!!!lenomquevoussouhaitez". Les 3 points d'exclamations permettent au fichier d'être chargé en premier. Les effets que vous utilisez directement dans un script doivent être en dehors de votre fichier contenant les syntax personnalisés. (Jusqu'à la version prochainement) Merci de m'avoir lu et j'espère avoir pu vous apprendre quelque chose. Scripts possédants ce système: - GameAPI : [Contenu masqué] Pensez à me signaler les scripts possédant ce type de système pour que je puisse les ajouter à la liste ? /!\ Le tutoriel ci-dessus n'est valable que pour la version 0.9.0 de skript-mirror maximum /!\ Pour skript-mirror + 0.9.0, il y a quelques changements. Par exemple, pour récupéré la donnée d'un effet, il vous faudra utiliser "trigger", comme dans l'exemple suivant: effect mon magnifique effet: trigger: send "Wow ca fonctionne !" to console Pour les expressions, il vous faudra préciser le changer (add, remove, set...) dont get pour récupéré la valeur: expression ceci est un test: get: return "magnifique!" set: set {mavar} to change value #Ca donne: set ceci est un test to "coucou" . "change value" représente la valeur "coucou" . Ca peut très bien être un chiffre ou autre valeur... Si vous voulez changer la valeur d'une expression, tel que "set ceci est un test to "oh, ca a changé", il vous faudra utiliser cette méthode: expression ceci est un test: set: set {test} to change value Enfin, le "return" ne doit etre utiliser uniquement pour les expressions. En ce qui concerne les conditions, il faut "continue" lorsque c'est vrai et ne rien faire lorsque c'est faux. Il faut utiliser "continue" dans les effets en cas de timer, tel que "wait 3 seconds" par exemple. Pour les conditions, il faudra utiliser "check", comme: condition ceci est une condition: check: if (1+2) = 3: continue Rappel: La documentation officiel se trouve ici: [Contenu masqué]
  2. 2 points
    Je pense qu'il veut du skript. c'est le principe du forum :) Sinon check ça (pour tester si il a la bonne armure) : [Contenu masqué] if player's helmet is à diamond helmet named "&cSalut": Et ça (pour lui mettre un effet) : [Contenu masqué] apply swiftness 3 to player for 10 seconds[/Code]
  3. 1 point
    Bonjour, dans ce tutoriel, je vais vous expliquer les loops de manières très poussés en skript. Ce tutoriel s'adresse à tout les développeurs de scripts, que ce soit débutant ou niveau très poussé. Ce tutoriel sera divisé en 3 parties pour que vous puissiez voir la/les parties à votre niveau. Sommaire : [spoiler=Niveau débutant] I/ Niveau débutant : Une loop peut être traduit par "boucle" en français. Il s'agit de répéter une action un certain nombre de fois, allant de 1 à un nombre infinis de fois. En skript, il n'existe pas de boucle "for" comme dans la plupart des langages mais uniquement 2 loops : "loop" et "while" La boucle "while" va faire une boucle infinis, juqu'à ce qu'une condition la brise. La boucle "loop" va cibler un nombre de fois définis et ne va se répéter que ce nombre de fois. Une loop est donc une boucle qui va se répéter un certain nombre de fois. Voici donc un bref résumé de ce qu'il se passe dans une boucle: [spoiler=Avec loop] loop 5 times: #étape 1 : création de la boucle add 1 to {_a} #On ajouter 1 à cette variable # broadcast "%{_a}%" #On broadcast un message avec le nombre contenant {_a} # Code #retour à l'étape 1 # [spoiler=Avec while] set {_a} to 5 while {_a} > 0: #étape 1 : création de la boucle remove 1 from {_a} #On ajouter 1 à cette variable # broadcast "%{_a}%" #On broadcast un message avec le nombre contenant {_a} # Code #retour à l'étape 1 # Ainsi, nous pouvons mettre une loop dans un code tel que: [spoiler=Avec loop] #mon code loop 5 times: broadcast "hey" broadcast "fin de la loop" [spoiler=Avec while] #mon code set {_a} to 5 while {_a} > 0: broadcast "hey" remove 1 from {_a} broadcast "fin de la loop" Ce sera très important pour la suite, vous en avez ma parole ;) [spoiler=Tips]Le while peut etre une boucle inintéréssante à première vue, mais est très importante lorsque nous savons l'utiliser. [spoiler=Niveau intermédiaire] II/ Niveau intermédiaire : Pour le niveau intermédiaire, il y a quelques astuces que vous devez connaitre. Vous devez dans un premier temps savoir que chaque loop renvoit une valeur, et que cette valeur augmente à chaque tour. Par exemple, si vous faites: command /test: trigger: loop 5 times: broadcast "%loop-value%" Vous pourrez remarquer qu'il va vous dire "1", "2", "3", "4" et "5". [spoiler=Pourquoi ?]Car chaque boucle avec "loop" démarre de 1 pour finir à son point culminant, comme dans l'exemple où le point culminant est "5" Sachez aussi que les variables listes peuvent être bouclés, tel que : command /test: trigger: set {_mavar::*} to "je", "renvoi", "une" and "phrase!" loop {_mavar::*}: broadcast "%loop-value%" Vous remarquerez ici qu'il va vous broadcast dans l'ordre "je renvoi une phrase!" en revenant toujours à la ligne. [spoiler=Pourquoi ?]Car il va reprendre le même système que la boucle avec "loop" précédente. Chaque boucle commence par la valeur 1, et chaque variable liste commence par l'index 1. Lorsque vous ajouter une valeurs, celle-ci y sera ajouté à la suite, tel une musique ajoutée à une file d'attente. Si votre valeur est la 5ème valeur ajoutée, elle sera donc en 5ème position. [spoiler=Tips]"loop-value" ne fonctionne pas pour les boucles "while" Une chose importante est à prévoir. Si vous utilisez une boucle dans une boucle, il ne faudra pas utiliser "loop-value" mais "loop-value-1" pour cibler une valeur de la boucle 1 par exemple ou "loop-value-2" pour la seconde. Tel que: [spoiler=Avec loop] command /test: trigger: set {_hey::*} to "je", "vais", "être", "broadcast", "5" and "fois" loop 5 times: loop {_hey::*}: broadcast "%loop-value-1% : %loop-value-2%" [spoiler=Tips]Vous pouvez bouclé tout ce qui est multiple, tel que l'inventaire d'un joueur, le nombre de blocs autour d'une position... Cela inclut aussi les expressions tel que all players, intergers from 1 to 5... Une autre fonctionnalité est le "exit loop", qui équivaut à un "stop loop" qui va arreter la boucle en cours. Exemple: loop 99 times: if loop-value = 2: broadcast "oh, la valeur est égale à 2" exit loop broadcast "Cette boucle ne fera pas 99 fois" [spoiler=Tips]Les "while" peuvent contenir des conditions tel que: while player is op: [spoiler=Niveau poussé] II/ Niveau poussé : Pour le niveau poussé, nous allons parler avec un vocabulaire que j'ai inventé mais qui reste cohérent. Désormais, considérer les loop en tant que "block". Vous pouvez optimiser votre code avec les loops, vous évitant de créer 1000 et 1 fonction. Voici un exemple de code que vous pouvez optimiser: Avant: command /test: trigger: broadcast " " broadcast " " broadcast " " broadcast " " broadcast " " broadcast " " broadcast " " broadcast " " broadcast " " broadcast " " broadcast " " broadcast " " broadcast " " broadcast "Le chat a été vidé par %player%" Après: [spoiler=Avec loop] command /test: trigger: loop 13 times: broadcast " " broadcast "Le chat a été vidé par %player%" [spoiler=Avec while] command /test: trigger: set {_a} to 13 while {_a} > 0: broadcast " " remove 1 from {_a} broadcast "Le chat a été vidé par %player%" Ca supprime un grand nombre de ligne n'est-ce pas ? Merci d'avoir lu ce tutoriel. Pensez à jeter un oeil sur les exemples ci-dessous si vous voulez avoir des exemples concret d'utilisation des boucles ;) [spoiler=Exemples] [spoiler=Compte à rebour] [spoiler=Exemples] [spoiler=Avec loop] loop 5 times: wait 1 second [spoiler=Avec while] set {_a} to 5 while {_a} > 0: wait 1 second remove 1 from {_a} Ici, tant que la variable sera supérieur à 0, cette partie se répétera. Pour éviter un nombre de fois infinis de répétition, nous enlevons 1 à chaque fois de notre variable {_a}. [spoiler=Templates] [spoiler=Avec loop] #Exemple 1: options: temps : 5 parsed_as : second function Timer(): loop {@temps} times: wait 1 {@parsed_as} #Exemple 2: function Timer(temps: integer, parsedas: text = "seconds"): loop {_temps} times: wait 1 {_parsedas} [spoiler=Avec while] #Exemple 1 options: temps : 5 parsed_as : second function Timer(): set {_a} to {@temps} while {_a} > 0: wait 1 {@parsed_as} remove 1 from {_a} #Exemple 2 function Timer(temps: integer, parsed_as: text = "seconds"): while {_temps} > 0: wait 1 {_parsedas} remove 1 from {_temps}
  4. 1 point
    Bonsoir, Essaye ceci. command /joininf1: trigger: if event-world is "Inf1": if {server01.partie} is "&6En attente de joueurs...": add player to {server01.joueurs.list.all::*} teleport player to {server01.spawn.waitingroom} add 1 to {survivants} if {survivants} is equal to 3: if {server01.timer} is not set: set {server01.timer} to true send "&eServeurs >> Debut de la partie dans ... 10 secondes" to {server01.joueurs.list.all::*} wait 10 second set {joueurchoisit1} to random element between {server01.joueurs.list.all::*} wait 2 ticks send "&eServeurs >> &6%{joueurchoisit1}% &aa ete choisi pour être le &e&k|| &2Zombie &e&k||" to {server01.joueurs.list.all::*} loop {server01.joueurs.list.all::*}: loop-value isn't {joueurchoisit1} add loop-value to {server01.joueurs::*} set {server01.partie} to "&cEn partie" remove 1 from {survivants} remove {joueurchoisit1} from {server01.joueurs.list.all::*} loop {server01.joueurs::*}: teleport loop-value to {server01.spawn.survivants} wait a tick teleport {joueurchoisit1} to {server01.spawn.zombie} add {joueurchoisit1} to {server01.zombie::*} loop {server01.joueurs::*}: clear the loop-value's inventory wait a tick set slot 8 of loop-value to chest named "&6Coffre Non-Discret :)" set slot 0 of loop-value to wood sword named "&aMa fidele epee !" equip loop-value with leather chestplate loop {server01.zombie::*}: set slot 0 of loop-value to iron sword named "&6Grrr..." equip loop-value with iron chestplate equip loop-value with iron helmet equip loop-value with iron leggings equip loop-value with iron boots execute console command "odis %loop-value% zombie" send "&eServeurs >> La partie a commence, bonne chance a tous !" to {server01.joueurs.list.all::*} send "&aServeurs >> Vous avez rejoint la partie '&6Castle&a'" send "&eServeurs >> &6%player% &ea rejoint la partie ! &7[&e%{survivants}%&7/&620&7]" to {server01.joueurs.list.all::*} clear the player's inventory set slot 8 of player to 251:14 named "&cQuitter" set slot 4 of player to ender chest named "&bCosmeti'Box" if {server01.partie} is "&cEn partie": send "&cServeurs >> La partie est deja en cours !" else: send "&cServeurs >> Cette commande ne peut-etre executé que a partir d'un lobby !" Les listes : {server01.joueurs.list.all::*} = Tous les joueurs y compris le "zombie" {server01.zombie::*} = Le "zombie" {server01.joueurs::*} = Uniquement les joueurs non zombifier
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.