1. Le forum de Minecraft-France va définitivement fermer ses portes. Celui-ci restera en lecture seule mais vous ne pourrez plus y apporter de nouveaux topics. Nous vous invitons à nous rejoindre sur le Discord de Minecraft-France qui permet de présenter vos projets, discuter avec la communauté etc.. Merci à tous d'avoir fait vivre ce forum de nombreuses années. Pour nous rejoindre sur Discord, Cliquez ici

Problème command_block Testfor avec Count

Discussion dans 'Commands blocks & Redstone' créé par Duke49, 18 Mar 2016.

  1. Duke49

    Duke49 Nouveau

    Inscrit:
    17 Mar 2016
    Messages:
    9
    Points:
    32
    Sexe:
    Homme
    Bonjour,

    je souhaite tester si le joueur possède au minimum 3 émeraudes dans son inventaire puis lui supprimer.
    Voici le schéma, il fonctionne mais j'ai un soucis avec le supérieur ou égal:

    plaque de pression
    redstone
    command_block avec /testfor @p {Inventory:[{id:minecraft:emerald,Count:3b}]}
    comparateur
    répeteur
    command_block avec /setblock -204 82 779 command_block 1 3 {Command:"/testfor @p {Inventory:[{id:minecraft:emerald,Count:3b}]}"}
    repeteur
    command_block avec /clear @p minecraft:emerald -1 3

    J'ai essayé avec Count:>=3b mais hélas ça ne fonctionne :(
    Que faire ?.
     
  2. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 595
    Points:
    229
    Je déplace dans Support>Redstone.

    Pour compter les items dans l'inventaire d'un joueur tu dois utiliser le /stats.
    J'avais écris un tutoriel avec ce genre de test il y a quelques temps : http://forum.minecraft-france.fr/threads/des-shops-compacts-et-intuitifs.28382/
    Vas dans la dernière partie "Shop hybride utilisant le /stats", il est détaillé au début l'utilisation de cette commande pour une application similaire à la tienne.
    Et si tu veux plus d'infos sur cette commande regarde aussi ce tutoriel de Mlakuss : http://forum.minecraft-france.fr/threads/stats-introduction-de-labstrait-dans-les-commandes.27299/

    Ah et aussi pour ton info tu n'as pas besoin de replacer le bloc de commande à chaque fois pour désactiver le comparateur, il te suffit de mettre son SuccessCount à 0 :
    Code (cpp):
    /blockdata <x> <y> <z> {SuccessCount:0}
    D'autant que ton testfor ici est inutile vu qu'il ne distingue pas les joueurs, quand tu utiliseras un /stats il te suffira d'executer directement la commande avec des sélecteurs de score.
     
  3. Duke49

    Duke49 Nouveau

    Inscrit:
    17 Mar 2016
    Messages:
    9
    Points:
    32
    Sexe:
    Homme
    Merci pour ton aide Calambriel, j'apprécie sincèrement cependant le niveau est haut :(
    Ce n'est pas de la programmation, je n'arrive pas à comprendre la logique du système.
    Je viens de passer plus de 3 heures dessus sans résultat, je m'enlève 5 émeraudes (si j'en ai que 4 même résultat) et ça ne me donne rien en échange.

    J'vais m'imaginer dans la v2.0 pour me détendre un peu ^^

    SET VAR_NB_EMERAUDE @P ITEMS MINECRAFT:EMERALD 0 0 FLAG_AFFECTED_ITEMS
    IF VAR_NB_EMERAUDE >= 5
    CLEAR @P ITEMS MINECRAFT:EMERALD 0 5
    GIVE @P MINECRAFT:APPEL 0 10
    ENDIF

    Si simple et si étrange à la fois !
     
  4. personnedu13

    personnedu13 Enter the World

    Inscrit:
    6 Mar 2016
    Messages:
    32
    Points:
    3
    Sexe:
    Homme
    /scoreboard objectives add objectif dummy (pas besoin de command_block pour celui-la)
    /scoreboard players set @a objectif 1 {Inventory:[{id:minecraft:emerald,Count:3b}]} en mode repeat
    /clear @a[score_objectif_min=1] emerald derrière en mode chain conditional
    /scoreboard players set @a[score_objectif_min=1] objectif 0 derrière en mode chain conditional
     
    • J'approuve J'approuve x 1
  5. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 595
    Points:
    229
    @personnedu13 le testfor/NBT pour compter n'est pas une solution, de plus tu clear toutes les émeraudes là....

    Donc en gros, tu dois avoir ces deux commandes d'initialisation, elles doivent être activées avant tout test sinon tu n'auras aucune variable de score, après libre à toi de les activer régulièrement, quand un joueur rejoint ou autre :
    Code (cpp):
    /scoreboard players set @a Emeraudes 0
    /execute @a ~ ~ ~ stats entity @p set AffectedItems @p Emeraudes
    Voilà à partir de maintenant quand les joueurs exécuteront une commande qui comptera des items, ce nombre sera enregistré dans le score "Emeraudes".
    ATTENTION, cela considère TOUTES les commandes comptant les items, pour s'assurer que la variable contient bien le nombre d'émeraudes tu dois exécuter le test juste avant les autres commandes, sans délai si possible :
    Code (cpp):
    /execute @a ~ ~ ~ clear @p minecraft:emerald 0 0
    Ici grâce à l'execute ce sont les joueurs qui lanceront la commandes, donc ils modifieront leur propre score AffectedItems (qui sans execute se serait mis dans le bloc de commande) dont la valeur ira dans le score "Emeraudes".

    Il ne te reste qu'à faire ton clear :
    Code (cpp):
    /clear @a[score_Emeraudes_min=3] minecraft:emerald 0 3
    Si tu veux insérer des commandes en réponse à cette "dépense" d'émeraudes, tu dois le faire juste avant ce dernier clear car il va modifier le nombre d'émeraudes.
     
    • J'aime J'aime x 1
  6. personnedu13

    personnedu13 Enter the World

    Inscrit:
    6 Mar 2016
    Messages:
    32
    Points:
    3
    Sexe:
    Homme
    La demande était de tester si il avait 3 émeraude et de les lui supprimer, j'avoue avoir été négligeant sur le clearing mais la commande marche
     
  7. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 595
    Points:
    229
    Faux, tu as aussi négligé que les émeraudes peuvent se trouver sur des slots différents ou par paquet de plus/moins de 3. S'il possède 2 émeraudes sur le même slot, 4 émeraudes sur le même slot, ou même un stack et un slot différent de 3 d'émeraudes, ta solution ne marchera pas, il faudrait qu'il n'ait que des paquets de 3.

    Et quand il aura besoin de faire un autre test du nombre d'émeraude il faudrait refaire un système entier avec un autre Count, alors qu'avec un stats le nombre total est enregistré et permet de tester le nombre global via un score.
     
  8. personnedu13

    personnedu13 Enter the World

    Inscrit:
    6 Mar 2016
    Messages:
    32
    Points:
    3
    Sexe:
    Homme
    Je connaissais très bien ce problème, j'ai juste donné une réponse positive à sa demande, il était tard et je n'avais pas le temps de tester avec les stats
     

Partager cette page