13 votes

Détecter où un joueur spécifique est mort ?

Donc je fais un jeu de capture du drapeau. J'ai un objectif pour ramasser le drapeau :

scoreboard objectives add red_flag stat.mineBlock.minecraft.wool Has the red flag

Je veux que lorsqu'un joueur meurt, s'il a le drapeau, il le dépose à l'endroit où il se trouvait (comme un bloc, en utilisant setblock). J'ai essayé, où h est un tableau de score de santé :

execute @p[score_h=0] ~ ~ ~ setblock ~ ~1 ~ wool 14

Ça ne marche pas, parce que le joueur est mort, et score_h=1 signifie que si un joueur a exactement 1/2 cœur, alors il bloque continuellement la laine.

Actuellement, la seule solution à laquelle je pense est cette commande, et /kill tous les joueurs avec 1/2 cœur. J'aimerais une solution plus propre. Des idées ?

0 votes

Avez-vous essayé d'ajouter un tableau d'affichage pour détecter s'il a le drapeau ? Regardez gaming.stackexchange.com/questions/192640/ . Cette fois, essayez de /clear le drapeau.

0 votes

J'ai une solution qui est beaucoup trop compliquée pour que je puisse la mettre dans une réponse maintenant ( voir ici pour un indice ), et il pourrait être affiné, mais il devrait faire tout ce que vous voulez.

0 votes

Vous pourriez faire en sorte que l'objet en laine soit abandonné et que l'étiquette " Propriétaire " soit attribuée au joueur qui a cassé le bloc. Le joueur peut ensuite déposer le drapeau dans une trémie située dans sa base, qui est désactivée lorsque le drapeau ennemi n'est pas capturé.

9voto

aytimothy Points 15721

Avez-vous essayé d'ajouter un tableau d'affichage pour détecter s'il a le drapeau ? Regardez comment obtenir et stocker le nom du joueur ? Cette fois, essayez d'effacer le drapeau.
- aytimothy

J'ai répondu à une question cherchant à identifier un joueur, et à effectuer quelque chose à sa mort.

Pour faire court, suivez les instructions pour fabriquer la porte et identifier les joueurs, mais remplacez le bouton de la porte. /clear dans la deuxième étape avec :

/clear @p[score_playerID=1,score_playerID_min=1] minecraft:Wool 14 0

et l'identifiant avec quelque chose d'autre comme... Dis :

/scoreboard objectives create hasWool dummy hasWool
/scoreboard players set @p[score_playerID=1,score_playerID_min=1] hasWool 1
/scoreboard players set @p[score_playerID=1,score_playerID_min=1] hasWool 0

afin d'identifier si quelqu'un a le drapeau ou non. (Cela ne fonctionne qu'avec /gamerule keepinventory true .)

Ensuite, lorsque le joueur meurt, exécutez simplement votre commande, puisque vous savez qu'il est mort, et qu'il a la laine.

Mise à jour :

Ces commandes fonctionnent toutes, mais le problème est le suivant : si le joueur est mort, il ne peut pas exécuter de commandes. Vous ne pouvez pas /exécuter en tant que joueur si le joueur est mort.
- xornob

Disons que nous utiliserons un Creeper comme substitut de l'image de l'utilisateur. /execute commandement.

Exécutez les portes flip-flop conditionnelles (décrites dans la première réponse), en testant les éléments suivants /testfor @a[score_h=0,hasWool_min=1] (cherche un joueur qui est mort et qui avait la laine.

Quand un joueur est mort et qu'il a la laine (la condition est vraie), exécutez /tp @e[type=Creeper] @p[score_h=0,hasWool_min=1] , faire que la liane place le bloc /execute @e[type=Creeper] ~ ~ ~ setblock ~ ~1 ~ wool 14 et se téléporter /tp @e[type=Creeper] 0 0 0 .
La fausse condition dépend de vous ; vous pouvez soit faire en sorte qu'elle téléporte la liane (puisque c'est déjà fait lorsque la vraie condition s'exécute de toute façon).

Assurez-vous simplement que cette commande est exécutée avant qu'ils ne soient respawn (ou qu'ils soient téléportés au point de respawn).


Note : Vous ne pouvez pas directement @a comme lorsque vous utilisez /clear @a minecraft:Wool 14 0 le résultat sera vrai pour tout le monde, même si une seule personne l'a, alors que @p devient juste désordonné. (Vous détectez le joueur le plus proche)

0 votes

/execute @p[score_h=0,hasWool_min=1] ~ ~ ~ setblock ~ ~1 ~ laine 14 ne fonctionne pas, peu importe le temps avant qu'ils respawn cependant.

0 votes

@xornob C'est la commande que vous m'avez donnée. Avez-vous essayé de supprimer le premier / ? Et avez-vous réellement lu la réponse dont je vous ai donné le lien ? Au cas où : gaming.stackexchange.com/questions/192640/

0 votes

Ces commandes fonctionnent toutes, mais le problème est le suivant : si le joueur est mort, il ne peut pas exécuter de commandes. Vous ne pouvez pas /exécuter en tant que joueur si le joueur est mort.

5voto

MrLemon Points 17073

@MBraedley a fait remarquer que les joueurs morts ne sont pas des cibles valables pour la téléportation.

Avertissement : l'idée suivante devrait fonctionner, mais je ne l'ai pas encore testée.

Cette réponse nécessite le red_flag pour fonctionner correctement. C'est-à-dire qu'il doit être de 1 pour le joueur qui porte le drapeau rouge, et de 0 pour tous les autres.

Exécutez ceci une fois

/summon ArmorStand 0 0 0 {Invisible:1,Marker:1,NoGravity:1,CustomName:"Marker"}

Ensuite, exécutez ceci sur une horloge rapide

/tp @e[type=ArmorStand,name=Marker] @p[score_red_flag_min=1]

Ceci fera qu'une armure invisible, sans hitbox, se téléportera continuellement vers le porte-drapeau.

Au moment où le porte-drapeau meurt, le tp échoue continuellement, jusqu'à ce qu'une nouvelle cible valide apparaisse. Saisissez la sortie de tp avec un comparateur et inverser le signal à l'aide d'une torche. Notez que le signal du comparateur sera constant, à moins que quelque chose ne change, selon la méthode de l wiki :

SuccessCount : Représente la force du signal analogique émis par les comparateurs redstone attachés à ce bloc de commande. Uniquement mis à jour lorsque le bloc de commande est activé avec un signal redstone.

Cela signifie que la torche est allumée en permanence lorsque personne n'a le drapeau et qu'elle s'éteint lorsque quelqu'un prend le drapeau, après quoi elle s'éteint en permanence. Elle s'allumera exactement au moment où le tp échoue, auquel cas il alimentera un autre bloc de commande avec la commande

/execute @e[type=ArmorStand,name=Marker] setblock ~ ~ ~ minecraft:wool 14 keep

Notez que cela se produira également lorsque le red_flag les objectifs passent en dessous de 1 pour toute raison autre que la mort, comme le marquage. Il est facile de remédier à ce problème en retirant tous les blocs de laine rouge de la zone de score à l'aide de

/fill <x1> <y1> <z1> <x2> <y2> <z2> minecraft:air replace minecraft:wool 14

0 votes

+1 Moins salissant (plus compact), mais toujours aussi efficace que le mien.

0 votes

C'est en gros ce que j'ai fait hier soir, même si je vérifiais activement l'inventaire des joueurs pour la laine afin de régler le tableau de bord (je pense que c'est moins sujet aux erreurs) et que je téléportais le marqueur (j'ai utilisé un crâne de whither) à chaque tic. J'ai fait cela pour m'assurer que le marqueur était toujours là où se trouvait le joueur, car je ne pensais pas qu'il était une cible valable lorsqu'il était mort.

0 votes

@MBraedley ce n'est en fait pas une mauvaise idée. Vous pourriez aussi faire en sorte que l'Armor Stand porte une bannière rouge sur sa tête. De cette façon, le joueur porte réellement un drapeau avec lui.

2voto

Skylinerw Points 12529

El @a est le seul sélecteur capable de cibler les joueurs morts. Vous pouvez régler le c (cibles maximales) à 1 pour réduire le nombre de cibles.

Vous devrez suivre les décès de joueurs avec le deathCount type d'objectif au lieu de health (qui est en lecture seule), car le joueur mort serait sinon constamment en train de régler le bloc :

/scoreboard objectives add deaths deathCount

Les éléments suivants doivent être exécutés par ordre numérique :

  1. Faire en sorte que les joueurs morts exécutent un /setblock commandement.

    /execute @a[score_deaths_min=1,score_red_flag_min=1,c=1] ~ ~ ~ /setblock ~ ~ ~ minecraft:wool 14
  2. Réinitialiser le score "décès" pour que la commande précédente ne soit pas exécutée en permanence.

    /scoreboard players reset @a[score_deaths_min=1,score_red_flag_min=1] deaths

1voto

Egor Hans Points 473

J'ai une idée que personne n'a proposée jusqu'à présent, et je ne suis pas sûr non plus : Vous êtes d'accord pour utiliser des mods ?

Si c'est le cas, vous pouvez utiliser le mod OpenBlocks, le mod GraveStone ou tout autre mod qui génère des pierres tombales à la mort du joueur, puis exécuter à plusieurs reprises une commande remplaçant tous les blocs de pierres tombales contenant des objets en laine rouge par un bloc de laine rouge.

(Je ne suis pas sûr pour le mod GraveStone, mais le mod OpenBlocks devrait fonctionner proprement lorsqu'il est installé sur le serveur uniquement, du moins la version Forge, je le sais grâce aux projets ChaosCraft de LeKoopa. Pour ceux qui ne connaissent pas LeKoopa, c'est un youtuber allemand de Minecraft avec beaucoup de projets de mods - critiques de mods, mod LP multijoueur, mini-jeux de lucky block et quêtes de survie Too Many TNT non texturées (comme dans toutes les textures TNT sont remplacées par des textures de laine blanche) ne sont que quelques exemples).

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