CommandBlock Problème - Tags différents

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

evann100

Architecte en herbe
25 Septembre 2016
94
0
63
32
Bonjour, je vient ici car j'ai un problème sur Minecraft 1.11.2
Je crée en ce moment un système qui fait que, quand un joueur pose un certain oeuf, une structure apparaît (sa base). Je téléporte ensuite un armor_ stand nommé "base" au centre de sa nouvelle base, puis je lui attribue un tag (au joueur) comme quoi il est chez lui. Donc, en dehors de la base, les autres joueurs sont en gamemode 2 mais en entrant dans le rayon de l'armor_stand sans avoir le tag, ils passent en gamemode 2 pour ne pas casser l'intérieur de la base.
Jusque là, tout va bien

Mais, ensuite, si un autre joueur construit lui aussi sa base, il se voit recevoir le même tag inscrit dans le système de commands_blocks. Donc, il possède le tag, il peut entrer chez les autres.

C'est à ce moment là que j'ai besoin d'aide : comment faire pour que le système attribue un tag différent à chaque fois ?
Exemple : le premier joueur à utiliser l'oeuf a le tag "base1", le deuxième joueur a le tag "base 2" etc...

Est-ce possible ? Si non y-a-t-il un autre moyen de parvenir à ce résultat ? Je rappelle que les coordonées sont relatives donc on ne peux pas mettre en gamemode suivant des sélecteurs @a[x=..,y=..,z=..]

Merci beaucoup de votre aide ! :)
 
Hey !
Pas bonne idée le tag sur ce coup ;)
Passe plutôt par un score, ainsi, à chaque nouvelle création de bases, tu peux incrémenter de 1 le score du joueur possédant une nouvelle base par rapport aux autres ^^
 
  • J'aime
Reactions: evann100
Ah ! Donc le dernier command block du système effectue la commande
Code:
/scoreboard players operation @p base += 1
?

Et au lieu de mettre un tag, je mets au joueur le score
Code:
/scoreboard players set @p base

C'est bien ça ? Donc le premier a un score à 1, le deuxième un score à 2 etc... ?


Seulement, après, comment je fais en sorte que seul le joueur ayant son score défini puisse être en gamemode 0 dans 10 blocs autour de l'armor_stand ?
Ou plutôt que tous les joueurs n'ayant pas le score à (exemple : 33) soient en gamemode 2 ?

Merci :)
 
Bon alors, partons sur le principe d'un armor stand par base.
Tu mets le score de tout les joueurs à 0.
Tu set déjà une variable à 1, elle correspondra au nombre de base présente sur la map + 1. Je te conseil de l'enregistrer dans un faux joueur du nom, par exemple, de nbreBase.
L'armor stand se pose, tu lui donnes pour score le score de ta variable nbreBase que tu donnes aussi au joueur possesseur.
Ensuite, tu incrémentes d'un nbreBase.

Pour faire ta détection, il faut que le score du joueur soit égale au score de l'armor stand, il faut donc partir d'un fait qui est si simple que l'on n'y pense pas : la différence entre deux nombres identiques vaut 0, donc si tu soustraits le score de l'armor_stand par celui du joueur et que le résultat est 0, alors la base lui appartient.
Pour cela, tu enregistres/copies l'une des deux variables dans une sorte de cache afin de ne pas perdre tes valeurs, puis tu fais ta soustraction avant de tester si le résultat vaut 0 ^^

Seul problème de ma méthode, tu ne peux avoir qu'une seule base par joueur :/
 
(Ici, le score est nbreBase et le faux joueur est nombreBase)

Donc,

Code:
/scoreboard players operation @e[type=armor_stand,name=base,c=1] nbreBase = nombreBase

Puis,

Code:
/scoreboard players operation @p nbreBaseJoueur = nombreBase

Code:
/scoreboard players operation nbreBase =+ 1

Enfin,

Code:
/testfor @p[r=10,score_nbreBaseJoueur_min=nbreBase,score_nbreBaseJoueur=nbreBase]

Code:
/gamemode 2 @a[r=10,score_nbreBaseJoueur_min=nbreBase,score_nbreBaseJoueur=nbreBase]



J'avoue que j'ai un peu du mal :D
 
/scoreboard players operation @e[type=armor_stand,name=base,c=1] nbreBase = nombreBase
Il te manque le nom de l'objectif ^^
/scoreboard players operation nbreBase =+ 1
[/code]/scoreboard players add nombreBase nbreBase 1[/code]

/testfor @p[r=10,score_nbreBaseJoueur_min=nbreBase,score_nbreBaseJoueur=nbreBase]
Nop, tu ne peux pas mettre de variable dans un argument, tu es obligé de passer par un scoreboard players operation afin de faire la soustraction
 
Code:
/scoreboard players operation @e[type=armor_stand,name=base,c=1] nombre Base nbreBase = nombreBase

Code:
/scoreboard players operation @p nombre Base nbreBaseJoueur = nombreBase

Code:
/scoreboard players operation nombreBase =+ 1

Code:
/scoreboard players add nbreBase nombreBase 1

Code:
/scoreboard players add nbreBaseJoueur nombreBase 1


Jusque là, ok ?
Pourrais-tu me montrer les commandes pour faire la détection stp?
Merci :)
 
/scoreboard players operation @e[type=armor_stand,name=base,c=1] nombre Base nbreBase = nombreBase

Whut ?

Tu voulais peut-être plutôt dire cela :
Code:
/scoreboard players operation @e[type=armor_stand,name=base,c=1] nombreBase = nbreBase nombreBase
?

Ici, tu as encore oublié le faux joueur :
Code:
/scoreboard players operation @p nombreBase nbreBaseJoueur = nbreBase nombreBase

/scoreboard players operation nombreBase =+ 1
Cela, je t'ai déjà dit de la remplacer par une autre commande que je t'ai donné au-dessus :
/scoreboard players add nombreBase nbreBase 1

Sinon, pas besoin d'incrémenter la valeur du joueur ou de l'armor-stand.

Pour ce qui est de la détection, tu enregistres le score du joueur entrant dans la base :
Code:
/execute @e[type=armor_stand,et tes autres arguments] ~ ~ ~ scoreboard players operation #joueurCache nbreBaseJoueur = @p[les arguments de détection du joueur] nbreBaseJoueur
Puis tu soustrais ta valeur cache par la valeur de l'armor stand :
Code:
/execute @e[type=armor_stand,et tes autres arguments] ~ ~ ~ scoreboard players operation #joueurCache nbreBaseJoueur -= @e[r=0] nbreBase
Puis tu détectes si le score vaut 0 :
Code:
/scoreboard players test #joueurCache nbreBaseJoueur 0 0
Ensuite, ton command block en conditional contenant le gamemode 0
 
Pour la détection, que vois-tu par #joueur cache ?

Puis "@p[les arguments de détection du joueur]"

Comment je fais pour détecter s'il est dans un rayon de 10 autour de l'armor-stand ?
 
Comment je fais pour détecter s'il est dans un rayon de 10 autour de l'armor-stand ?
r=10

JoueurCache, c'est une valeur temporaire où l'on stock la valeur du joueur afin de ne pas faire les calculs dessus