2 votes

Utilisez le score du joueur comme montant dans /give

J'ai un objectif appelé DIFF. Lorsqu'un joueur appuie sur un bouton, j'aimerais leur donner des objets basés sur leur compteur DIFF multiplié par deux. Par exemple : si DIFF est de 1 alors leur donner 2 objets, si DIFF est de 2 alors leur donner 4 objets, etc.

Ma commande actuelle (sans multiplication) :

/give @p minecraft:emerald {"score":{"name":"@p","objective":"DIFF"}}

Mais il dit que "score" n'est pas un nombre valide. Comment puis-je utiliser le score du joueur pour déterminer le nombre d'objets lors de l'utilisation de /give ?

4voto

Monroecheeseman Points 825

Oui, les commandes ne fonctionnent pas comme ça. Elles sont très structurées et ne vous permettent pas de remplacer des entiers attendus par des expressions. Vous allez devoir le faire à la dure. Vous voudrez également utiliser la version 1.9 pour la simplicité des blocs de commande, bien que cette solution fonctionnera également en 1.8 avec des horloges bien structurées à 20Hz.

Tout d'abord, nous devons mettre en place un autre objectif de tableau de bord qui représente le nombre d'articles à donner ; appelons-le NumItems:

/scoreboard objectives add NumItems dummy

Nous avons également besoin d'un objectif de tableau de bord intermédiaire pour éviter les conflits de course dans les étapes ultérieures. Cet objectif est ce qui va multiplier le score DIFF, nous l'appellerons donc Multiplier:

/scoreboard objectives add Multiplier dummy

Maintenant, lorsqu'un joueur appuie sur le bouton, son score NumItems doit être défini sur deux fois son score DIFF. Nous faisons cela avec les commandes suivantes :

/scoreboard players set @p Multiplier 2
/scoreboard players operation @p Multiplier *= @p DIFF
/scoreboard players operation @p NumItems = @p Multiplier

Super, maintenant nous avons un nombre d'articles à donner, nous devons juste les donner... un par un. Eh bien, nous pouvons être un peu plus efficaces que cela, mais nous ne pouvons pas simplement donner un nombre arbitraire d'articles. Nous allons le diviser en donnant 1 article, 10 articles et une pile de 64 articles. Créez une chaîne de blocs de commande à partir d'un bloc de commande répétitif (ou utilisez une horloge à 20Hz) pour ces commandes, éditées pour répondre à vos besoins spécifiques :

/give @a[score_NumItems_min=64]  64 [...]
/scoreboard players remove @a[score_NumItems_min=64] NumItems 64
/give @a[score_NumItems_min=10]  10 [...]
/scoreboard players remove @a[score_NumItems_min=10] NumItems 10
/give @a[score_NumItems_min=1]  1 [...]
/scoreboard players remove @a[score_NumItems_min=1] NumItems 1

Ce n'est qu'une distribution possible des valeurs de give et peut facilement être améliorée en choisissant une séquence géométrique comme 2n (1, 2, 4, 8...), ce qui devrait effectuer toutes les opérations de donnée pour des comptages d'articles jusqu'à 128 en 1 ou 2 ticks.


Il devrait être évident pourquoi nous avons besoin de l'objectif Multiplier, mais au cas où ce ne serait pas le cas, c'est pour éviter de commencer à donner des articles avant que DIFF ait été multiplié par deux. En conséquence, nous ne devrions écrire dans NumItems qu'une seule fois lorsque le bouton est pressé. Même si la probabilité de rencontrer une erreur de course sans utiliser l'objectif Multiplier est faible, il est préférable d'éviter complètement le problème.

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X