Résolu Détecter une clique droit d'un joueur sur un autre au travers de blocs invisibles (sans item en main)

...

Massacreur de zombies
13 Mars 2016
67
9
84
25
Bonjour, bonjour,

Je suis en pleine création d'une map loups-garou et je me demandais si il était possible de détecter avec les commandes blocs les cliques droit qu'un joueur peut faire sur un autre. Ce la m'aiderait bcp pour le choix des meutres, amoureux, etc. Les joueurs sont enfermés dans des blocs invisibles pour éviter qu'ils bougent et ont vu sur les autres joueurs.
Je suis en 1.15.2.

Merci d'avance et bon confinement.
 

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 363
1 057
297
21
Bretagne
Hey !

Je te propose deux réponses à ta question.
La réponse simple :
Ce n'est pas possible

La réponse compliqué :
Ce n'est pas possible, mais on peut tricher pour y arriver.
Je m'explique donc :

On ne peut pas détecter un clic droit sans item en main ou entités particulières devant le joueur (armor_stand, villager), il faut donc forcément que tu passes par au moins un item (c'est le plus simple).
Ensuite, on ne peut pas détecter un clic sur une entité (sauf villager ou armor_stand), même avec un item en main, donc pas possible sur un joueur.
Néanmoins, on peut tricher si le joueur a un item en main.
En ayant donc la précondition que j'ai énoncé ci-dessus, on peut invoquer une entité invisible si le joueur a fait un clic droit avec l'item en main.
Il suffit ensuite de déplacer l'entité invisible dans le sens du regard du joueur et exécuter une action lorsque celle-ci rencontre un autre joueur.

Voilà, donc si la seconde solution t'intéresse, je peux la développer un peu plus, à toi de me le dire !
 

...

Massacreur de zombies
13 Mars 2016
67
9
84
25
Splendide !!!

Je m'en doutais que ça ne serait pas facile mais ça me donne plein d'idée du coup ! Mais le fait que les joueurs soient entourés de blocs invisibles n'est pas gênant ? Si il y a un moyen d'immobiliser les joueurs plus simple je suis preneur (de façon à ce que seul le regard bouge). Mais sinon je te remercie pour ta réponse parfaite. J'avoue bien vouloir savoir comment détecter un clique droit avec un item sur un villageois invisible. Petit souci aussi : les joueurs peuvent être pas mal éloignés j'imagine que ça peut être embêtant. Dernière petite question (je suis désolé j'en ai bcp sur ce sujet) : on peut inverser et détecter un clique gauche sur un objet ? comme un hit ?

Merci encore et désolé de t'embêter avec toutes ces questions.
 

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 363
1 057
297
21
Bretagne
Re !

Le Villageois, je ne considère pas cela comme étant une exellente idée vu qu'elle souffre du problème de hitbox des blocs invisible (contrairement au carrot_on_a_stick que l'on utilise pour les clics droits), après, si tu veux rester là-dessus, je viens de répondre à l'instant à la méthode pour le faire ici :
Pour les villageois comme pourle carrot_on_a_stick, le système (outre la détection du clic droit) est le même : il ne souffre ni de la distance, ni des blocs sur la route. Par contre, il peut faire lag si la distance est trop grande (ou que le joueur ne vise pas un autre joueur).
Donc déjà, c'est mieux si la distance est faible, vu que le système se base sur une exécution sur un tick :
On téléporte l'entité en avant jusqu'à ce qu'elle croise un joueur, et tout cela sur 1 seul tick (function récursive), c'est du raycast quoi.
Mais comme je le disais, le soucis c'est si il n'y a pas de joueur, dans ce cas l'entité est téléporté à l'infini ! Pour résoudre cela, faut ajouter une sorte de timeout, un nombre d'itération/de TP maximum à la récursive (tu incrémentes un score à chaque tour de boucle, et quand le score dépasse une certaine borne, tu kills l'entité).
Pour bloquer le joueur, à la rigueur un gros effet de slowness.
Pour le clic gauche, pas de moyen à ma connaissance outre le cassage d'un bloc et le coup sur une entité :/
 

...

Massacreur de zombies
13 Mars 2016
67
9
84
25
Re !

Hmm d'accord je vois ! J'ai peur que les TPs permanents soient un peu lourd et fassent lag la map. Je me disais que je pouvais enlever les blocs en face du visage des joueurs pour qu'ils puissent cliquer sur des armor stand ou villageois qui seront rapprochés mais en direction des autres joueurs. Je me demandais juste si on pouvait déterminer que c'est sur tel ou tel villageois que le joueur a cliqué parce qu'avec la méthode que tu as donné on peux donner un score juste pour le joueur et non pas pour le villageois. A moins que le fait de parler donne un point au villageois aussi ?
 

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 363
1 057
297
21
Bretagne
Non, le villageois permet juste de détecter le clic droit, l'action part du joueur.
Pour ce qui est du raycast, ce n'est pas lourd du tout en fait (j'utilisecela très régulièrement dans mes propres systèmes), après ça dépends de la précision que tu veux, mais si tu fais une précision de 1 bloc (tu téléportes à chaque fois à une distance de 1 bloc) alors ça ne fait que 50 tours de boucle pour parcourir 50 blocs, donc honnêtement ça va.
 

...

Massacreur de zombies
13 Mars 2016
67
9
84
25
Okay ! Merci beaucoup ! Je pense pouvoir me débrouiller avec toutes tes merveilleuses indications.
 
  • J'aime
Reactions: Oromis

Carapiou

Ramasseur de champignons
9 Avril 2019
17
0
12
14
J'ai trouvé cette idée quelque part, mais comment après, faire compter les votes, puis les enlever par un click etc. et pas cliquer sur son villageois... J'ai pensé à cette idée, puis à faire tp des armors stand à la boule de neige lancé mais je rencontre toujours des problèmes. Donc je laisse de côté cette map pour l'instant. Sinon "..." on pourrait faire cette map ensemble, je m'y connais un peu en command block, et on peut rajouter des plugins, c'est très facile avec aternos.
 

Carapiou

Ramasseur de champignons
9 Avril 2019
17
0
12
14
J'ai également fait une map Apex Legends en 1.12.2 (imagine déjà juste avec les commandes disponibles en cette version) mais entre temps, j'ai découvert la facilité des plugins et les nouvelles commandes de la 1.14.4. Alors si tu veux y jeter un coup d'oeil je met le lien d'une vidéo que j'ai faite dessus
. Si tu es d'accord pour bosser avec moi, ajoute mon Discord et ne pas être que des "collèguesé de travail".

PS : Dans la vidéo on dirait que je suis un gamin mais bon... j'ai eu le temps "d'évoluer"
 

Eglaios

Crétin de la commu
14 Avril 2018
312
42
89
21
Wah un loup-garou full vanilla...trop cool!
Enfin les idées ont l'air d'arriver à la pelle par ici, je voulais juste dire ce que j'en pensais...

Y a Oromis qui a son raytracing, j'imagine aussi que c'est pas mal la meilleure solution. En plus, le raytracing ne nécessite absolument aucune entité donc en effet, ça risque pas de défoncer les fps (on peut mettre une distance max pour éviter les lags mais ça reste pas très précis)

Pour détecter un clic gauche, comme il l'a dit, il faut placer un bloc dans la direction vers laquelle le joueur regarde ou placer une entité invisible devant lui pour qu'il la tape, ce qu'on pourrait détecter.
Le problème avec ça, c'est que, l'entité comme le bloc, ça fait du bruit quand on les tape, je sais pas si ça passerait pour une map loup garou... (le tag Silent n'annule pas les bruits de hit, vu que c'est le joueur qui tape)
Et même en "supprimant" les sons avec /stopsound, le plus simple serait encore le ressourcepack pour rendre ces sons "silencieux"

Sinon, pour empêcher les joueurs de bouger, tu peux leur mettre un effet de lenteur max, et il y a un certain niveau d'effet leaping qui empêche les joueurs de sauter (après, plus le joueur est lent, plus sa "vision" change).
J'aurais pensé à mettre un bouton avec un attribut de débuff de vitesse et malédiction de lien éternel sur la tête des joueurs : ça se voit pas, ça les empêche d'avancer et en plus tu peux afficher les infos de la classe sur l'item.


En fait... tu aurais des screens de ta "map" de loup-garou, nottament comment les joueurs sont placés? Je pense que ça pourrait inspirer pour trouver des moyens d'insérer les mécaniques