DevSkript
  • DevSkript
  • DevSkript
    • DevSkript #101 - Les Commandes
    • DevSkript #102 - Les Variables & Listes
    • DevSkript #103 - Les Loops
Propulsé par GitBook
Sur cette page
  • Tutoriel Skript - Les Loops
  • I - Qu'est ce que les loops ? A quoi servent t-ils ?
  • II - Loop des Joueurs & Entités
  • III - Loop de nombre (compteur)
  • IV - Loop d'un Inventaire
  • V - Loop d'une Liste
  • VI - Eviter certains Loop

Cet article vous a-t-il été utile ?

  1. DevSkript

DevSkript #103 - Les Loops

PrécédentDevSkript #102 - Les Variables & Listes

Dernière mise à jour il y a 5 ans

Cet article vous a-t-il été utile ?

DevSkript-#103.png

Tutoriel Skript - Les Loops

Bienvenue sur ce Tutoriel Skript vous apprenant tout sur les loops en Skript.

I - Qu'est ce que les loops ? A quoi servent t-ils ?

Les Loops sont utilisés pour faire des recherches dans une variable / liste (son contenu), pour rechercher des joueurs connectés, des items, des entités et autres.

Il existe cependant plusieurs formes de loop que nous allons voir à présent.

II - Loop des Joueurs & Entités

Sûrement le plus connu, le "loop all players", très utile pour rechercher des informations sur vos joueurs connectés par exemple.

Il peut être utilisé sous différentes formes:

loop all players: # Cherche tous les joueurs actuellement connectés
loop all players in world "Hub": # Cherche tous les joueurs actuellement dans le monde Hub (cela évite de faire des recherches sur tout votre serveur si vous souhaitez les faires dans un monde particulier)
broadcast "%loop-player%" # Annonce 1 par 1 les joueurs sortis du loop

Vous pouvez remplacer les noms de destinataire d'une action / message (c'est à dire: player) par loop-player

Maintenant pour loop des entités, c'est très simple, il suffit de faire:

loop all entities in world "world": # Détecte toutes les entités du monde world
    if loop-entity is a cow: # Détecte seulement les vaches
        add 1 to {_cow}
    if loop-entity is a sheep: # Détecte seulement les vaches
        add 1 to {_sheep}
    if loop-entity is a zombie: # Détecte seulement les vaches
        add 1 to {_zombie}
    broadcast "Il y a: %{_cow}% vaches / %{_sheep}% mouton / %{_zombie}% zombie "[

III - Loop de nombre (compteur)

Vous pouvez également utiliser les loops pour faire des décomptes ! Par exemple:

loop all integers between 10 and 0: # Décompte de 10 à 0
    # %loop-integer% correspond au nombre du décompte
    broadcast "Début dans %loop-integer% secondes !" #
    wait a second # Si vous ne mettez ceci, le décompte ne se fera pas correctement.

Vous avez également une autre forme de loop avec un chiffre qui est celui ci:

loop 10 times: # Faire 10 fois la même action
    # Votre ou vos action(s) qui se fera/ont 10 fois
    # %loop-number% pour récupérer le nombre en question

A noter qu'il n'est pas conseillé de l'utiliser pour faire un décompte !

IV - Loop d'un Inventaire

Les loops d'inventaire vous permet de trouver des items dans l'inventaire d'un joueur ou bien d'un coffre.

command /test:
    trigger:
        loop all items in player's inventory: # On regarde tout l'inventaire d'un joueur
            if loop-item is compass: # Si il a une boussole (compass)...
                send "&7Tu as une boussole" to player

Vous pouvez également grâce à ce genre de loop sauvegarder l'inventaire d'un joueur !

V - Loop d'une Liste

Les loops de liste sont très très important et vous pouvez faire beaucoup de chose avec ! En effet, vous pouvez loop toutes vos listes peut importe les éléments qu'elles contiennent ! Voici quelques exemples pour illustrer tout ça:

Imaginons que vous avez une liste qui contient des localisations (de blocs posés par exemple):

command /listeloc:
    trigger:
        loop {liste.blocs::*}:
            set {_loc} to loop-value
            set block at {_loc} to air

Maintenant, votre liste contient des joueurs (et vous voulez les faire téléporté au Hub, après une partie):

command /listeplayer:
    trigger:
        loop {uhc.joueurs::*}:
            set {_player} to loop-value
            clear {_player}'s inventory
            teleport {_player} at {hub}
            make {_player} execute command "/hub"

Et pour finir, que vous voulez sélectionner par une liste une map où la partie n'est pas encore commencé:

command /listemap:
    trigger:
        loop {uhc.map::*}:
            set {_maploop} to loop-value
            if {uhc.status.%{_maploop}%} is "Waiting":
                set {_map} to loop-value
            if {uhc.status.%{_maploop}%} is "Start":
                send "&cAucune map n'est disponible..." to player
                stop

VI - Eviter certains Loop

Les Loops ne sont pas très optimisées surtout si elles contiennent beaucoup d'éléments ou son font une recherche de tout les gens connectés..

Vous pouvez remédier par exemple à vos:

loop all players:
loop all players in world "Hub":[/CODE]
Pour ceci c'est très simple, plutôt que d'avoir un code commence ceci:
[CODE]command /annoncejoueur:
    trigger:
        loop all players: # Recherche tous les joueurs 1 par 1
            send "Message Global pour tout le Serveur" to loop-player
        loop all players in world "Hub:
            send "Message au Hub" to loop-player
        loop all players in world "FFA:
            send "Message au FFA" to loop-player

Vous avez juste à retirer les loop all... et à faire comme cela:

command /annoncejoueur:
    trigger:
        send "Message Global pour tout le Serveur" to all players # Pas de recherche de joueur 1 par 1
        send "Message au Hub" to all players in world "Hub"
        send "Message au FFA" to all players in world "FFA"

Cela vous permet d'éviter les loops et donc de rechercher les joueurs 1 par 1 et aussi d'effectuer instantanément l'action voulu. Cela diminue également vos lignes de code ^^

Le Tutoriel sur les loops est désormais terminé, n'hésitez pas à voir les autres tutoriels ^^

Cordialement,

Pour commencer, n'hésitez pas à regarde le tutoriel sur les variables & liste juste ici:

Simon

DevSkript #102 - Variable & Liste
:)