8 votes

Détecter quand un joueur attaque un autre joueur

Je voudrais détecter lorsqu'un joueur attaque, frappe ou blesse un autre joueur ou une entité. J'ai essayé d'utiliser la fonction AttackTime mais cela ne fonctionne pas. Voici ce que j'ai essayé (sur une horloge de 20HZ) :

Premier bloc de commande :

scoreboard players set @a Attack 0 {AttackTime:0s}

Deuxième bloc de commande :

scoreboard players set @a Attack 1 {AttackTime:1s}

Troisième bloc de commande :

tellraw @a[score_Attack_min=1] "Nice shot!"

10voto

Rickster Points 163

J'ai trouvé comment faire. J'utilise le stat.damageDealt objectif du tableau d'affichage. Je lance d'abord la commande suivante une fois :

/scoreboard objectives add hit stat.damageDealt

Ensuite, sur le Horloge 20Hz Je fais ce qui suit :

  • Premier bloc de commande :

    /tellraw @a[score_hit_min=1] "Nice Hit!"

  • Deuxième bloc de commande :

    /scoreboard players reset @a[score_hit_min=1] hit

Cela fonctionne de la manière suivante : des points sont ajoutés à l stat.damageDealt objectif à chaque fois qu'ils touchent/attaquent/blessent une entité ou un joueur. Ensuite, il exécute la commande sur chaque joueur qui a blessé une autre entité ou un autre joueur. Lorsque cette commande est exécutée, l'objectif est réinitialisé.

La façon dont j'ai trouvé ceci est que dans le menu des statistiques à partir du menu pause, il y a une statistique appelée Dommages subis .

EDIT :

Dans Minecraft 1.9, utilisez le bloc de commande répétitif au lieu d'un Horloge 20Hz .

3voto

MrLemon Points 17073

Cette réponse est basée sur la réponse de @CommandFox et ma propre idée (totalement affreuse) pour une solution. Cependant, j'ai trouvé que la combinaison des deux ajoute une limitation possible pour blesser des entités spécifiques.

Tout d'abord, créez deux objectifs de tableau de bord : didDamage y hurtTime

scoreboard objectives add didDamage stat.damageDealt
scoreboard objectives add hurtTime dummy

Ensuite, créez une horloge de remplissage et exécutez les commandes suivantes :

scoreboard players add @e hurtTime 1 
scoreboard players set @e hurtTime 0 {HurtTime:0s}

execute @e[score_hurtTime_min=1,score_hurtTime=1] ~ ~ ~ tellraw @a[score_didDamage=1] "Nice hit!"
scoreboard player set @a didDamage 0

Jusqu'à présent, nous n'avons rien gagné en utilisant la fonction hurtTime objectif. Son principal avantage est qu'il peut être limité grâce à son sélecteur de cible. Par exemple, en utilisant

scoreboard players add @e[type=Zombie] hurtTime 1 
scoreboard players set @e[type=Zombie] hurtTime 0 {HurtTime:0s}

fait en sorte que le message n'apparaisse que lorsque vous avez effectivement touché un zombie. L'utilisation de multiples de cette paire de blocs de commande permet de sélectionner plusieurs entités.

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