Olyno 196 Posté : 6 mars 2018 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] Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. [spoiler=Avec while] Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Ainsi, nous pouvons mettre une loop dans un code tel que: [spoiler=Avec loop] Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. [spoiler=Avec while] Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. 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: Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. 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 : Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. 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] Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. [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: Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. [spoiler=Tips]Les "while" peuvent contenir des conditions tel que: Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. [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: Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Après: [spoiler=Avec loop] Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. [spoiler=Avec while] Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. 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] Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. [spoiler=Avec while] Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. 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] Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. [spoiler=Avec while] Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. 1 Partager ce message Lien à poster Partager sur d’autres sites
noftaly 497 Répondu : 6 mars 2018 au lieu de faire ton while en deux lignes Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. (= tant que a +grand que 5) tu peux faire Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. (= tant que "a" n'est pas égal a 5) ou Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. (= tant que "a" est plus petit ou égal à 5) sinon très bon tuto, même si je pense que le niveau intermédiaire pourrait convenir a un débutant et que le poussé pourrait convenir a un intermédiaire ^^ Partager ce message Lien à poster Partager sur d’autres sites
Olyno 196 Répondu : 6 mars 2018 au lieu de faire ton while en deux lignes Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. (= tant que a +grand que 5) tu peux faire Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. (= tant que "a" n'est pas égal a 5) ou Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. (= tant que "a" est plus petit ou égal à 5) sinon très bon tuto, même si je pense que le niveau intermédiaire pourrait convenir a un débutant et que le poussé pourrait convenir a un intermédiaire ^^ J'ai utilisé sous forme de variable pour que ce soit simple à comprendre et à décomposer, mais oui sinon tu peux aussi faire de cette manière ;) Partager ce message Lien à poster Partager sur d’autres sites
Soufreur78 189 Répondu : 7 mars 2018 Rien sur les : - loop integer between ? - loop-index ? - loop all players ? - loop all players where [player input] ? - While avec d'autres conditions ? (variable, position, environnement) Explique que l'on peut mettre n'importe quoi dans des loops; - loop size of {Membres::*} times: - loop blocks from the block below the player to the block 10 east of the block below the player: - loop blocks in radius 5 around the player: - loop all players where [player input has permission "test"]: - loop blocks within {1} to {2}: Pareil pour les whiles: - while player is alive: - while block below player is dirt: - while "%{Membres::*}%" contains "Soufreur78": - while player's health >= 5: - while player's fly mode is true: - while number of all players < 5: - while name of current inventory of player is "Test": - while player has 5 diamonds in her inventory: - While "%region at player%" is "test": - while file "plugins/test.bat" exists: - while player has potion slowness: - while player is within {variable} to {variable2}: Si tu souhaites faire un tuto complet il faut le préciser 2 Partager ce message Lien à poster Partager sur d’autres sites
Olyno 196 Répondu : 7 mars 2018 Rien sur les : - loop integer between ? - loop-index ? - loop all players ? - loop all players where [player input] ? - While avec d'autres conditions ? (variable, position, environnement) Explique que l'on peut mettre n'importe quoi dans des loops; - loop size of {Membres::*} times: - loop blocks from the block below the player to the block 10 east of the block below the player: - loop blocks in radius 5 around the player: - loop all players where [player input has permission "test"]: - loop blocks within {1} to {2}: Pareil pour les whiles: - while player is alive: - while block below player is dirt: - while "%{Membres::*}%" contains "Soufreur78": - while player's health >= 5: - while player's fly mode is true: - while number of all players < 5: - while name of current inventory of player is "Test": - while player has 5 diamonds in her inventory: - While "%region at player%" is "test": - while file "plugins/test.bat" exists: - while player has potion slowness: - while player is within {variable} to {variable2}: Si tu souhaites faire un tuto complet il faut le préciser et Disponible depuis un petit moment dans la partie intermédiaire. En ce qui concerne les whiles, si on dit qu'ils peuvent contenir des conditions, je pense qu'il ne faut pas être bête pour utiliser les conditions disponible que nous offre les addons ou encore skript lui même. En ce qui concerne "loop all players" par exemple, "all players" reste une expression. Etant donné que j'avais précisé "tout ce qui est multiple", ca me paraissait logique d'inclure les expressions de ce style, je l'ai quand même repréciser. Le tutoriel est sur les loops, et non les expressions et l'utilisation des expressions, c'est donc normal que je n'ai pas inclut ça dans le tutoriel. Merci tout de même pour ta/tes remarque(s) ;) 1 Partager ce message Lien à poster Partager sur d’autres sites
kumakuma215 168 Répondu : 25 mars 2018 Euuuuh, ton while dans le niveau poussé la, ça fait crash le serveur car t'as pas rajouté de "remove 1 from {_a}" @AlexLew xD Partager ce message Lien à poster Partager sur d’autres sites
Shelk 316 Répondu : 26 mars 2018 Euh y'as une boucle while infini il me semble x) Partager ce message Lien à poster Partager sur d’autres sites
kumakuma215 168 Répondu : 26 mars 2018 Euh y'as une boucle while infini il me semble x) Je l'avais déjà signalée :( Partager ce message Lien à poster Partager sur d’autres sites
Shelk 316 Répondu : 26 mars 2018 Oui j'avais pas vu xD Partager ce message Lien à poster Partager sur d’autres sites
Olyno 196 Répondu : 26 mars 2018 @Shelk @kumakuma215 Edité, merci de me l'avoir signalé ;) Partager ce message Lien à poster Partager sur d’autres sites
MiiTsY 0 Répondu : 25 mai 2022 (modifié) Bonjour, désolé de up le tuto. Je suis un débutant complet en skript et du coup j'y connais rien en addons etc. Mon problème est que j'ai essayé plusieurs loop et j'ai toujours le même erreur dans la console qui ressemble à ca : #!#! Current node: loop 5 times: (Scoreboard.sk, line 5) J'ai essayé "while player is online" | "loop all players" et c'est la même erreur. Alors du coup j'ai essayé la première partie du tuto (débutant) et c'est la même chose edit: les addons que j'utilise : SkBee SkVault Skript-holo Skript-placeholders Skellet Skript-GUI version du serveur paper1.17.1 hébergeur : minehut.gg edit: edit: Alors voila j'ai pensé que ca venais peut être des addons donc j'ai removed 1 par 1 les addons et on dirais bien que c'est Skellet le responsable et qu'il cassais les boucles. Modifié 26 mai 2022 par MiiTsY Plus d'infos Partager ce message Lien à poster Partager sur d’autres sites