Aller au contenu
  • 0

Loop-player Problème de récupération variables


Question

Posté(e)

Bonjour,

 

Je vous demande votre aide suite à un problème sur une partie du code de mon menu GUI.

 

            loop all players:
               if loop-player has permission "user.admin":
                   set {rang} to "&6&oAdmin"
               else if loop-player has permission "user.staff":
                   set {rang} to "&e&oStaff"
               else if loop-player has permission "user.VIP":
                   set {rang} to "&2&oVIP"
               else if loop-player has permission "user.Joueurplus":
                   set {rang} to "&3&oJoueur+"
               else if loop-player has permission "user.Joueur":
                   set {rang} to "&b&oJoueur"
               format slot {_slot} of player with loop-player's skull named "&9&l%loop-player%" with lore "%{rang}%" to run [make player execute "/a %loop-player%"]
               add 1 to {_slot}

 

En gros cette partie du code me permet d'afficher la tête de tous les joueurs présent sur mon serveur tout en précisant leurs rangs. Cette partie fonctionne très bien.

Mais ce que je veux c'est que quand on click sur une tête ça renvoie sur le menu d'administration (si le joueur à la perm mais j'ai pas encore mis la condition) correspondant, or la commande "/a %loop-player%" ne renvoie pas sur la page du joueur de la tête mais, à priori, sur le dernier qui a été "loop".

Dois-je faire une liste ou je passe totalement a coté d'un truc évident ?

 

Merci par avance pour vos réponses.

13 réponses à cette question

Messages recommandés

  • 0
Posté(e)

Tout d'abord merci pour ta réponse.

Mais malheureusement ça ne corrige pas le problème, pour cibler un peu plus l'erreur, ça m'ouvre le menu administration du dernier joueur à s'être connecté. Un loop-player regarde les joueurs dans l'ordre de connexion ?

Ce qu'il semblerait c'est qu'il m'ouvre tout simplement le dernier joueur observé dans la boucle mais je ne vois pas trop comment faire en sorte qu'il ouvre le menu du joueur correspondant au bon slot.

  • 0
Posté(e)

command /menu [<text>]:
   aliases: m
   permission: user.Joueurplus
   permission message: {@phoera} Vous n'avez pas la permission !
   trigger:

       if arg 1 is not set:
           wait 2 tick
           open chest with 1 rows named "&7✪ &8&lMenu" to player
           wait 1 tick
           set {_slot} to 0

           loop all players:
               format slot 1 of player with head:3 named "&6%number of all players% &7joueurs" with lore "&7connectés" to run [make player execute "/m player"]

       else if arg 1 is "player":
           open chest with 2 rows named "&7✪ &8&l%number of all players% joueurs en ligne" to player
           wait 1 tick
           set {_slot} to 0

           loop all players:
               if loop-player has permission "user.admin":
                   set {rang} to "&6&oAdmin"
               else if loop-player has permission "user.staff":
                   set {rang} to "&e&oStaff"
               else if loop-player has permission "user.VIP":
                   set {rang} to "&2&oVIP"
               else if loop-player has permission "user.Joueurplus":
                   set {rang} to "&3&oJoueur+"
               else if loop-player has permission "user.Joueur":
                   set {rang} to "&b&oJoueur"
               format slot {_slot} of player with loop-player's skull named "&9&l%loop-player%" with lore "%{rang}%" to run [make player execute "/a %loop-player%"]
               add 1 to {_slot}

 

command /administration [<player>]:
   aliases: admin, a
   permission: moderation.staff
   permission message: {@phoera} Vous n'avez pas la permission !
   trigger:

       wait 2 ticks
       if arg 1 has permission "user.admin":
           set {rang} to "&6&oAdmin"
       else if arg 1 has permission "user.staff":
           set {rang} to "&e&oStaff"
       else if arg 1 has permission "user.VIP":
           set {rang} to "&2&oVIP"
       else if arg 1 has permission "user.Joueurplus":
           set {rang} to "&3&oJoueur+"
       else if arg 1 has permission "user.Joueur":
           set {rang} to "&b&oJoueur"

       if arg 1 is not set:
           wait 2 ticks
           send "{@phoera} &6Commande incomplète: &7&o/a <Joueur>"
       if arg 1 is set:
           if arg 1 is "reload":
               send "{@phoera} reload ok"
           else:
               wait 2 tick
               open chest with 3 rows named "&7✪ &8&lAdministration" to player
               wait 2 tick
               format slot 1 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 2 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 3 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 4 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 5 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 6 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 7 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 8 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 9 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 17 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 18 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 19 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 20 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 21 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 22 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 23 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 24 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 25 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 26 of player with 1 gray stained glass pane named "&8" to be unstealable
               format slot 0 of player with arg 1's skull named "&9&l%arg 1%" with lore "%{rang}%" to run [make player execute "/a %arg 1%"]


               if arg 1 has permission "moderation.promoteStaff":
                   If player has permission "moderation.dieu":
                       format slot 11 of player with 1 iron ingot named "&b&lJoueur" with lore "&7&o||&7&oDonne le rang||&7&o<Joueur> au joueur||&7&o||&7&o||&7&o" to run "pex user %arg 1% group set Joueur"
                       format slot 12 of player with 1 gold ingot named "&3&lJoueur+" with lore "&7&o||&7&oDonne le rang||&7&o<Joueur+> au joueur||&7&o||&7&o||&7&o" to run "pex user %arg 1% group set Joueur+"
                       format slot 13 of player with 1 emerald named "&2&lVIP" with lore "&7&o||&7&oDonne le rang||&7&o<VIP> au joueur||&7&o||&7&o||&7&o" to run "pex user %arg 1% group set VIP"
                       format slot 14 of player with 1 diamond named "&e&lStaff" with lore "&7&o||&7&oDonne le rang||&7&o<Staff> au joueur||&7&o||&7&o||&7&o" to run "pex user %arg 1% group set Staff"
                       format slot 15 of player with 1 nether star named "&6&lAdmin" with lore "&7&o||&7&oDonne le rang||&7&o<Admin> au joueur||&7&o||&7&o||&7&o" to run "pex user %arg 1% group set Admin"
                   else:
                       format slot 11 of player with 1 bone named "&b&lJoueur" with lore "&7&o||&7&oVous n'avez pas||&7&ola permission de||&7&ochanger le rang||&7&od'un admin||&7&o" to be unstealable
                       format slot 12 of player with 1 bone named "&3&lJoueur+" with lore "&7&o||&7&oVous n'avez pas||&7&ola permission de||&7&ochanger le rang||&7&od'un admin||&7&o" to be unstealable
                       format slot 13 of player with 1 bone named "&2&lVIP" with lore "&7&o||&7&oVous n'avez pas||&7&ola permission de||&7&ochanger le rang||&7&od'un admin||&7&o" to be unstealable
                       format slot 14 of player with 1 bone named "&e&lStaff" with lore "&7&o||&7&oVous n'avez pas||&7&ola permission de||&7&ochanger le rang||&7&od'un admin||&7&o" to be unstealable
                       format slot 15 of player with 1 bone named "&6&lAdmin" with lore "&7&o||&7&oVous n'avez pas||&7&ola permission de||&7&ochanger le rang||&7&od'un admin||&7&o" to be unstealable
               else:
                   format slot 11 of player with 1 iron ingot named "&b&lJoueur" with lore "&7&o||&7&oDonne le rang||&7&o<Joueur> au joueur||&7&o||&7&o||&7&o" to run "pex user %arg 1% group set Joueur"
                   format slot 12 of player with 1 gold ingot named "&3&lJoueur+" with lore "&7&o||&7&oDonne le rang||&7&o<Joueur+> au joueur||&7&o||&7&o||&7&o" to run "pex user %arg 1% group set Joueur+"
                   format slot 13 of player with 1 emerald named "&2&lVIP" with lore "&7&o||&7&oDonne le rang||&7&o<VIP> au joueur||&7&o||&7&o||&7&o" to run "pex user %arg 1% group set VIP"
                   If player has permission "moderation.dieu":   
                       format slot 14 of player with 1 diamond named "&e&lStaff" with lore "&7&o||&7&oDonne le rang||&7&o<Staff> au joueur||&7&o||&7&o||&7&o" to run "pex user %arg 1% group set Staff"
                       format slot 15 of player with 1 nether star named "&6&lAdmin" with lore "&7&o||&7&oDonne le rang||&7&o<Admin> au joueur||&7&o||&7&o||&7&o" to run "pex user %arg 1% group set Admin"
                   else:
                       format slot 14 of player with 1 diamond named "&e&lStaff" with lore "&7&o||&7&oVous n'avez pas||&7&ola permission||&7&o||&7&o||&7&o" to be unstealable
                       format slot 15 of player with 1 nether star named "&6&lAdmin" with lore "&7&o||&7&oVous n'avez pas||&7&ola permission||&7&o||&7&o||&7&o" to be unstealable

  • 0
Posté(e)
ommand /menu [<text>]:
   aliases: m
   permission: user.Joueurplus
   permission message: {@phoera} Vous n'avez pas la permission !
   trigger:
       if arg 1 is not set:
           wait 2 tick
           open chest with 1 rows named "&7✪ &8&lMenu" to player
           wait 1 tick
           loop all players:
               set {_slot} to 0
                   format slot 1 of player with head:3 named "&6%number of all players% &7joueurs" with lore "&7connectés" to run [make player execute "/m player"]
           else if arg 1 is "player":
               open chest with 2 rows named "&7✪ &8&l%number of all players% joueurs en ligne" to player
               wait 1 tick
               loop all players:
                   set {_slot} to 0
                       if loop-player has permission "user.admin":
                       set {rang} to "&6&oAdmin"
                   else if loop-player has permission "user.staff":
                       set {rang} to "&e&oStaff"
                   else if loop-player has permission "user.VIP":
                   set {rang} to "&2&oVIP"
                   else if loop-player has permission "user.Joueurplus":
                   set {rang} to "&3&oJoueur+"
                   else if loop-player has permission "user.Joueur":
                   set {rang} to "&b&oJoueur"
                   format slot {_slot} of player with loop-player's skull named "&9&l%loop-player%" with lore "%{rang}%" to run [make player execute "/a %loop-player%"]
                   add 1 to {_slot}

  • 0
Posté(e)

Salut,

 

Dans ton code, il y a genre :

set {rang} to "&2&oVIP"

Remplace par

set {rang.%loop-player%} to "&2&oVIP"

Et donc faut changer en

format slot {_slot} of player with loop-player's skull named "&9&l%loop-player%" with lore "%{rang.loop-player}%" to run [make player execute "/a %loop-player%"]

 

Voila, en espérant que ca fonctionne :)

 

Cordialement mister_max34

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

Bonsoir,

Désolé pour mon temps de réaction, je ne pouvais pas test plus tôt ^^

 

Ça ne fonctionne pas plus par contre j'aimerais bien que tu m'explique la logique si tu veux bien.

Je pense que je vais "simplement" créer une liste et il me suffira de comparer le slot cliqué avec la liste, si c'est le slot un cliqué alors c'est le premier pseudo de la liste etc... J'ai plus qu'à trouver comment faire ça x)

Et au pire je ferais ça en mode barbare, 20 lignes avec une ligne par tête, ça sera très moche et ne fonctionnera pas si nous sommes plus de 20 sur le serveur mais ça fera le boulot en attendant l'illumination :s

  • 0
Posté(e)

Le problème est que le loop-player garde en mémoire le dernier joueur qu'il a Loop, mais je crois que c'est un bug avec les lambas, je vais vérifier avec Most Fun Guy il me semble qu'on avait déjà discuté de ça, je t'en redonne des nouvelles demain avec une solution. ;)

  • 0
Posté(e)

bonsoir

en effet (sous réserve que ça ai changé depuis ) mais un format slot dans un loop all players est bugé .

la solution est de passer par un "make a gui "

et ensuite de tester avec un on inventory click le slot et le nom du menu

un petit exemple

on inventory click:
   set {_quiclic} to player
   set {_slot} to clicked slot
   set {_nom} to inventory name of player's current inventory
   if {_slot} is less than 0:# clic hors de l'inventaire
       stop
   if inventory name of player's current inventory contains "&8>> %{c2}%liste des joueurs pour":
       if {_slot} is 9:
ETC.... 

 

a bientôt

ps: le sujet parlant de ce bug https://skript-mc.fr/forum/threads/aide-menu-gui-de-liste-de-joueur.10325/#post-87381

  • 0
Posté(e)

Ce n'est pas le format slot qui bug, ce sont les lambdas. La seule façon de régler le problème est de faire passer l'effet par une commande to close then run "Une commande et la tu peux mettre ton %loop-value%" qui va fonctionner...

  • 0
Posté(e)
La seule façon de régler le problème est de faire passer l'effet par une commande to close then run "Une commande et la tu peux mettre ton %loop-value%" qui va fonctionner...

En effet c'est un bug dans les lambdas, mais même avec les commandes contenant des loop-values ça ne marche pas (il me semble)

Il est aussi possible de passer par l'effet "evaluate", qui exécute un code à partir d'un texte. Par exemple avec ta ligne de code, ça donnerai :

evaluate "format slot {_slot} of player with %loop-player%'s skull named ""&9&l%%loop-player%%"" with lore ""%%{rang}%%"" to run [make player execute ""/a %%loop-player%%""]"

J'ai pas testé, si ça ne marche pas c'est qu'il doit y avoir une erreur de ma part dans les doubles "&" et guillemets.

Mais normalement c'est bon, et ça prend en compte chaque loop-values

  • 0
Posté(e)
En effet c'est un bug dans les lambdas, mais même avec les commandes contenant des loop-values ça ne marche pas (il me semble)

Il est aussi possible de passer par l'effet "evaluate", qui exécute un code à partir d'un texte. Par exemple avec ta ligne de code, ça donnerai :

evaluate "format slot {_slot} of player with %loop-player%'s skull named ""&9&l%%loop-player%%"" with lore ""%%{rang}%%"" to run [make player execute ""/a %%loop-player%%""]"

J'ai pas testé, si ça ne marche pas c'est qu'il doit y avoir une erreur de ma part dans les doubles "&" et guillemets.

Mais normalement c'est bon, et ça prend en compte chaque loop-values

Je suis pas mal sûr que passer par une commande peut régler le problème aussi

×
×
  • 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.