7 votes

Des commandes différentes sélectionnent des entités différentes (avec le même sélecteur de cible).

J'essayais de définir les valeurs du tableau d'affichage de certaines entités avec une commande telle que

/execute @e[type=ArmorStand] ~ ~ ~ detect ~ ~-1 ~ stone 0 scoreboard players set @e[c=1] myObj 1

et j'ai remarqué qu'il a mis à jour mon au lieu de celui de l'armure. J'ai cru comprendre que le sélecteur @e[c=1] a sélectionné l'entité la plus proche, qui devrait être le support blindé qui exécute la commande. Pour tester cela, j'ai utilisé la commande

/execute @e[type=ArmorStand] ~ ~ ~ detect ~ ~-1 ~ stone 0 say @e[c=1]

et ça disait "Armor Stand", pas mon nom.

Cela semble incohérent. Y a-t-il une raison à ce comportement ou s'agit-il d'un bogue ? Existe-t-il un moyen de sélectionner de manière fiable l'entité qui exécute la commande ?


P.S. : La même chose se produit si je place un bloc de commande à côté du support d'armure et que je le laisse exécuter les commandes : scoreboard players set @e[c=1] myObj 1 me vise (même si je suis plus loin), mais say @e[c=1] dit "Armor Stand".

4voto

Skylinerw Points 12529

Dans la source, il y a deux fonctions qui tentent d'obtenir une cible : une qui sélectionne d'abord les joueurs (et en cas d'échec, revient à l'autre fonction), et une qui ne privilégie aucun type. Chaque commande doit choisir laquelle utiliser lorsqu'elle a un sélecteur.

Cependant, le biais du joueur ne se produira que si le sélecteur lui-même est @p o @r (sans c en cours de modification) ou le c a la valeur exacte de "1". Si c'est le cas, le sélecteur ne sera pas encore traité et la classe de commande elle-même utilisera l'une de ces fonctions pour le traiter. Sinon, le sélecteur est traité en premier sans biais et ensuite la commande est traitée pour chaque cible trouvée, en recevant la cible déjà obtenue (et non un sélecteur à traiter).

Presque tous /scoreboard Les commandes utilisent la fonction de biais du lecteur, à l'exception de /scoreboard players tag ... y /scoreboard teams join ... . Le sélecteur stocké pour CommandStats l'utilise également.

La seule façon de l'empêcher de cibler les joueurs est d'exclure les joueurs de la sélection :

/execute @e[type=ArmorStand] ~ ~ ~ detect ~ ~-1 ~ stone 0 scoreboard players set @e[type=!Player,c=1] myObj 1

Cela signifie que si vous voulez un modèle imbriqué de /scoreboard ou CommandStats pour continuer à cibler toutes les entités, y compris les joueurs, vous devrez créer deux copies : une pour les joueurs et une pour les entités non-joueurs :

/execute @e[type=!Player] ~ ~ ~ /scoreboard players set @e[type=!Player,c=1] OBJ 1
/execute @a ~ ~ ~ /scoreboard players set @a[c=1] OBJ 1

Ou :

/stats entity @e[type=!Player] set SuccessCount @e[type=!Player,c=1] OBJ
/stats entity @a set SuccessCount @a[c=1] OBJ

0 votes

Juste pour m'assurer que je comprends bien : La commande du tableau d'affichage ordonne les entités cibles (potentielles) selon qu'elles sont des joueurs ou non. premièrement et de la distance deuxième en d'autres termes scoreboard players set @e[c=-1] myObj 1 ciblerait l'entité la plus éloignée qui n'est pas un joueur ?

0 votes

@Rawing Woops, j'ai oublié de mentionner que le biais du joueur ne se produit que si le c est défini à la valeur "1". J'ai modifié le post pour l'inclure. Le parti pris du joueur ne sera pertinent que pour c=1 donc c=-1 ciblera l'entité la plus éloignée, quel que soit son type.

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