1 votes

Comment puis-je sélectionner au hasard chaque deuxième/troisième entité d'une sorte ?

J'ai décidé que je n'aimais pas rester devant un mob spawner pendant un certain temps afin d'atteindre le niveau 30. Vu que je n'ai pas (encore) de ferme d'Enderman (ou de Pigman), je me suis demandé si je ne pouvais pas simplement augmenter l'XP que je reçois de tout d'environ 50% en utilisant la magie de bloc de commande pour en invoquer davantage.

La page pour Expérience indique que la plupart des orbes d'XP ont des valeurs de 1, 3 ou 7, et je vais limiter mon engin à travailler avec ces trois-là.

J'ai mis en place un objectif de tableau de bord pour distinguer les orbes d'XP fraîchement tombés et leur valeur en utilisant les éléments suivants

scoreboard players set @e[type=XPOrb] XP 1 {Age:10s,Value:1s}

Je voudrais soit invoquer une copie de ces orbes à leur position, soit simplement doubler leur valeur, mais seulement pour environ la moitié d'entre elles, ce qui m'amène à ma question :

Comment puis-je sélectionner de manière aléatoire seulement la moitié d'entre eux pour les utiliser avec execute -> summon o entitydata ? Idéalement, cela devrait être aléatoire sur une base d'entité, plutôt que "globalement" (c'est-à-dire en utilisant time%2 ), afin de rendre l'augmentation plus douce.

2voto

SirBenet Points 27779

Une façon de faire cela pourrait être que chaque nouvel orbe XP invoque un orbe XP avec deux fois la valeur XP à son emplacement, puis que l'orbe XP original tue au hasard exactement une entité à son emplacement. Cela donnerait une probabilité sur deux de quitter l'orbe original, et une sur deux de quitter le nouvel orbe à valeur accrue.

Sur une horloge, pour les orbes XP avec une valeur de 1 :

/execute @e[type=XPOrb,score_XP=1,score_XP_min=1,tag=!MRXPIncreasedOrb] ~ ~ ~ /summon XPOrb ~ ~ ~ {Tags:["MRXPIncreasedOrb"],Value:2s}
/execute @e[type=XPOrb,score_XP=1,score_XP_min=1,tag=!MRXPIncreasedOrb] ~ ~ ~ /kill @r[type=XPOrb,r=0]

Répétez l'opération pour toutes les valeurs orbitales que vous voulez travailler. Par exemple, pour 3 :

/execute @e[type=XPOrb,score_XP=3,score_XP_min=3,tag=!MRXPIncreasedOrb] ~ ~ ~ /summon XPOrb ~ ~ ~ {Tags:["MRXPIncreasedOrb"],Value:6s}
/execute @e[type=XPOrb,score_XP=3,score_XP_min=3,tag=!MRXPIncreasedOrb] ~ ~ ~ /kill @r[type=XPOrb,r=0]

Je ne suis pas sûr de la façon dont c'est configuré pour le moment, mais si vous ne le faites pas déjà, vous devriez supprimer le score d'XP de l'orbe après qu'il ait été traité, afin qu'il ne soit pas traité à nouveau :

/scoreboard players reset @e[type=XPOrb,score_XP_min=0] XP

Pour 1/3 de chance plutôt que 1/2, faites invoquer un autre orbe XP mais avec la même valeur plutôt que le double de la valeur, et ajoutez c=2 à la @r le sélecteur pour que 2 des orbes soient tués.

0 votes

Vous voulez probablement mettre un compte dans votre kill commande, je pense que ça va tuer les deux.

0 votes

L'XP est fixé à 0 pour les orbes si l'âge n'est pas de 10 ans, les orbes invoquées sont invoquées avec l'âge de 11 ans. La solution des balises est géniale, je ne savais pas qu'elles pouvaient aussi être définies par les balises de données ! Je n'utilise pas les snapshots pour l'instant, mais j'en tiendrai compte lors de la mise à jour vers la 1.9.

0 votes

@MBraedley @r sélectionne 1 entité par défaut

0voto

Silentvenom7 Points 1014

Eh bien, il serait difficile de sélectionner une proportion spécifique d'entités. Une chose que vous pourriez faire, cependant, serait de marquer chaque orbe xp d'une certaine taille en utilisant la balise de données {Value:Xb} puis utiliser un /entitydata pour augmenter la valeur de chaque orbe de un (ou autant que vous le souhaitez, assurez-vous simplement que l'orbe résultant ne sera pas marqué par un autre bloc de commande).

Alternativement, si la sélection de la moitié est nécessaire, vous pouvez tester tous les orbes xp non marqués, puis lancer la sortie du comparateur vers un certain nombre de blocs de commande basé sur la force du signal, de sorte qu'il y ait un bloc de commande pour 2 orbes xp, chacun avec la commande @r[type=XPOrb] pour activer une fois et dupliquer le nombre approprié d'orbes, puis un autre pour marquer tous les autres afin qu'ils ne soient pas doublés lors des passages suivants, ou comptés afin que le signal de redstone ne dépasse pas 16.

0 votes

C'est en effet ma solution de repli par rapport au problème posé. Mais je pense que sélectionner aléatoirement une partie de toutes les entités peut être utile dans un certain nombre de cas.

0 votes

Eh bien, une façon vraiment détournée (mais la seule à laquelle je peux penser) serait de tester tous les orbes xp non marqués, puis d'envoyer la sortie du comparateur à un certain nombre de blocs de commande en fonction de la force du signal, de sorte qu'il y ait un bloc de commande pour 2 orbes xp, chacun avec la commande @r[type=XPOrb] pour activer une fois et dupliquer le nombre approprié d'orbes, puis un autre pour marquer tous les autres afin qu'ils ne soient pas doublés lors des passages suivants, ou comptés afin que le signal de redstone ne dépasse pas 16.

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