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: