give + scoreboard

  • Auteur de la discussion Auteur de la discussion Aodha
  • Date de début Date de début

Aodha

Massacreur de Mouton
28 Février 2015
32
1
19
26
Bonjou !
Est-il possible de give une valeur exacte d'un scoreboard qui elle est variable? ^^
 
On ne peut pas mettre en variable le nombre d'Item mais tu peux toujours contourner:

Par exemple si tu as un objectif "stone" et tu veux donner autant de pierre qu'il n'a de point à cet objectif.

Tu mets dans dans un command block en mode repeat:

Code:
/give @p[score_stone_min=1] stone 1

Puis en mettant un command block chain:

Code:
/scoreboard players remove @p[score_stone_min=1] stone 1

La commande va s’exécuter tant qu'il y aura un point dans l'objectif.
Le problème c'est que ce ne sera pas tout à fait instantané à valeur de 20 par seconde.

Si tu as besoin de plus de précision, n'hésite pas.
 
  • J'aime
Reactions: Oromis
je vais essayer de t'expliquer ce que je veux concretement ca sera plus simple ^^
-je creer un scoreboard imaginons: Euro
-la valeur de ce scoreboard augmente de 2 chaque seconde
j'aimerais que lorsqu'un joueur active un command bloc (imaginons /give minecraft:diamond), que celui ci lui give le nombre x d'Euro...
je sais pas trop si tu suis ^^
 
Je ne suis pas sur d'avoir compris ce que tu demandes.
Tu veux, par exemple, donner 24 blocs de fer si le score d'un joueur pour un objectif lambda est 24 ?
Si c'est ca, oui c'est faisable mais pas directement à ma connaissance.

Il y a la méthode un peu bourrin : pour chaque valeur possible tu associes
Code:
/testfor @a[score_lambda_min=45]
et
Code:
/give @a[score_lambda=45] minecraft:iron_block 45

Mais si la valeur du scoreboard parcours une grande plage ça risque de devenir un peu lourd.

Si ta valeur reste entre 0 et 999 tu peux réaliser ce même système mais qui test pour chaque chiffre différent.

C'est à dire que tu va avoir 9 fois l'association des 2 commandes blocs pour les unités, 9 fois pour les dizaines et 9 fois pour les centaines. Cela reste assez gros mais rapide à réaliser. Il existe surement plus simple mais ça ne me vient pas en tête pour l'instant ^^.

Si tu veux réaliser ton système comme cela, il faut tester les unités les dizaines et les centaines séparément.
Pour cela on va créer un 'bot' qui prendra différentes valeurs de scoreboard

On crée donc un scoreboard gamma qui va avoir une valeur de 1 pour le joueur considéré.

Tu utilises :

Code:
/scoreboard players operation  bot lambda = @[score_gamma=1] lambda

Cela permet de donner au bot la même valeur de score lambda

Pour les unités :

Il faut créer un scoreboard dummy de valeur 10 ( qu'on va appeler 'cte' ) que l'on donne au joueur fictif 'bot'

Tu utilises alors la commande :
Code:
/scoreboard players operation  bot lambda %= bot cte
Cela revient à récupérer le reste de la divison euclidienne du score de bor pour lambda par son score cte (qui vaut 10)

Et la valeur trouvée est alors entre 0 et 9 pour le bot. Tu la redonnes au joueur avec un scoreboard 'unite' :
Code:
/scoreboard players operation  @[score_gamma=1] unite = bot lambda

que tu traites avec le système initial pour donner de 0 à 9 items.


Pour les dizaines :
Tu recommences en remettant
Code:
/scoreboard players operation  bot lambda = @[score_gamma=1] lambda

Mais ensuite tu divise lambda de bot par cte puis tu prends le reste de la division euclidienne de lambda de bot par cte. Pour la division tu remplace %= par /=

La fin est la même dans un système séparé.

Pour les centaines : c'est exactement pareil mais tu divises deux fois par cte (qui vaut 10).

Bien sur cela ne marche que si un joueur est considéré à la fois. mais normalement le système peut être très très rapide en fonction de la disposition.


Bon je crois que j'ai été assez brouillon, et puis il y a surement plus simple. Si tu ne te sens pas d’essayer tout ça tu peux attendre de futurs réponses peut-être plus efficaces et plus simples ;)
C'est malheuresement tout ce qui m'est venu en tête