Je travaille sur une carte de parkour où si vous tombez de la carte, elle vous téléporte au départ, donc j'ai besoin de téléporter un joueur qui est à la fois Y=166 (pour cet exemple) et dans un rayon de 50 (pour cet exemple). Le problème est que lorsque j'exécute la commande, elle téléporte tous les joueurs qui se trouvent dans un rayon de 50 blocs, qu'ils soient en Y=166 ou non, voici la commande sur laquelle je travaille : execute @a[y=166,r=59] ~ ~ ~ tp @p -12.5 118 -27.5
et je l'ai configuré dans un bloc de commande répétitif avec toujours actif.
Réponses
Trop de publicités?Bonne question. J'ai passé quelques heures à jouer avec les mécanismes des sélecteurs de cible. J'ai relu le wiki à plusieurs reprises. J'ai trouvé une solution, mais elle n'implique pas de rayon.
Le problème est le sélecteur de cible initial : @a[y=166,r=59]
Cela sélectionnera tout joueur dans un rayon de 59 blocs de y=166 directement au-dessus ou au-dessous du bloc de commande. (Si x et z ne sont pas spécifiés, la position d'exécution de la commande est retenue par défaut). Ce rayon signifie au-dessus et au-dessous de y=166. Si x et z du joueur ont les mêmes coordonnées que le bloc de commande, cela sélectionnera n'importe quel joueur entre y=107 et y=225.
Si vous utilisez un argument de volume pour spécifier y, il sélectionne uniquement les joueurs à l'intérieur de la zone spécifiée qui se trouvent également dans le rayon. Ce qui, sans x et z, semble être seulement quelques cubes directement au-dessus/au-dessous du bloc de commande. Cela ne fonctionne pas non plus.
De plus, je ne recommande pas l'utilisation de la commande execute. Techniquement, votre commande recherche un joueur en fonction des critères ci-dessus, puis téléporte le joueur le plus proche( @p
) à ce poste. Il suffit d'utiliser la commande tp directement tout en ciblant le joueur que vous voulez avec le sélecteur de cible.
Une solution serait de spécifier une zone à cibler. Cela permettrait d'utiliser arguments de volume au lieu de l'argument du rayon. Cela nécessite un peu plus.
/tp @a[x=X,dx=DX,y=166,dy=0,z=Z,dz=DZ] -12.5 118 -27.5
X et Z indiquent un coin de la zone testée.
DX et DZ indiquent la distance de X et Z respectivement. (il s'agit d'une distance, pas d'une coordonnée)
Note : Coordonnées relatives ne peut pas être utilisé dans le sélecteur de cible.
Ejemplo:
/tp @a[x=-25,dx=50,y=166,dy=0,z=-25,dz=50] -12.5 118 -27.5
Ceci sélectionnera et téléportera tout joueur entre (-25,y,-25) et (25,y,25). Cela pourrait en quelque sorte remplacer un rayon de 50. Ce n'est pas parfait, il semble sélectionner tout joueur au-dessus de 164 et en dessous de 167.
Dans votre cas, si un joueur tombe d'une structure, il sera téléporté dès qu'il atteindra y=166.
De plus, le bloc de commande doit être situé dans un chunk chargé. Vous pouvez utiliser un bloc de commande par zone de votre carte pour avoir de petites zones ciblées ou vous pouvez placer le bloc de commande dans les chunks de spawn et utiliser une grande zone qui couvre toute la surface de votre carte.
Exemple de ce dernier :
/tp @a[x=-5000,dx=10000,y=166,dy=0,z=-5000,dz=10000] -12.5 118 -27.5
Cela sélectionnerait et téléporterait tous les joueurs entre (-5000,y,-5000) et (5000,y,5000) au niveau y correct.
Cette réponse ne fonctionne pas. Je la garde quand même, car elle contient des informations précieuses dans les commentaires.
Vous aviez en fait raison de dire que x/y/z/dx/dy/dz et r/rm peuvent être combinés et que cela ne sélectionne que les joueurs qui sont dans les deux régions. Mais vous n'avez pas spécifié de région pour l'axe des y, donc y=166
ne fait que déplacer la zone dans laquelle vous effectuez votre recherche, elle ne la limite pas. Pour la limiter, vous devez saisir un montant quelconque dans le champ dy
puisque vous voulez le minimum, vous devez actuellement utiliser la méthode suivante dy=1
Dans la version 1.13+, vous pourrez utiliser la fonction dy=0.01
De plus, vous n'avez pas besoin d'utiliser execute, donc vous pouvez simplement faire ça :
tp @a[y=166,dy=1,r=59] -12.5 118 - 27.5
C'est bien aussi que tu aies utilisé .5
dans les coordonnées, de cette façon cela fonctionne de la même manière dans la 1.13.