Je me demandais bien ce que j'allais trouver de marrant à faire avec une des nouvelles commandes.
En utilisant /time query gametime, on peut maintenant connaitre le temps écoulé depuis la création d'une map. Grâce à cette nouvelle commande, je vais vous montrer comment faire un système pour donner le nombre de minutes depuis lequel un joueur ne s'est pas connecté (ce qui permet donc, de savoir sa dernière heure de connexion). Attention cependant : Ce type de système est surtout réservé aux petits serveurs, sachant qu'à une étape il faudra quelques command blocks par joueur sur le serveur.
Nous allons commencé par utiliser la commande en question dans un command block, qui sera alimenté en permanence par une clock (hopper clock fait l'affaire) :
Il faut maintenant qu'on puisse extraire le résultat de ce command block (le temps depuis la création de la map) dans un score, pour pouvoir en faire un peu ce qu'on veut. Pour ça, créez un score (qui s'appellera dans mon tutoriel derniereCo) :
Puis, initialisez la variable pour chaque joueur pour qui on veut connaitre l'heure de dernière connexion :
Ensuite, placez vous au dessus du command block, puis tapez :
Voilà. Maintenant le score derniereCo de tous les joueurs connectés sur le serveur va s'actualiser en continu. Dès qu'un joueur quittera le serveur, son score va se bloquer sur une valeur précise. Vous commencez à voir où je veux en venir? Le problème par contre, c'est que cette valeur correspond à des ticks, et nous, on veut savoir en nombre de minutes. Une petite conversion s'impose.
Pour ça, on va créer une valeur constante dans un scoreboard, puis diviser derniereCo par cette valeur. Cette valeur, ce sera 1200. Car 1200 gameticks = 1 minutes dans la vie réelle. Mais un problème se pose encore : Un score est attribué forcément à quelqu'un, à qui attribuer la constante? Je vous propose de créer un faux joueur :
Mignon son pseudo vous ne trouvez pas?... Bref. Maintenant, passons à la division d'un score par un autre : dans un deuxième command block, collé au premier, tapez :
Et vous voilà avec un nombre de minutes dans le score de chaque joueur maintenant!
Mais nous, ce qu'on veut, c'est faire la différence entre le score d'un joueur connecté (qui a son score qui augmente en permanence) et d'un joueur non connecté (qui a un score qui n'augmente plus depuis qu'il s'est déconnecté), puis afficher ça pour un joueur qui l'aura demandé via une commande... Une idée?
Il va falloir passer par un objectif trigger. La commande trigger permet à n'importe quel joueur (administrateur ou pas) d'éditer la valeur un d'un score, si on lui donne l'autorisation. C'est un très bon moyen de créer des commandes pour les joueurs (comme je l'ai présenté dans un autre tutoriel... Hem). Malheureusement pour nous ici, il va falloir créer un scoreboard trigger pour chaque joueur dont on veut savoir la dernière connexion.
Répétez l'opération pour tous les joueurs du serveur, puis utilisez l'autre partie de la clock (un comparateur sur l'autre hopper) pour mettre à jour autant de command blocks que vous avez de joueurs, et dans chacun de ces command block, insérez ça avec le nom du Joueur associé :
Ce command block fait la soustraction du score d'un joueur qui veut savoir le nombre de minutes par celui d'un autre joueur.
Il va également vous falloir actualiser des command blocks avec ça :
Toujours en remplaçant Joueur par un des noms de joueurs du serveur à chaque fois. En fait, si on ne fait pas ça, trigger ne va marcher qu'une fois, il faut actualiser cette commande constamment pour qu'elle permette d'utiliser trigger à nouveau.
Pour chaque command blocks qui fait la soustraction, vous allez placer un comparateur en sortie. Dès qu'un joueur fera la commande "/trigger Joueur set 1", le comparateur du command block avec le nom du Joueur correspondant s'allumera.
Vous avez maintenant permis aux joueurs de choisir le joueur dont ils veulent savoir la dernière connexion. Il ne reste plus qu'à envoyer le résultat de toutes ces opérations aux joueurs qui voudront savoir. Derrière le comparateur, entrez :
Et voilà. Le système est fini. Ou presque. En effet, si vous laissez ça comme ça, le score du joueur qui voudra savoir restera à 1, ce qui fait que le comparateur va rester allumé et personne ne pourra se reservir de cette commande. Il suffit de reset son score à 0, et le tour est joué. Collez un dernier command block au précédent, avec la commande :
Voilà. Ce système est plutôt long à mettre en place, mais moi je trouve ça fun (et puis moi quand je peux me passer des plugins...).^^ En espérant que tout ce texte ne vous aura pas découragé! Si vous le souhaitez, vous pouvez l'améliorer pour afficher les heures voir même les jours, ça ne devrait pas être très difficile.
En utilisant /time query gametime, on peut maintenant connaitre le temps écoulé depuis la création d'une map. Grâce à cette nouvelle commande, je vais vous montrer comment faire un système pour donner le nombre de minutes depuis lequel un joueur ne s'est pas connecté (ce qui permet donc, de savoir sa dernière heure de connexion). Attention cependant : Ce type de système est surtout réservé aux petits serveurs, sachant qu'à une étape il faudra quelques command blocks par joueur sur le serveur.
Nous allons commencé par utiliser la commande en question dans un command block, qui sera alimenté en permanence par une clock (hopper clock fait l'affaire) :
Code:
/time query gametime
Code:
/scoreboard objectives add derniereCo dummy
Code:
/scoreboard players set [nomdujoueur] derniereCo 0
Code:
/stats block ~ ~-1 ~ set QueryResult @a derniereCo
Pour ça, on va créer une valeur constante dans un scoreboard, puis diviser derniereCo par cette valeur. Cette valeur, ce sera 1200. Car 1200 gameticks = 1 minutes dans la vie réelle. Mais un problème se pose encore : Un score est attribué forcément à quelqu'un, à qui attribuer la constante? Je vous propose de créer un faux joueur :
Code:
/scoreboard players set ticksEnMinutes derniereCo 1200
Code:
/scoreboard players operation @a derniereCo /= ticksEnMinute derniereCo
Mais nous, ce qu'on veut, c'est faire la différence entre le score d'un joueur connecté (qui a son score qui augmente en permanence) et d'un joueur non connecté (qui a un score qui n'augmente plus depuis qu'il s'est déconnecté), puis afficher ça pour un joueur qui l'aura demandé via une commande... Une idée?
Il va falloir passer par un objectif trigger. La commande trigger permet à n'importe quel joueur (administrateur ou pas) d'éditer la valeur un d'un score, si on lui donne l'autorisation. C'est un très bon moyen de créer des commandes pour les joueurs (comme je l'ai présenté dans un autre tutoriel... Hem). Malheureusement pour nous ici, il va falloir créer un scoreboard trigger pour chaque joueur dont on veut savoir la dernière connexion.
Code:
/scoreboard objectives add Joueur trigger
Code:
/scoreboard players operation @a[score_Joueur=1,score_Joueur_min=1] derniereCo -= Joueur derniereCo
Il va également vous falloir actualiser des command blocks avec ça :
Code:
/scoreboard players enable @a Joueur
Pour chaque command blocks qui fait la soustraction, vous allez placer un comparateur en sortie. Dès qu'un joueur fera la commande "/trigger Joueur set 1", le comparateur du command block avec le nom du Joueur correspondant s'allumera.
Vous avez maintenant permis aux joueurs de choisir le joueur dont ils veulent savoir la dernière connexion. Il ne reste plus qu'à envoyer le résultat de toutes ces opérations aux joueurs qui voudront savoir. Derrière le comparateur, entrez :
Code:
/tellraw @p[score_Joueur=1,score_Joueur_min=1] {score:{name:"@p[score_Joueur=1,score_Joueur_min=1]", objective:"derniereCo"},extra:[{text:" minutes."}]}
Code:
/scoreboard players set @a Joueur 0
Voilà. Ce système est plutôt long à mettre en place, mais moi je trouve ça fun (et puis moi quand je peux me passer des plugins...).^^ En espérant que tout ce texte ne vous aura pas découragé! Si vous le souhaitez, vous pouvez l'améliorer pour afficher les heures voir même les jours, ça ne devrait pas être très difficile.