Aller au contenu
  • 0

Problème sur la commande associées à un item


Question

Posté(e)

Bonjour,

Je cherche à faire un skript permettant d'ajouter la commande /home et celles associées à celle-ci (jamais fait, nonon:eek:).

MAIS, pour innover (je crois), je voudrais faire un affichage de la liste des homes de chaque joueur dans un GUI, avec pourquoi pas un item customisable pour chaque home, et évidemment quand on clique sur cet item, il téléporte le joueur au home désigné (j'espère que c'est claire :confused:).

J'ai déjà créé toute la partie commande, ajout, suppression, changement d'un home, et même l'affichage dans un GUI de tous les homes (pour l'instant uniquement avec des compas). Il n'y a que la partie téléportation quand on clique sur un item qui ne marche pas.

Quand je clique sur n'importe lequel des items, cela me téléporte au dernier home de la liste.

Voici le bout de code fautif (je pense):

            set {x} to 0
           loop {home.%player%.list::*}:
               format slot {x} of player with 1 compass named loop-value to run [make player execute command "/home %loop-value%"]
               set {x} to {x}+1

J'ai l'impression (voire même je suis sûr) qu'il change la commande de TOUS les items à chaque nouvelle information de {home.%player%.list::*}, et donc que quel que soit l'item cliqué, il téléporte au dernier de la liste, et je vois pourtant pas ce que j'ai fais de mal :(.

Voici le code complet, au cas où j'aurai fais une faute dedans (mais je pense pas car à part ça tout marche nikel) :

 

command /sethome <text> [<item>]:
  description: Crée un nouveau home, avec possibilité de le représenter par un item dans un menu # Pour l'item dans le menu on repassera ^^'
  usage: §6/sethome <nom du home> [item]
  executable by: players
  trigger:
    if argument 2 is not set: # pas d'item précisé -> item par défaut : compass
      if {home.%player%.%argument 1%.location} is set: # si un home existe déjà avec le même nom
        set {home.%player%.%argument 1%.location} to location of player #...
        set {home.%player%.%argument 1%.item} to compass #item par défaut.
        message "§6Home %argument 1% ajouté en %player's location%"
        stop trigger #STOP
      set {home.%player%.%argument 1%.location} to location of player #...
      add argument 1 to {home.%player%.list::*} # la raison du stop trigger juste au dessus : éviter d'avoir 2 fois le même nom dans la liste.
      message "§6Home %argument 1% ajouté en %player's location%"
      stop trigger #STOP
    else: #argument 2 is set -> pareil que au dessus, à la place du compas on met l'item précisé
      if {home.%player%.%argument 1%.location} is set:
        set {home.%player%.%argument 1%.location} to location of player
        set {home.%player%.%argument 1%.item} to argument 2
        message "§6Home %argument 1% ajouté en %player's location%"
        set {home.%player%.%argument 1%.location} to location of player
        set {home.%player%.%argument 1%.item} to argument 2
        add argument 1 to {home.%player%.list::*}
        message "§6Home %argument 1% ajouté en %player's location%"
        stop trigger

command /delhome <text>:
  description: Supprime l'un de vos home
  executable by: players
  trigger:
    if {home.%player%.%argument%.location} is not set:
      message "§6Le home %argument% n'existe pas" # espèce de débile ^^
      remove argument from {home.%player%.list::*} # au cas où (pas très utile ouioui)
      stop trigger #STOP
    delete {home.%player%.%argument%.location} #...
    delete {home.%player%.%argument%.item} #...
    remove argument from {home.%player%.list::*} #...
    message "§6Home %argument% supprimé"

command /home [<text>]:
  description: Vous téléporte à l'un de vos home
  executable by: players
  trigger:
    if argument is not set: # càd juste "/home" -> donne une liste de tous les homes
      open chest with 6 rows named "§6§lMenu des homes" to player # ouverture du GUI
      wait 2 ticks #...
      format slot 53 of player with 1 arrow named "§aPage suivante" to close # POUR L'INSTANT ne fais rien, mais c'est bon de prévoir ^^
      format slot 45 of player with 1 arrow named "§cPage précédente" to close # pareil
      set {x} to 0 # /!\ début du passage qui marche pas bien :'(
      loop {home.%player%.list::*}: #on fait défiler toutes les infos de {home.%player%.list::*}
        format slot {x} of player with 1 compass named loop-value to run [make player execute command "/home %loop-value%"] # un compass nommé avec le nom du home
#et qui est censé tp au-dit home
        set {x} to {x}+1 # pour passer au slot suivant
      message "Liste de vos homes : %{home.%player%.list::*}%" # devrai être supprimé quand le GUI marche(ra ?), pour l'instant montre juste tous les homes du joueur
      stop trigger #STOP

    if {home.%player%.%argument%.location} is set: # et qu'il existe donc
      if player is riding a horse or a skeleton horse: # Pour tp un éventuel cheval ou cheval squelette avec le joueur
        make player dismount his vehicle # car sinon on ne pas tp le cheval
        wait 5 ticks # le temps que Minecraft prenne en compte que le joueur n'est plus sur le cheval
        loop entities in radius 3 around the player: # je savais pas trop pour le radius du coup j'ai mis 3 (en dessous ça marche une fois sur 2)
          if loop-entity is a skeleton horse or a horse: #...
            teleport loop-entity to {home.%player%.%argument%.location} # on tp d'abord le cheval
      Teleport player to {home.%player%.%argument%.location} # et ENFIN on tp le joueur
      message "§6Téléporté à %argument%"
    else:
      message "§6Le home %argument% n'existe pas" # petit débile ^^

 

 

Voilà tout, j'espère que vous pourrez déboguer le bout de skript fautif, ou alors que vous aurez une autre idée pour parvenir à mon objectif :)

Merci d'avance ! :p:D

blueblasterz

 

EDIT : je précise même si c'est peut-être inutile que l'ADD-ON SkQuery est nécéssaire pour faire tourner ce skript

5 réponses à cette question

Messages recommandés

  • 0
Posté(e)

Voici le code que j'avais promis:

PS: je t'ai fait fonctionné la possibilité de changé d'item de HOME

 

options:
   home: &8⊗ &6Home &e&l            # home: presentation des homes
   tp: &8[&f&lTeleportation&8]        # TP: presentation des TP
   attente: 5                        # attente avant TP
   c: &6                            # c: Couleur 1
   c2: &e                            # c2: Couleur 2
   f: &7➲                            # f: Format

command /sethome <text> [<item>]:
   description: Crée un nouveau home, avec item personalisé
   usage: §6/sethome <nom du home> [item]
   executable by: players
   trigger:
       loop {home.%player%.list::*}:
           set {_data::*} to loop-value split by "|"
           set {_home.name} to {_data::1}
           set {_home.coord} to {_data::2}
           set {_home.item} to {_data::3}
           if {_home.name} = arg 1:
               remove loop-value from {home.%player%.list::*}
       if arg 2 isn't set:
           set {_item.choisi} to "compass" parsed as item
       if arg 2 is set:
           set {_item.choisi} to "%arg-2%" parsed as an item
       set {_newhome.loc} to player's location
       set {_newhome.loc} to "%round down x-coord of {_newhome.loc}%,%round down y-coord of {_newhome.loc}%,%round down z-coord of {_newhome.loc}%"
       add "%arg-1%|%player's location%|%{_item.choisi}%" to {home.%player%.list::*}
       send "{@home}%arg-1% {@c}ajouté en {@c2}%player's location%"

command /delhome <text>:
   description: Supprime l'un de vos home
   executable by: players
   trigger:
       loop {home.%player%.list::*}:
           set {_data::*} to loop-value split by "|"
           set {_home.name} to {_data::1}
           set {_home.coord} to {_data::2}
           set {_home.item} to {_data::3}
           if {_home.name} = arg 1:
               remove loop-value from {home.%player%.list::*}
               send "{@home}%argument% {@c}supprimé!"
               stop
       send "{@home}%argument% {@c}inexistant..."

command /home [<text>]:
   description: Vous téléporte à l'un de vos home
   executable by: players
   trigger:
       if arg 1 isn't set:
           wait 1 tick
           open chest with 6 rows named "&8&lMenu des {@c2}&lHomes" to player
           wait 1 tick
           format slot 53 of player with arrow named "&aPage suivante" to be unstealable        # Juste bloqué en attendant
           format slot 45 of player with arrow named "&cPage précédente" to be unstealable        # //
           set {_slot} to 0                                                                     # Evite de faire les slot avec des var non temporaire
           loop {home.%player%.list::*}:
               set {_data::*} to loop-value split by "|"
               set {_home.name} to {_data::1}
               set {_home.coord} to {_data::2}
               set {_home.item} to {_data::3} parsed as item                                    # Possibilité de choisir son item de HOME
               format slot {_slot} of player with {_home.item} named "{@home}: &f%{_home.name}% &8⊗" to close then run [make player execute command "/home %{_home.name}%"]
               add 1 to {_slot}
           stop

       else:
           loop {home.%player%.list::*}:
               set {_data::*} to loop-value split by "|"
               set {_home.name} to {_data::1}
               set {_home.item} to {_data::3}
               set {_home.coord::*} to {_data::2} split at ","
               replace "x: " with "" in {_home.coord::1}
               replace "y: " with "" in {_home.coord::2}
               replace "z: " with "" in {_home.coord::3}
               set {_x} to {_home.coord::1} parsed as a number
               set {_y} to {_home.coord::2} parsed as a number
               set {_z} to {_home.coord::3} parsed as a number
               set {_home.coord} to location at x = {_x}, y = {_y}, z = {_z}
               if {_home.name} = arg 1:
                   if player is riding a horse or a skeleton horse:
                       make player dismount his vehicle
                       wait 5 ticks
                       loop entities in radius 3 around the player:
                           if loop-entity is a skeleton horse or a horse:
                               teleport loop-entity to {_home.coord}
                               send "{@tp} &f%loop-entity% {@f} &f%{_home.name}%" to player
                   send "{@tp} {@c2}&l%player% {@c}dans {@c2}{@attente} {@c}sec"
                   wait {@attente} seconds
                   teleport player to {_home.coord}
                   send "{@tp} {@c2}&l%player% {@f} {@c2}%{_home.name}%"
                   stop
           send "{@home}%arg-1% {@c}inexistant !!!"

 

Petit j'aime si ca t'a aidé ^^

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

Alors, tout d'abord un gros merci :D

Ensuite, je crois que oui mais je préfère être sûr, tu as réutilisé les variables de mon ancien code pour faire le tient ? Parce que autant pour le {home.%player%.list::*} c'est good, mais le {home.%player%.%nom du home%.location::*} je ne te vois pas le réutiliser, donc je perd la possibilité de me téléporter à mes homes déjà existants ?

De plus (on va faire tout les connecteurs :p), si je ne m'abuse tu as fais la partie entité à téléporter (pour les chevaux)

Enfin, je ne vois pas trop les différences lors du formatage des items du coffres.

Néanmoins, je vais tester ça et je te dis après si c'est bon :)

 

EDIT: Ton code marche très bien, il va juste falloir que je recréé tout mes homes :confused: Mais surtout il va falloir que je comprenne où (où ?) je me suis trompé dans mon code. Sur ce merci beaucoup Aligator, je passe le sujet en résolu :)

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