Bonjour à tous :D
Aujourd'hui je vous propose un petit tutoriel de compte à rebours pour vos serveurs.
Ce compte à rebours est surtout destiné aux mini-jeux que vous souhaitez faire. Ce tuto vous servira à faire par exemple un compte à rebours qui peut s'interrompre si un joueur se déco durant le décompte.
(Note: j'ai fait ce code pour un mini jeu mais je n'ai gardé que la partie décompte. Pour un jeu du type uhc, plusieurs ajouts s'imposent :))
Nous allons voir comment faire ceci pas à pas ^^'
Tout d'abord, lorsque le joueur rejoint l'uhc on veut l'ajouter dans la liste avec tous les autres joueurs présents
options:
uhclogo: &9[&2UhcRun&9] #Ici c'est une variable crée pour pas avoir à placer 50 fois le [uhcRun] mais inutile ici ^^
on join:
add player to {uhc.players::*}
broadcast "{@uhclogo} &a%player% a rejoint la partie &b(%size of {uhc.players::*}%/20)"
#Quand le joueur rejoint, il est ajouté dans la liste et un message est envoyé avec le nombre de joueurs.
#%size of {uhc.players::*}% détecte le nombre d'éléments dans la liste (en l’occurrence, ici c'est des joueurs)
Ensuite, on veut lancer le compte à rebours lorsqu'il y a 8 joueurs ou plus. Pour cela on utilise encore le type %size of {uhc.players::*}% mais pour une condition cette fois ^^
if size of {uhc.players::*} = 8:
set {_time} to 60
broadcast "{@uhclogo} &eCommencement de la partie dans &a%{_time}% &esecondes.
#S'il y a 8 joueurs ou plus de connectés, on lance alors le décompte.
On définit une variable (locale pour éviter les problèmes) sur une valeur de 60. (pour une minute, à vous de mettre plus si vous voulez un décompte plus long ^^)
Mais cela ne s'arrête pas ici ! Et il ne suffit pas de mettre des messages à la suite avec le 20/15/10/5 secondes.
Car on veut qu'il y ait obligatoirement 8 joueurs ou plus pour commencer la partie. Si quelqu'un déco, le décompte doit s'interrompre et devra reprendre à 60 secondes lorsqu'il y en aura assez.
while size of {uhc.players::*} >= 8:
remove 1 from {_time}
wait 1 second
if {_time} = 30 or 20 or 15 or 10 or 5 or 4 or 3 or 2:
broadcast "{@uhclogo} &eCommencement de la partie dans &a%{_time}% &esecondes."
else if {_time} = 1:
broadcast "{@uhclogo} &eCommencement de la partie dans &a%{_time}% &eseconde."
else if {_time} = 0:
broadcast "{@uhclogo} &eLancement de la partie..."
stop
else:
wait 0 tick
Avec ce bout de code, on va vérifier en permanence à l'aide d'une boucle while si le nombre de joueurs est de 8 ou plus. Si effectivement, il y a plus de 8 joueurs, nous allons retirer 1 "point" de la variable (donc de 60 on passe à 50) et ce à 1 seconde d'intervalle toujours ! (ceci nous fait notre chrono).
Mais on veut aussi executer certaines actions lorsqu'il reste x secondes. pour cela il faut à l'aide de la boucle vérifier à chaque seconde écoulée si on arrive à 30/20/15 ou 10 secondes restantes.
le " if {_time} = 30 or 20 or 15 or 10 or 5 or 4 or 3 or 2: " sert à regarder justement combien de secondesi l reste dans le décompte !
A ce moment là, on pourra envoyer un message précisant combien de secondes il reste en analysant le nombre de "points" dans la variable à l'aide une fois de plus de %{_time}%
Et enfin, lorsque la variable est arrivée à 0 c'est le top départ :D.
pour les 2 dernières lignes, cela sert juste à relancer la boucle (tant évidemment qu'il y aura toujours 8 joueurs) depuis le haut quand le nombre de seconde qu'il reste n'est pas égal à 30/20/10 et les autres.
Il est possible que certaines de mes explications ne soient pas claires. Je vais vous mettre le code en entier et préciser chaque ligne :D
options:
uhclogo: &9[&2UhcRun&9]
on join:
add player to {uhc.players::*}
broadcast "{@uhclogo} &a%player% a rejoint la partie &b(%size of {uhc.players::*}%/20)"
if size of {uhc.players::*} = 8:
set {_time} to 60
broadcast "{@uhclogo} &eCommencement de la partie dans &a%{_time}% &esecondes."
while size of {uhc.players::*} >= 8:
remove 1 from {_time}
wait 1 second
if {_time} = 30 or 20 or 10 or 5 or 4 or 3 or 2:
broadcast "{@uhclogo} &eCommencement de la partie dans &a%{_time}% &esecondes."
else if {_time} = 1:
broadcast "{@uhclogo} &eCommencement de la partie dans &a%{_time}% &eseconde."
else if {_time} = 0:
broadcast "{@uhclogo} &eLancement de la partie..."
stop
else:
wait 0 tick
#Quand le joueur rejoint le serveur...
#...on l'ajoute à la liste des joueurs...
#...et on lance un message de join avec le nombre de joueurs connectés en analysant le nombres d'éléments dans la liste
#Si le nombre de joueurs présents dans la liste est superieur ou égal à 8...
#...on crée une variable qui sera notre décompte et on lui donne l'équivalent d'une minute...
#...et on lance un message pour prévenir le début du décompte !
#Maintenant on va en permanence vérifier s'il y a 8 joueurs ou plus grâce à la liste. si c'est le cas alors...
#...on enlève "1" de la variable {_time} (pour notre décompte)
#Pour éviter un décompte trop rapide, on rajoute un délai de 1 seconde entre chaque retrait de la variable (et ainsi faire un décompte toute les secondes (classique quoi :D))
#Désormais, on va vérifier après un certain nombre de retrais de la variable (1 retrait équivaut à une seconde d'écoulée) on vérifie à combien est la variable et donc combien de secondes reste-t-il. S'il reste 30/20/10/5/4/3 ou 2 secondes...
#...on envoie un message prévenant précisément le nombre de secondes qu'il reste en "lisant la variable"
#S'il ne reste par contre qu'une seconde...
#...on envoie le même message mais cette fois au singulier et non pluriel (l'orthographe :):):))
#Si maintenant il n'y a plus de secondes (donc si on est à 0)...
#...On lance la partie :D...
#...et on arrête le skript pour éviter que la boucle tourne inutilement (car elle continuera de tourner tant qu'il y aura plus de 8 joueurs rappelez vous !)
#mais par contre si le nombre de secondes restantes est supérieur à 5 mais n'est pas multiple de 10...
#...on met un délai nul pour relancer la boucle et ainsi continuer le chrono en toute sérénité :)
Nous sommes déjà rendus à la fin de ce tutoriel ! Merci à vous d'avoir pris le temps de le lire.
S'il vous à plu n'hésitez pas à mettre un like ou à me le dire en message. S'il y a des choses qui ne sont pas assez claires et/ou mal expliquées et/ou que vous ne comprenez pas, faites le moi savoir et j'essayerais de rendre une partie plus compréhensible :)
Sachez aussi que je prend toute critique constructive afin que je puisse progresser encore et encore :)
A très bientôt <3