Aller au contenu
  • 0

Top X d'un variable


Question

Posté(e)

Bonjour, mon niveau en skript étant assez bas et après avoir chercher un peut partout, je m'adresse directement ici pour essayer de résoudre mon problème.
j'ai une variable "{pointvote::*}" qui liste des points propre à chaque joueurs et classée par uuid.
De cet variable j'aimerais faire un classement du type "Top 5" qui classe du plus élevé au plus bas des 5 premiers joueurs.
Cependant j'aimerais ne pas utiliser RandomSK et après mes recherches j'ai essayé avec ça, mais sans succès

Si quelqu'un si entend et a un peut de temps ça serait sympa ?
Bonne journée

  • J'aime 1

20 réponses à cette question

Messages recommandés

  • 0
Posté(e) (modifié)
Il y a 5 heures, PlayScripts a dit :

Salut. J'ai fait une fonction simple d'utilisation permettant cela. Le lien est ici.

Merci de la réponse rapide ?
J'ai essayé ta fonction, qui marche bien le problème est que ça me classe que les points et pas à qui appartiennent ses points

Modifié par ZombieZone69_
  • 0
Posté(e)

Voilà, j'ai testé sur mon serveur il marche! (Rip mon matin xD)

command /topvote:
    trigger:
        loop {pointvote::*}:
            set {_split1::*} to loop-value split at " => "
            set {_number} to {_split1::2} parsed as number
            add "%{_split1::1}%:%{_number}%" to {pointvotenumber::*}
        loop {pointvotenumber::*}:
            set {spl::*} to loop-value split at ":"
            set {spli::2} to {spl::2} parsed as number
            if {test1} exist:
                set {spl1::*} to {test1} split at ":"
                set {spli1::2} to {spl1::2} parsed as number
            if {test2} exist:
                set {spl2::*} to {test2} split at ":"
                set {spli2::2} to {spl2::2} parsed as number
            if {test3} exist: 
                set {spl3::*} to {test3} split at ":"
                set {spli3::2} to {spl3::2} parsed as number
            if {test4} exist:
                set {spl4::*} to {test4} split at ":"
                set {spli4::2} to {spl4::2} parsed as number
            if {test5} exist:
                set {spl5::*} to {test5} split at ":"
                set {spli5::2} to {spl5::2} parsed as number
            if {test1} doesn't exist:
                set {test1} to loop-value
            else if {spli::2} <= {spli1::2}:
                if {test2} exist:
                    if {spli::2} > {spli2::2}:
                        set {test5} to {test4}
                        set {test4} to {test3}
                        set {test3} to {test2}
                        set {test2} to loop-value
                    else if {test3} exist:
                        if {spli::2} > {spli3::2}:
                            set {test5} to {test4}
                            set {test4} to {test3}
                            set {test3} to loop-value
                        else if {test4} exist:
                            if {spli::2} > {spli4::2}:
                                set {test5} to {test4}
                                set {test4} to loop-value
                            else if {test5} exist:
                                if {spli::2} > {spli5::2}:
                                    set {test5} to loop-value
                            else:
                                set {test5} to loop-value
                        else:
                            set {test4} to loop-value
                    else:
                        set {test3} to loop-value
                else: 
                    set {test2} to loop-value
            else if {spli::2} > {spli1::2}:
                if {test2} exist:
                    if {test3} exist:
                        if {test4} exist:
                            set {test5} to {test4}
                            set {test4} to {test3}
                            set {test3} to {test2}
                            set {test2} to {test1}
                        else:
                            set {test4} to {test3}
                            set {test3} to {test2}
                            set {test2} to {test1}
                    else:
                        set {test3} to {test2}
                        set {test2} to {test1}
                else:
                    set {test2} to {test1}
                set {test1} to loop-value
        broadcast "Top voteurs:"
        broadcast ""
        broadcast "&c&l1er : &b&l%{test1}%"
        broadcast "&c2è : &b&l%{test2}%"
        broadcast "&c3è : &b&l%{test3}%"
        broadcast "&c4è: &b%{test4}%"
        broadcast "&c5è : &b%{test5}%"
        clear {pointvotenumber::*}
        clear {test1}
        clear {test2}
        clear {test3}
        clear {test4}
        clear {test5}

 

  • J'aime 1
  • 0
Posté(e)

ça veut dire que tes joueurs et les points ne sont pas stockés comme tu m'as dis.

 

J'ai compris: "%player% => %points%"

 

Est-ce exact ?

  • 0
Posté(e)
Il y a 21 heures, Roma a dit :

ça veut dire que tes joueurs et les points ne sont pas stockés comme tu m'as dis.

 

J'ai compris: "%player% => %points%"

 

Est-ce exact ?

Voici un exemple dans variable.cvs :
pointvote::40d72472-fabd-46e6-ac79-f38eb76e04fa, long, 0000000000000000

  • 0
Posté(e)

Si le nombre c'est le "long", Essaie cela:

 

command /topvote:
    trigger:
        loop {pointvote::*}:
            set {_split1::*} to loop-value split at ", "
            set {_split2::*} to {_split1::1} split at "::"
            set {_number} to {_split1::2} parsed as number
            add "%{_split2::2}%:%{_number}%" to {pointvotenumber::*}
        loop {pointvotenumber::*}:
            set {spl::*} to loop-value split at ":"
            set {spli::2} to {spl::2} parsed as number
            if {test1} exist:
                set {spl1::*} to {test1} split at ":"
                set {spli1::2} to {spl1::2} parsed as number
            if {test2} exist:
                set {spl2::*} to {test2} split at ":"
                set {spli2::2} to {spl2::2} parsed as number
            if {test3} exist: 
                set {spl3::*} to {test3} split at ":"
                set {spli3::2} to {spl3::2} parsed as number
            if {test4} exist:
                set {spl4::*} to {test4} split at ":"
                set {spli4::2} to {spl4::2} parsed as number
            if {test5} exist:
                set {spl5::*} to {test5} split at ":"
                set {spli5::2} to {spl5::2} parsed as number
            if {test1} doesn't exist:
                set {test1} to loop-value
            else if {spli::2} <= {spli1::2}:
                if {test2} exist:
                    if {spli::2} > {spli2::2}:
                        set {test5} to {test4}
                        set {test4} to {test3}
                        set {test3} to {test2}
                        set {test2} to loop-value
                    else if {test3} exist:
                        if {spli::2} > {spli3::2}:
                            set {test5} to {test4}
                            set {test4} to {test3}
                            set {test3} to loop-value
                        else if {test4} exist:
                            if {spli::2} > {spli4::2}:
                                set {test5} to {test4}
                                set {test4} to loop-value
                            else if {test5} exist:
                                if {spli::2} > {spli5::2}:
                                    set {test5} to loop-value
                            else:
                                set {test5} to loop-value
                        else:
                            set {test4} to loop-value
                    else:
                        set {test3} to loop-value
                else: 
                    set {test2} to loop-value
            else if {spli::2} > {spli1::2}:
                if {test2} exist:
                    if {test3} exist:
                        if {test4} exist:
                            set {test5} to {test4}
                            set {test4} to {test3}
                            set {test3} to {test2}
                            set {test2} to {test1}
                        else:
                            set {test4} to {test3}
                            set {test3} to {test2}
                            set {test2} to {test1}
                    else:
                        set {test3} to {test2}
                        set {test2} to {test1}
                else:
                    set {test2} to {test1}
                set {test1} to loop-value
        broadcast "Top voteurs:"
        broadcast ""
        broadcast "&c&l1er : &b&l%{test1}%"
        broadcast "&c2è : &b&l%{test2}%"
        broadcast "&c3è : &b&l%{test3}%"
        broadcast "&c4è: &b%{test4}%"
        broadcast "&c5è : &b%{test5}%"
        clear {pointvotenumber::*}
        clear {test1}
        clear {test2}
        clear {test3}
        clear {test4}
        clear {test5}

 

  • 0
Posté(e)
if {_votetext.3} is "1":
	set {derniervote.3.%uuid of arg player%} to now
	add 5 to {pointvote::%uuid of arg player%} ##ici par exemple
	play "ENTITY_VILLAGER_YES" to arg player at volume 0.3
	send "&aVous avez reçu &65 &apoints." to arg player

Voici un exemple de comment ça ajoute les points à la variable

  • 0
Posté(e)

Mets ça dans un skript:

 

command /testpourRoma:
    permission: *
    trigger:
        loop {pointvote::*}:
            send "%loop-value%" to sender #A ce moment là, tu me montre ce qu'a donné le message en jeu

 

  • 0
Posté(e)

Ok. Donc c'est impossible si ta variable est stocké comme ça.

 

Stocke là de la façon à se qu'il y ait le nom du joueur et ses points.

 

Bien cordialement,

  • J'aime pas 1
  • 0
Posté(e)

Si, c'est certainement possible, d'une façon ou d'une autre, mais pour le coup c'est assez chiant ce que tu demande.
Déjà que par défaut, faire un système d'ordre croissant/décroissant c'est assez "relou" (si tu veux faire ton propre code).

Je vais essayer de voir si je trouve, mais je pense pas que beaucoup de personnes cherchent à faire comme toi, de cette manière, donc si tu n'as pas de réponse de moi, c'est que je ne trouve pas. Donc good luck pour la suite de t'es recherches.

  • 0
Posté(e) (modifié)

Voici comment tu devrais faire:

if {_votetext.3} is "1":
    set {derniervote.3.%uuid of arg player%} to now
    set {_split::*} to {pointvote::%uuid of arg player%} split at ":"
    set {_n} to "%{_split::2}%" parsed as number
    add 5 to {_n} # Ici tu ajoutes le nombre que tu veux
    set {pointvote::%uuid of arg player%} to "%arg player%:%{_n}%"
    play "ENTITY_VILLAGER_YES" to arg player at volume 0.3
    send "&aVous avez reçu &65 &apoints." to arg player
    
    
#Pour faire fonctionner ça, execute cette commande
command /actionnerlesys:
    permission: op
    trigger:
        loop {poinvote::*}:
            set {_l} to loop-value
            remove loop-value from {_poinvote::*}
            set {_l2} to "PSEUDO:%{_l}%"
            add {_l2} to {_poinvote::*}

Et donc utilise ça pour que ça marche ?

command /topvote:
    trigger:
        loop {pointvote::*}:
            set {_split1::*} to loop-value split at ":"
            set {_number} to {_split1::2} parsed as number
            add "%{_split1::1}%:%{_number}%" to {pointvotenumber::*}
        loop {pointvotenumber::*}:
            set {spl::*} to loop-value split at ":"
            set {spli::2} to {spl::2} parsed as number
            if {test1} exist:
                set {spl1::*} to {test1} split at ":"
                set {spli1::2} to {spl1::2} parsed as number
            if {test2} exist:
                set {spl2::*} to {test2} split at ":"
                set {spli2::2} to {spl2::2} parsed as number
            if {test3} exist: 
                set {spl3::*} to {test3} split at ":"
                set {spli3::2} to {spl3::2} parsed as number
            if {test4} exist:
                set {spl4::*} to {test4} split at ":"
                set {spli4::2} to {spl4::2} parsed as number
            if {test5} exist:
                set {spl5::*} to {test5} split at ":"
                set {spli5::2} to {spl5::2} parsed as number
            if {test1} doesn't exist:
                set {test1} to loop-value
            else if {spli::2} <= {spli1::2}:
                if {test2} exist:
                    if {spli::2} > {spli2::2}:
                        set {test5} to {test4}
                        set {test4} to {test3}
                        set {test3} to {test2}
                        set {test2} to loop-value
                    else if {test3} exist:
                        if {spli::2} > {spli3::2}:
                            set {test5} to {test4}
                            set {test4} to {test3}
                            set {test3} to loop-value
                        else if {test4} exist:
                            if {spli::2} > {spli4::2}:
                                set {test5} to {test4}
                                set {test4} to loop-value
                            else if {test5} exist:
                                if {spli::2} > {spli5::2}:
                                    set {test5} to loop-value
                            else:
                                set {test5} to loop-value
                        else:
                            set {test4} to loop-value
                    else:
                        set {test3} to loop-value
                else: 
                    set {test2} to loop-value
            else if {spli::2} > {spli1::2}:
                if {test2} exist:
                    if {test3} exist:
                        if {test4} exist:
                            set {test5} to {test4}
                            set {test4} to {test3}
                            set {test3} to {test2}
                            set {test2} to {test1}
                        else:
                            set {test4} to {test3}
                            set {test3} to {test2}
                            set {test2} to {test1}
                    else:
                        set {test3} to {test2}
                        set {test2} to {test1}
                else:
                    set {test2} to {test1}
                set {test1} to loop-value
        broadcast "Top voteurs:"
        broadcast ""
        broadcast "&c&l1er : &b&l%{test1}%"
        broadcast "&c2è : &b&l%{test2}%"
        broadcast "&c3è : &b&l%{test3}%"
        broadcast "&c4è: &b%{test4}%"
        broadcast "&c5è : &b%{test5}%"
        clear {pointvotenumber::*}
        clear {test1}
        clear {test2}
        clear {test3}
        clear {test4}
        clear {test5}

 

Modifié par Roma
Erreurs dans le code
  • J'aime 1
  • Humm 1
  • 0
Posté(e)

Bonsoir,

un peu d'optimisation pour les yeux ?

command /topvote:
	trigger:
		send "&aRécupération des données en cours..."
		loop {pointvote::*}:
			set {_temp::%loop-index%} to loop-value
		while amount of {_top::*} < 5:
			set {_min} to 0
			clear {_add::*}
			loop {_temp::*}:
				if loop-value > {_min}:
					clear {_add::*}
					add loop-index to {_add::*}
					set {_min} to loop-value
				else if loop-value = {_min}:
					add loop-index to {_add::*}
					set {_min} to loop-value
			loop {_add::*}:
				if amount of {_top::*} < 5:
					delete {_temp::%loop-value%}
					add loop-value to {_top::*}
			wait 1 tick
		send ""
		send "&b&n Classement Votes "	
		send ""
		loop {_top::*}:
			send "&a%loop-index%. &9%player from uuid loop-value% &f- &9%{pointvote::%loop-value%}%"
		send ""	

 

  • J'aime 1
  • 0
Posté(e)

Merci de votre aide, et c'est la solution de @Rush2Fer qui fonctionne à merveille le seul petit soucis est que le

%player from uuid loop-value%

ne permet pas d'afficher les joueurs hors-ligne du coup je me suis permis je rajouter un petit détail pour combler la chose.

command /topvote:
	trigger:
		send "&aRécupération des données en cours..."
		loop {pointvote::*}:
			set {_temp::%loop-index%} to loop-value
		while amount of {_top::*} < 5:
			set {_min} to 0
			clear {_add::*}
			loop {_temp::*}:
				if loop-value > {_min}:
					clear {_add::*}
					add loop-index to {_add::*}
					set {_min} to loop-value
				else if loop-value = {_min}:
					add loop-index to {_add::*}
					set {_min} to loop-value
			loop {_add::*}:
				if amount of {_top::*} < 5:
					delete {_temp::%loop-value%}
					add loop-value to {_top::*}
			wait 1 tick
		send ""
		send "&b&n Classement Votes "	
		send ""
		loop {_top::*}:
			set {_pseudo.%loop-value%} to loop-value parsed as offline player #juste ici
			send "&a%loop-index%. &9%{_pseudo.%loop-value%}% &f- &9%{pointvote::%loop-value%}%"
		send ""

En tout cas merci du coup de pouce à tous c'est sympa ?

  • J'aime 1
Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.