CommandBlock [Version de votre choix] Détecter si un jouer regarde une certaine entitée

Eglaios

Crétin de la commu
14 Avril 2018
310
42
89
25
Ah oui, c'est sûr que ça a l'air un peu compliqué...
Avec les packs de données, l'énorme avantage, c'est que tu peux exécuter plusieurs fois une fonction dans le même tick... Autrement dit, tu peux téléporter l'armor stand 1 bloc devant toi jusqu'à ce qu'il touche un bloc... en seulement 1 tick, pour ne pas dire instantanément!

J'ai oublié de préciser ce que mes fonctions faisaient :


Le pack teste le bloc depuis la position du SCP 096 en direction de la tête du joueur :
  • Si c'est un non-solide (ça teste si c'est un bloc parmir ceux du fichier nonsolid.json), la fonction recommence dans le même tick et reteste un bloc de plus en direction du joueur
  • Si c'est un bloc non spécifié dans le nonsolid.json, la fonction arrête d'être recommencée, le test de vision prend donc fin pour ce tick.
  • Si c'est un joueur (sa tête), ce joueur-ci se fait invoquer un area_effect_cloud 1 bloc dans la direction où il regarde, au niveau de sa tête. Ensuite, le pack teste si l'area_effect_cloud se trouve dans un certain rayon de la position de test précédente, un bloc en arrière en direction d'SCP 096 (en gros, ça teste si le joueur regarde vers lui) Si tu règles le rayon de test de l'area_effect_cloud, tu peux régler à partir de quel angle de vision SCP 096 sera considéré comme vu (J'ai mis 2 commandes de test pour avoir un rayon plus long que large). S'il est vu, cela déclenche une commande ("data merge entity @s {NoAI:1}" en tant qu'SCP 096, ce qui le rendra immédiatement immobile -Oui, c'est un mélange avec SCP 173, mais c'est pour l'exemple-)

Pour ne pas exécuter des tonnes de commandes, j'ai mis une limite : à chaque tick, SCP 096 reçoit un score de 0 pour le score "Sight", qui augmente de 1 à chaque fois que la fonction est exécutée.
J'ai réglé le score maximal à 100 (Chaque exécution, la commande teste à 0.25 blocs en direction du joueur. C'est donc équivalent à une vision maximale de 25 blocs). Une fois qu'il atteint ce score, la fonction arrête de se répéter pour ce tick, même si rien n'a été détecté.
Si un bloc ou un joueur est détecté, le score est automatiquement mis à 101, provoquant l'arrêt de la fonction pour ce tick.



En gros :
-Détection d'un joueur apercevant une partie personnalisable de l'entité même si celle-ci n'apparaît que dans un coin de l'écran
-Aucune entité utilisée pour la détection (sauf un area_effect_cloud qui disparaît après 1 tick si un joueur est détecté)
-Détection de la vision à chaque tick
-Paramètres facilement réglables

Tu pourras demander à d'autre datapack makers mais je suis totalement certain que ce type de système est le meilleur que tu peux obtenir pour tester si un joueur regarde une entité. Tu ne peux pas faire ce genre de chose uniquement avec des blocs de commandes.

Si tu voulais utiliser des porte-armure pour ton système, je te recommande fortement de les remplacer par des area_effect_clouds, qui sont invisibles, sans hitbox "touchable" et disparaissent automatiquement après une durée personnalisable.
 

Eglaios

Crétin de la commu
14 Avril 2018
310
42
89
25
Eh, dis, c'est marrant, y a un mec qui veut aussi faire un système de SCP et qui cherche également un "détecteur de vision"
Je lui ai envoyé la même chose que toi, on verra qui de vous deux y arrivera le premier lol
 

Legorel

Apprenti mapmaker
1 Mai 2019
7
0
1
moi sa marche juste à faire les scp et un execute if entity avec r=.5 mais là je peut pas trop être dessus je suis occupé. sinon je pense avoir trouvé comment faire.
je sais aussi comment faire l'IA de scp173 grâce au facing et aux ^ ^ ^ de la 1.14 et scp96 s'activera si le joueur le regarde trop longtemps grâce à un scoreboard et aura une IA classique.
si tout fonctionne j'aimerai mettre ton pseudo ou un autre si tu veut dans les credits du jeu car tu a tout de même participé à ce projet avec ton aide.
 

Eglaios

Crétin de la commu
14 Avril 2018
310
42
89
25
Vu que tu utilises un système que tu as trouvé par toi-même, ne te sens pas obligé de me mentionner ;)