CommandBlock /say (le gagnant)

cookaiz

Bucheron
17 Décembre 2019
8
0
11
20
bonjour je suis actuellement occuper de faire une map, et le score est afficher sur un scoreboard et- dans votre barre d'xp mais en fin de partie j'aimerait que sa fasse un /say (le joueur qui a le plus d'xp) j'ai cherché partout sur youtube rien de concluent, un peu d'aide ne serait pas de refus
 

Eglaios

Crétin de la commu
14 Avril 2018
310
42
89
25
J'assume que tu es en 1.14. La prochaine fois, indique ta version de jeu...

Donc "Le score est affiché dans un scoreboard et dans la barre d'xp"? Du coup, la barre d'xp représente l'objectif? Tu penses bien que ça serait plus simple de comparer les scores des joueurs plutôt que leurs barres d'XP...

Tu as l'air plutôt novice avec les commandes, je te mets des explications des commandes...
Petit détail : pour les commandblockers avec un minimum d'expérience, le /say est totalement inutile et est même craint : Le /tellraw permet non seulement d'afficher du texte en couleur, mais en plus d'afficher des données de jeu
(Bon, on peut mettre de la couleur dans le /say, mais c'est d'un niveau encore plus haut que tous les aspects du /tellraw)


J'ai deux bonnes nouvelles pour toi : La première, c'est que tout ce que tu demandes est possible; La deuxième, c'est que c'est faisable en seulement deux commandes (ou trois si tu tiens à comparer le XP) :
-À noter que ton score de xp est représenté par #Objectif# dans toutes les commandes (2 fois dans la première, 2 dans la deuxième et 1 dans la troisième). Tu dois les remplacer par le nom de ton score sans quoi ça ne marchera pas.

1.
Code:
/execute at @a as @a if score @s #Objectif# < @p total_xp run scoreboard players set @s #Objectif# 0
Effet : Pour chaque joueur, si d'autres joueurs ont un score d'#Objectif# plus petit que lui, leur score #Objectif# est remis à zéro.
Seul le joueur ayant le plus haut score #Objectif# le gardera, puisqu'il n'y aura eu aucun joueur avec plus que lui pour le lui remettre à zéro.


2.
Code:
/tellraw @a [{"text":"La manche a été remportée par ","color":"green"},{"selector":"@a[scores={#Objectif#=1..}]","color":"gold","bold":"true"},{"text":" avec un score de ","color":"green","bold":"false"},{"score":{"name":"@p[scores={#Objectif#=1..}]","objective":"total_xp"},"color":"gold"},{"text":" points!","color":"green"}]
Cette deuxième commande affiche ceci :
"La manche a été remportée par [Joueurs avec un score #Objectif# plus grand que 1] avec un score de [Score #Objectif# du joueur le plus proche avec un score #Objectif# plus grand que 1]"
-Le(s) joueur(s) affichés sont sélectionnés avec ceci : "@a[scores={#Objectif#=1..}]". Vu que les joueurs aux scores inférieurs ont été remis a zéro, seuls les gagnants on leur score plus grand que zéro. À noter que si des joueurs gagnent ex-aequo, leurs noms s'afficheront comme suit :"[Nom1],[Nom2]".

-Pour cette raison, il est important que la phrase fonctionne au pluriel comme au singulier (hé hé, bien pensé, hein?)

-Le score affiché correspond à celui du joueur ciblé avec ceci : "@p[scores={#Objectif#=1..}]". S'il y a un ex aequo, un seul score sera sélectionné (Si j'avais mis @a, ça afficherait "[ScoreDuGagnant1],[ScoreDuGagnant2]", qui sont identiques)

3. Si jamais tu veux stocker le nombre de niveaux d'xp de chaque joueur dans leur score (qui sera pris en compte par les deux autres commandes), tu n'as qu'à exécuter cette commande avant les deux autres :
Code:
/execute as @a store result score @s #Objectif# run xp query @s levels
Elle cherche simplement le nombre de niveaux de xp de chaque joueur et le copie dans le score #Objectif#
 

cookaiz

Bucheron
17 Décembre 2019
8
0
11
20
Si tu pouvais venir quand tu as un peu de temps libre voici l'ip(ironique comme ip je sais): mapmakingpro.aternos.me
 

Eglaios

Crétin de la commu
14 Avril 2018
310
42
89
25
Pas d'objectif précis?
C'est un plugin?

Euh... pour le serveur... J'ai pas de premium, alors je peux pas me connecter:(