1. Si vous venez d'arriver sur le forum et que vous êtes un peu perdus, cliquez ici !
    Rejeter la notice

Résolu Commande sur panneaux en échanges d'items

Discussion dans 'Commands blocks & Redstone' créé par SnifStone, 25 Avr 2018.

  1. SnifStone

    SnifStone Enter the World

    Inscrit:
    27 Déc 2017
    Messages:
    24
    Points:
    1
    Sexe:
    Homme
    Salut alors je crée une map en 1.8 et j'ai vraiment un gros problème car c'est indispensable que je fasse cette partie de la map, il faudrait que quand un joueur clique sur un panneau il perde plusieurs items définit par exemple 2 ficelle, un baton et un gâteau, et en échange une commande s'éxécute (une me suffit). Si quelqu'un trouve je le remercie infiniment x)
     
  2. Lighar

    Lighar Explorateur

    Inscrit:
    15 Nov 2014
    Messages:
    52
    Points:
    54
    Sexe:
    Homme
    Bonjour,
    Pour les panneaux je te recommande ce site qui peut t'être utile : http://minecraft.tools/fr/sign.php
    (en effet même en comprenant la commande celle-ci est plutôt longue à écrire donc ce genre d'outil est très utile quand on doit faire plusieurs panneaux rapidement)
    Le site est assez intuitif et possède beaucoup d'options

    Pour tester plusieurs items et plusieurs types c'est un peu compliqué, mais c'est possible :

    On créer d’abord un score pour chaque items :
    Code (cpp):
    /scoreboard objectives Item1 dummy
    Code (cpp):
    /scoreboard objectives Item2 dummy
    Code (cpp):
    /scoreboard objectives Item3 dummy
    ...

    Pour créer ce système il va falloir toujours passer par un setblock de bloc de redstone ce qui donne ici :
    Code (cpp):
    /give @p minecraft:sign 1 0 {BlockEntityTag:{Text1:"{\"text\":\"\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"setblock x y z redstone_block\"}}",Text2:"{\"text\":\"Acheter\"}",Text3:"{\"text\":\"item\"}"}}
    Le principe de la commande est toujours le même avec :
    Code (cpp):
    {\"text\":\"\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"setblock x y z redstone_block\"}}
    qui execute "setblock x y z redstone_block" au clique droit du joueur.
    et
    Code (cpp):
    Text2:"{\"text\":\"Acheter\"}",Text3:"{\"text\":\"item\"}
    qui affiche Acheter item sur deux ligne différentes (Text2 et Text3)

    Puis comme la dernière fois on récupère le signal avec un repeater (pour éviter le spam clic) qui mène à une ligne de commande bloc avec :
    Un commande bloc qui setblock d'air sur le bloc de redstone
    et 3 commandes blocs alignés avec ces commandes :
    Code (cpp):
    /stats block "coordonnées du commande bloc qui suivra" set AffectedItems @p Item1
    Code (cpp):
    /stats block "coordonnées du commande bloc qui suivra" set AffectedItems @p Item2
    Code (cpp):
    /stats block "coordonnées du commande bloc qui suivra" set AffectedItems @p Item3
    Pour expliquer cette commande c'est très simple, elle va récupérer le nombre d'items concernés pour chaque commande bloc et affecter ce nombre au score Item1/2/3 pour le joueur


    Puis après un repeater pour chaque commande bloc, on va utiliser un clear :
    La syntaxe du clear est celle ci :
    Code (cpp):
    /clear [joueur] [item] [data] [nombre] [dataTag]
    Donc pour des items basiques :
    Code (cpp):
    /clear @p string 0 1
    0 car notre fil est normal, ce nombre peut varier pour les laines par exemple, en fonction de la couleur (F3+H affiche ces nombres)
    1 car on veux supprimer un fil, le nombre n'a pas de limite, on peux très bien supprimer 100 items
    Pour des items nommés :
    Code (cpp):
    /clear @p string 0 1 {display:{Name:"Fil"}}
    Code (cpp):
    {display:{Name:"Fil"}}
    indique le nom "Fil", c'est le dataTag
    Mais dans ce cas ci nous ne pouvons pas supprimer un item sans être sur que le joueur possède les autres on va donc écrire :
    Code (cpp):
    /clear @p string 0 0 {display:{Name:"Fil"}}
    Malgré le 0 0 cette commande est très utile pour la suite, en effet celle ci va renvoyer une valeur, le nombre de fils du joueurs.

    Enfin, on testfor un joueur avec le nombre voulu pour chaque score, exemple pour 1 papier, 2 stone et 3 fils :
    Code (cpp):
    testfor @p[score_Item1_min=1,score_Item2_min=2,score_Item3_min=3]
    Après ce testfor avec un comparateur on execute :
    -Un clear de chaque items
    -Un/des commande(s) bloc(s) qui execute(nt) ce que l'on veut (give/effect/...)

    Il faut aussi sur un autre repeater,qui ne doit pas dépendre du comparateur,
    un commande bloc qui va remettre à 0 l'état du commande bloc de testfor, celui en effet laissant activé le comparateur, avec ou sans redstone empêchant une futur utilisation. Cette état étant causé par le fait qu'il n'est pas actualisé. On utilise alors un blockdata pour le testfor utilisé:
    Code (cpp):
    /blockdata x y z {SuccessCount:false}
    On ajoute aussi un reset des scores avec :
    Code (cpp):
    /scoreboard players set @p Item1 0
    Code (cpp):
    /scoreboard players set @p Item2 0
    Code (cpp):
    /scoreboard players set @p Item3 0
    ...

    Enfin, on ajoute aussi une cloc qui va ajouter au score 0, car cela va permettre de correctement stocker les données avec la commande stat:
    Code (cpp):
    /scoreboard players add @a Item1 0
    Code (cpp):
    /scoreboard players add @a Item2 0
    Code (cpp):
    /scoreboard players add @a Item3 0
    ...
    2018-04-27_09.25.47.png



    Le système est remis à 0 et prêt à être utilisé de nouveau :smile:
    Une image :
    2018-04-26_18.05.22.png
     
    • Utile Utile x 1
    #2 Lighar, 26 Avr 2018
    Dernière édition: 27 Avr 2018
  3. SnifStone

    SnifStone Enter the World

    Inscrit:
    27 Déc 2017
    Messages:
    24
    Points:
    1
    Sexe:
    Homme
    Omg je t'aime toi ! merci pour ton tuto bien complet et super explicatif ça fait des heures que je suis entrain d'effectuer tout le système parce que je suis nul en commandes x) j'ai tout reproduis avec mes propres coordonnées ect mais j'ai tout vérifier ça ne marche pas, j'ai crée le scoreboard avec le critère dummy est ce que c'est bien ça qu'il fallait faire?
    Sinon encore merci c'est vraiment super bien explicatif ! :lol:
     
  4. Lighar

    Lighar Explorateur

    Inscrit:
    15 Nov 2014
    Messages:
    52
    Points:
    54
    Sexe:
    Homme
    Pas de problèmes, pour le fonctionnement, j'ai modifié et ajouté quelques commandes. Tout devrait marcher maintenant
     
    #4 Lighar, 27 Avr 2018
    Dernière édition: 27 Avr 2018
  5. SnifStone

    SnifStone Enter the World

    Inscrit:
    27 Déc 2017
    Messages:
    24
    Points:
    1
    Sexe:
    Homme
    Omg ça marche merci beaucoup !!
     
    #5 SnifStone, 27 Avr 2018
    Dernière édition: 27 Avr 2018
  6. Lighar

    Lighar Explorateur

    Inscrit:
    15 Nov 2014
    Messages:
    52
    Points:
    54
    Sexe:
    Homme
    Oui c'est bien un scoreboard dummy, car il ne sert ici qu'a stocker les données
    Edit : Passe ton topic en résolu ;)
     
    #6 Lighar, 27 Avr 2018
    Dernière édition: 27 Avr 2018
  7. SnifStone

    SnifStone Enter the World

    Inscrit:
    27 Déc 2017
    Messages:
    24
    Points:
    1
    Sexe:
    Homme
    Salut je crois que je viens de remarquer un problème...
    Si un joueur clique sur le panneau et qu'il n'a pas assez d'objets, le clear s'éxécute donc mais ne rend pas l'objet...
    Y a t-il un moyen?
     
  8. Lighar

    Lighar Explorateur

    Inscrit:
    15 Nov 2014
    Messages:
    52
    Points:
    54
    Sexe:
    Homme
    Etrange, les /clear avant le /testfor sont en "0 0", donc aucun item supprimer, dans le seul but de trouver une valeur, tes /clear d'items "réels" doit être après le /testfor (je ne l'ai effectivement pas illustré sur l'image mais j'en ai parlé dans mon texte).
    Ce qui fait que le /clear ne peut se produire que si le /give se produit
    Donc cela vient surement du placement des commandes blocs qui enlèvent les items (ils doivent dépendre du /testfor comme le /give)
     

Partager cette page