Aller au contenu
Polymeth

Skript School #5 - Les listes et les boucles

Le prochain Skript School  

51 membres ont voté

  1. 1. Le prochain Skript School

    • Un TP
      14
    • Split / Parse
      23
    • Autre ? (précisez dans les commentaires si vous pouvez)
      0
    • Les fonctions
      14


Messages recommandés

10645d648b.png

 

 

Un titre que l'on ne comprends pas ? C'est normal, vous êtes bien sur Skript School, la série de tutoriel afin d'apprendre à programmer Skript de A à Z. Je vous recommande, voire vous demande si vous n'avez aucune connaissances en skript d'aller voir les précédents Skript School (voir plus bas).

 

Je précise juste que, Skript School est adapté et fait pour les débutants. Pour le moment, si vous êtes bons en skript vous n'apprendez sûrement rien. Néanmoins, les prochains tutoriels passeront la barre au dessus niveau difficulté.

 

LES LISTES ET LES BOUCLES

Les bases

Premièrement, voyons les listes. Dans Skript School #3 nous avons pu découvrir les variables qui permettent de stocker une valeur. Désormais nous allons nous étendre un peu plus sur le sujet et allons stocker plusieurs valeurs dans une de ces variables, qui sera une liste.

 

Une liste se déclare de la même manière qu'une variable, mais avec ::* derrière.

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

 

ok cool mais là elle est vide ta liste

Comme ton cerveau Bien sûr, je plaisante. Effectivement elle est vide, mais ça, c'est si vous le déclarez dans les Variables tout en haut. Maintenant, dans une commande ou un évènement, nous allons ajouter quelque chose - une valeur - à notre magnifique liste (qui peut être créer directement dans l'effect que nous allons voir)

 

Pour se faire, il suffit d'écrire ceci dans votre évènement ou votre commande.

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

Pour ceux qui ont encore du mal, on va faire une décomposition très simple. "add [une valeur] to [liste]" ce qui, traduit littéralement, signifie "ajouter [une valeur] à [liste]" et maintenant vous devriez comprendre.

 

Panique panique, peut-on mettre autre chose qu'une simple string (text) ?

 

Evidemment. Dans notre liste, on peut ajouter plus qu'un string. On peut ajouter une variable simple, un chiffre, le nom d'un joueur, son uuid... tout. Voici quelques exemples

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

 

Donc on peut mélanger pleins de types de variables dans une liste ?

Absolument, on peut mélanger un chiffre, un string, tout.

 

De cette manière, on peut retirer quelque chose d'une liste et la vider.

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

 

 

 

L'affichage

Il y a plusieurs moyens d'afficher une liste. Élément par élément, ou tout d'un coup. Reprenons la liste {list::*} (le précédent exemple) pou cela.

 

Le plus simple, un affichage qui marche comme toutes les variables. Par exemple :

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

Si vous avez fait cela correctement, vous obtiendrez quelque chose de la sorte (pas les mêmes valeurs si vous n'avez pas repris la liste de l'exemple, évidemment)

f4fa33e986.png

 

Et la deuxième méthode consiste à afficher éléments par éléments. Pour cela nous allons utiliser une boucle, "loop". Je vais écrire le code puis expliquer.

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

C'est très simple. Première ligne, on indique que l'on va faire une boucle pour la liste {list::*}. En quelque sorte, on dit à Skript : "Pour chaque élément de {list::*}:"

Ensuite on utilise send pour tester en utilisant loop-value. Loop-value correspond à la valeur - l'élément - de la boucle. Résumons simplement : "Pour chaque élément de {list::*}: envoyer message "élément""

 

Récupérer un élément précis

Pour cela, nous allons utiliser un index. L'index, c'est l'équivalent de loop-value, en chiffre et dans l'ordre d'ajout. Si s'ajoute "mdr", puis "lol", pour ensuite ajouter "rofl"à ma liste {uneliste;;*}, mdr aura l'index 1, lol l'index 2 et ainsi de suite.

 

Si je veux récupérer et afficher, par exemple, "lol", il me suffira de faire :

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

 

D'ailleus, on peut également loop l'index avec %loop-index%

 

Ainsi, on peut également modifier un élément précis.

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

 

Voilà, c'est tout pour ce (long) tutoriel, mais désormais les listes et vous ne font qu'un ! Si vous avez quelconque question, n'hésitez pas à me la poser, ou à venir me voir sur le Discord de Skript-MC, j'y suis très souvent.

 

Skript School #1 - Skript School #2 - Skript School #3 - Skript School #4

 

 

 

 

  • J'aime 3

Partager ce message


Lien à poster
Partager sur d’autres sites
Un bon tutoriel, pour ceux qui apprennent les bases. Cependant dans le titre tu parle de "loop" et la tu parle que de la façon de loop une liste, comptes tu faire un autre tuto sur les autres "types" de loop ?

Oui bien sûr, là j'en parle de manière brève, mais je ferai quelque chose de plus complet après :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Si on ajoute trois joueurs à une liste, le troisième seras "indexé" ( Je pense pas que ça existe mais bon.. ) dans la liste en numéro 3 {list::3}

Si on retire par la suite les deux autre joueurs, il seras toujours "indexé" en numéro 3 ou alors passera t-il au numéro 1 ?

J'espère que tu auras compris ma demande ^^

Partager ce message


Lien à poster
Partager sur d’autres sites
Si on ajoute trois joueurs à une liste, le troisième seras "indexé" ( Je pense pas que ça existe mais bon.. ) dans la liste en numéro 3 {list::3}

Si on retire par la suite les deux autre joueurs, il seras toujours "indexé" en numéro 3 ou alors passera t-il au numéro 1 ?

J'espère que tu auras compris ma demande ^^

Si tu as une liste

1. Polymeth

2. Synatiks

3. LavaPower

 

et que je retire Polymeth par exemple, l'index ne changera pas, c'est-à-dire:

2. Synatiks

3. LavaPower

Partager ce message


Lien à poster
Partager sur d’autres sites
Une question :

Mais si on ajoute Snowach

Ca fera :

1- Snowach

2- Synatiks

3- LavaPower

 

ou :

2- Synatiks

3- LavaPower

4- Snowach

 

?

La deuxième, les index c'est toujours dans l'ordre d'ajout :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut ! Merci pour ce tuto sympatique ! :)

J'ai tout de même une question, il y a t-il un moyen de tester le contenu d'une liste comme demander si la liste {red::*} contient le terme "rouge" ou faut-il forcément passer par une boucle ?

Partager ce message


Lien à poster
Partager sur d’autres sites
Salut ! Merci pour ce tuto sympatique ! :)

J'ai tout de même une question, il y a t-il un moyen de tester le contenu d'une liste comme demander si la liste {red::*} contient le terme "rouge" ou faut-il forcément passer par une boucle ?

Tu peux faire comme ça :

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

  • J'aime 1

Partager ce message


Lien à poster
Partager sur d’autres sites

La technique de @GauvainWizard marche bien, mais n'est pas au point. Car imaginons; si dans ta liste tu as :

- Blanc

- Vert

- Bleu

- Rouge

- Bleu foncé

 

Et que tu testes si la couleur bleu est présente dans la liste avec la technique de @GauvainWizard :

 

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

 

Cela va bien marcher, mais ça va aussi détecter la couleur "Bleu foncé".

 

Avant, cela, je fais un petit rappel sur la déclaration d'un liste.

 

Une liste, c'est comme une variable, elle peut contenir du texte comme des joueurs, des nombres, des items. Une liste aura son type lors de sa déclaration :

 

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

 

Après cette déclaration, ta liste aura comme type des items.

 

Contrairement à une variable, une liste ne peut être parsée, elle gardera son type pour toujours jusqu'à sa suppression. Le seul moyen de parser une liste, et d'en refaire une :

 

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

 

Pour savoir si une liste contient quelque chose, on fait ceci :

 

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

 

Mais ne pas faire ceci ! :

 

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

 

Parce que là, vous récupérer tout le contenu de votre liste sous forme de texte, et vous tester si celle-ci contient un texte elle même ! Donc la bonne chose à faire est (cas de @Oromis):

 

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

 

MAIS ! Oui, il y a un "mais" !

 

Depuis la version 2.2 Fixes de Skript, il n'est plus possible de vérifier si une liste (qui contient seulement des textes) contient un texte.

 

Donc le dernier code donné ne fonctionnera pas. Il existe donc une petite solution, qui est de vérifier si une liste ne contient PAS un texte, puis de mettre un "<else>" par la suite :

 

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

 

Donc au final, si tu voudrais tester le contenu d'un texte dans une liste, tu devras faire ceci^^ !

  • J'aime 3

Partager ce message


Lien à poster
Partager sur d’autres sites

Ouep m'enfin si t'en ras réduit à ça, autant direct passé par une boucle, mais ça, c'est mon avis.

Mais autant faire ça sans else:

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir. Pour détecter le nombre d'éléments dans une liste, comment se fait-ce ?

Style

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

 

Et là il me dit qu'in y a eu 2 éléments dans la liste. (Chez moi, il me dit qu'il y en a 1 et 1 et non 2).

Merci d'avance.

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai une question, je voudrais savoir combien de métier à un joueur, au lieu d'avoir 3 variables et devoir regarder dans chaque une d'elle si un métier est dedans, je voudrais bien un système plus optimisable.

 

Par expemple je rejoins le metier Bucheron, Mineur et je voudrais être chasseur, mais seul les "VIP" ont le droit à 3 métiers, je voudrais donc savoir combien de métier il y a dans ma listes: {jobs.%UUID of player::*}

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

Oui, ce tutoriel date :D -_-

 

Mais je suis sur un skript...

J'ai besoin d'ajouter <player> to {liste::*}

Et apres téléporté cette liste donc, teleport {liste::*} to {point.de.tp}

Et pour enlever ces joueurs delete <player> to {liste::*}

 

Conclusion:

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

 

 

Je sais pas si j'ai été claire dans ma demande, en tous cas je l'espere (avoir une réponse aussi j'espere :D)

Merci d'avoir lu, et/ou y répondre !

Partager ce message


Lien à poster
Partager sur d’autres sites
Essaie ça :

Contenu masqué

    Réagissez ou répondez à ce message afin de consulter le contenu masqué.

C'est pas vraiment ce que je demande...

Ce code est un exemple, a adapter, mais j'aimerais supprimer le {varible.%player% sans etre ce joueur, ni precisé le joueur !

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.

×
×
  • 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.