CommandBlock [1.12.2] Augmenter la cadence de tire d'un squelette

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

nwcubeok

Aventurier
26 Mars 2019
4
0
2
20
Bonjour,

je crée actuellement une map aventure avec des boss, et j'aimerai savoir si c'est possible d'augmenter la cadence de tire d'un squelette, le faire réagir plus vite quand il voit un joueur, en version 1.12.2.

Merci.
 
Ce genre de système, ça serait à partir de la 1.13...
Bon, j'ai trouvé quelques pistes pour la 1.12, mais pas très convaicant... :
-Déjà, impossible de modifier le NBT d'un squelette pour affecter la vitesse de chargement de l'arc

-J'ai regardé un peu et j'ai vu des tutos sur youtube, dans le fond, ils mettent plein de squelettes sur le même endroit pour qu'ils tirent l'un après l'autre... Ben j'ai essayé en 1.12, avec un tp de tous les squelettes à un squelette avec tag, en repeat... Même avec une team pour la collisionRule et le friendlyFire, les squelettes se blessent toujours, et en plus c'est moche... De ce côté-là, c'est raté...

-Penser à invoquer plus de flèches par blocs de commande en fonction de l'orientation du squelette, impensable avant la 1.13 à cause de la direction, sauf avec la technique des "one-command guns" de la 1.12, c'est-à-dire en testant chaque angle de vision possible du squelette, les paramètres rx et ry (soit 360x180, donc 64 800 blocs de commande pour une précision optimale, alors qu'une dizaine de blocs de commande suffisent pour obtenir le même résultat en 1.13, en plus précis encore)

Du coup, je pense qu'augmenter la cadence de tir ne serait pas la meilleure chose à chercher... Si tu tiens vraiment à ce petit bonus, le mieux est encore de passer en 1.13 ou plus...

Par contre, j'ai quelques idées pour faire un boss squelette, si ça t'intéresse :

-L'énorme avantage du squelette (et wither squelette), c'est qu'il peut attaquer à distance comme au corps à corps, et ça serait dommage de pas en profiter... Dans le fond, si tu fais un timer pour alterner l'item dans la main du boss entre un arc et une épée toutes les 30 secondes, ça serait pas moche (2 modes de combat!)...

-Si tu veux vraiment une attaque spéciale de flèches, ce que tu peux faire, c'est invoquer des flèches qui partent dans tous les sens autour du squelette, vu que si on ne peut pas contrôler la direction relative, on peut toujours tirer dans tous les sens pour atteindre le joueur (pour que ça soit carrément ultime, tu peux mettre un effet de lévitation au squelette vu que les flèches retombent)... Avec quelques particules et un playsound, ça déchirerait carrément sa race!!
ça ferait un effet du genre :
2019-03-26_22.47.27.png
Et les commandes pour invoquer ce cercle de flèches :
Une commande par flèche, j'ai utilisé pythagore et j'ai vraiment mis le plus précis possible, tu peux ajouter plus de flèches si tu veux...
Il faut tout exécuter en même temps pour que ça paraisse bien rond, genre avec des blocs en chaîne.
Petit détail : Idéalement, un /kill @e[type=arrow] serait pas mal vu que ça risque de laisser plein de flèches partout...
Code:
/execute @e[type=skeleton] ~ ~ ~ summon minecraft:arrow ~ ~1 ~1 {Motion:[0.0,0.0,0.5],Fire:100s}
Code:
/execute @e[type=skeleton] ~ ~ ~ summon minecraft:arrow ~ ~1 ~-1 {Motion:[0.0,0.0,-0.5],Fire:100s}
Code:
/execute @e[type=skeleton] ~ ~ ~ summon minecraft:arrow ~1 ~1 ~ {Motion:[0.5,0.0,0.0],Fire:100s}
Code:
/execute @e[type=skeleton] ~ ~ ~ summon minecraft:arrow ~-1 ~1 ~ {Motion:[-0.5,0.0,0.0],Fire:100s}
Code:
execute @e[type=skeleton] ~ ~ ~ summon minecraft:arrow ~-1 ~1 ~-1 {Motion:[-0.3535533905932738,0.0,-0.3535533905932738],Fire:100s}
Code:
execute @e[type=skeleton] ~ ~ ~ summon minecraft:arrow ~1 ~1 ~-1 {Motion:[0.3535533905932738,0.0,-0.3535533905932738],Fire:100s}
Code:
execute @e[type=skeleton] ~ ~ ~ summon minecraft:arrow ~1 ~1 ~1 {Motion:[0.3535533905932738,0.0,0.3535533905932738],Fire:100s}
Code:
execute @e[type=skeleton] ~ ~ ~ summon minecraft:arrow ~-1 ~1 ~1 {Motion:[-0.3535533905932738,0.0,0.3535533905932738],Fire:100s}

-Sinon, tu pourrais faire une autre capacité spéciale genre invocation de mobs, séisme, téléportation, modification du terrain, aveuglement ou autres malus, il y a pas mal de possibilités...


Si tu ne trouves pas de réponse satisfaisante ci-dessus, on pourra sûrement trouver quelque chose de plus adapté en fonction de ce que tu veux...
C'est juste que faire tirer le squelette plus vite en 1.12, c'est possible, mais vraiment très dur



Et si jamais tu aurais une idée à la place d'augmenter la cadence de tir, hésite pas, ça sera peut-être plus réalisable...
Si tu préfères changer en 1.13 ou plus récent, je pourrais te proposer un système qui marcherait pour faire tirer le squelette plus vite, tu n'as qu'à demander.
 
Dernière édition:
Si jamais tu veux un coup de main, je saurais comment faire tirer un squelette plus vite en 1.13...
 
Je m'y mets tout de suite, je t'envoie un système détaillé...
Dans le fond, ça invoquerait des flèches par rapport à la direction dans laquelle regarde le squelette...

Comme je peux pas vraiment détecter si le squelette est en mode attaque ou pas, je vais déclencher le tir rapide quand un joueur se trouve à moins de 16 blocs du squelette (son rayon de détection standard)... Du coup, ça s'enclenchera même si le squelette n'a pas détecté le joueur... Après, je ne sais pas dans quel type d'endroit tu le mettras...
 
Eeet voilà, j'ai fini! ça fait une vingtaine de blocs de commande pour gérer le système!

Bon, alors le fonctionnement : Quand le squelette se trouve à une distance de moins de 16 blocs d'un joueur, il se met à tirer dans la direction où il regarde (S'il repère le joueur, il le regardera donc les flèches seront tirées dans la bonne direction). Evidemment, s'il n'a pas repéré le joueur, il tirera dans une direction inutile, mais bon.

Tu peux modifier n'importe quoi sur le squelette, du moment qu'il garde son tag "boss". C'est uniquement ça (et son objectif "Reload") qui lui permet d'être affecté par le système.

Le squelette tire dans la direction vers laquelle il regarde; idéalement, ça serait préférable d'organiser le combat sur une surface assez plane, comme une salle, un plateau, une plateforme,...

voilà tout ce dont tu as besoin ci-dessous...

La structure :
Pour voir quelle commande va dans quel bloc, je te conseille d'ouvrir l'image dans une nouvelle fenêtre pour éviter de devoir remonter tout le temps

Infos sur les blocs de commande :
Bleu : Répétition - inconditionnel - par la redstone (ou toujours actif, du moment qu'ils sont activés au bon moment...)
Beige : Impulsion - inconditionnel - par la redstone (c'est juste pour invoquer le squelette)
Vert : Chaîne - conditionnel - toujours actif
2019-03-27_18.42.05.png
Avant de passer au contenu des blocs, il y a quelques commandes que tu dois absolument exécuter pour le bon fonctionnement du système, juste quelques scores.
Code:
/scoreboard objectives add Reload dummy
Code:
/scoreboard objectives add pos_x dummy
Code:
/scoreboard objectives add pos_y dummy
Code:
/scoreboard objectives add pos_z dummy

Maintenant, les commandes correspondant à chaque bloc :
Si jamais quelqu'un lit ça et ne le savait pas, inutile de tout réécrire; sélectionnez chaque commande, faites ctrl+c (copier), allez dans l'interface du bloc de commande et faites ctrl+v (coller)!! -Ou téléchargez directement la map-

A :
Code:
execute as @a at @s run execute as @e[distance=..16,type=minecraft:skeleton,tag=boss,scores={Reload=0}] at @s run summon minecraft:armor_stand ^ ^ ^40 {NoGravity:1b,Tags:["ShootDirection"],Invisible:1b}
B:
Code:
execute as @a at @s run scoreboard players set @e[distance=..16,type=minecraft:skeleton,tag=boss,scores={Reload=0}] Reload 10
C:
Code:
execute as @e[type=minecraft:skeleton,tag=boss,scores={Reload=10}] run execute store result score @s pos_x run data get entity @s Pos[0] 10
D:
Code:
execute as @e[type=minecraft:skeleton,tag=boss,scores={Reload=10}] run execute store result score @s pos_y run data get entity @s Pos[1] 10
E:
Code:
execute as @e[type=minecraft:skeleton,tag=boss,scores={Reload=10}] run execute store result score @s pos_z run data get entity @s Pos[2] 10
F:
Code:
execute as @e[type=minecraft:skeleton,tag=boss,scores={Reload=10}] at @s run execute store result score @e[type=armor_stand,tag=ShootDirection,distance=39.8..40.2] pos_x run data get entity @e[type=minecraft:armor_stand,tag=ShootDirection,limit=1,distance=39.8..40.2] Pos[0] 10
G:
Code:
execute as @e[type=minecraft:skeleton,tag=boss,scores={Reload=10}] at @s run execute store result score @e[type=armor_stand,tag=ShootDirection,distance=39.8..40.2] pos_y run data get entity @e[type=minecraft:armor_stand,tag=ShootDirection,limit=1,distance=39.8..40.2] Pos[1] 10
H:
Code:
execute as @e[type=minecraft:skeleton,tag=boss,scores={Reload=10}] at @s run execute store result score @e[type=armor_stand,tag=ShootDirection,distance=39.8..40.2] pos_z run data get entity @e[type=minecraft:armor_stand,tag=ShootDirection,limit=1,distance=39.8..40.2] Pos[2] 10
I:
Code:
execute as @e[type=minecraft:skeleton,tag=boss,scores={Reload=10}] at @s run tp @e[type=minecraft:armor_stand,tag=ShootDirection,distance=39.8..40.2] @s
J:
Code:
execute as @e[type=minecraft:skeleton,tag=boss,scores={Reload=10}] at @s run scoreboard players operation @s pos_x -= @e[type=armor_stand,tag=ShootDirection,limit=1,sort=nearest] pos_x
K:
Code:
execute as @e[type=minecraft:skeleton,tag=boss,scores={Reload=10}] at @s run scoreboard players operation @s pos_y -= @e[type=armor_stand,tag=ShootDirection,limit=1,sort=nearest] pos_y
L:
Code:
execute as @e[type=minecraft:skeleton,tag=boss,scores={Reload=10}] at @s run scoreboard players operation @s pos_z -= @e[type=armor_stand,tag=ShootDirection,limit=1,sort=nearest] pos_z
M:
Code:
execute as @e[type=minecraft:skeleton,scores={Reload=10}] run kill @e[type=minecraft:armor_stand,tag=ShootDirection,limit=1,sort=nearest]
N:
Code:
execute as @e[type=minecraft:skeleton,tag=boss,scores={Reload=10}] at @s anchored eyes positioned ^ ^ ^1 run summon minecraft:arrow ~ ~ ~ {Color:-1,Tags:["arrow"]}
O:
Code:
execute as @e[type=minecraft:skeleton,scores={Reload=10}] at @s run execute store result entity @e[tag=arrow,limit=1,sort=nearest] Motion[0] double -0.004 run scoreboard players get @s pos_x
P:
Code:
execute as @e[type=minecraft:skeleton,scores={Reload=10}] at @s run execute store result entity @e[tag=arrow,limit=1,sort=nearest] Motion[1] double -0.004 run scoreboard players get @s pos_y
Q:
Code:
execute as @e[type=minecraft:skeleton,scores={Reload=10}] at @s run execute store result entity @e[tag=arrow,limit=1,sort=nearest] Motion[2] double -0.004 run scoreboard players get @s pos_z
R:
Code:
execute as @e[type=minecraft:skeleton,tag=boss,scores={Reload=10}] at @s run data merge entity @e[type=minecraft:arrow,limit=1,sort=nearest,tag=arrow] {Tags:["thrown"]}
S:
Code:
scoreboard players remove @e[type=minecraft:skeleton,scores={Reload=1..}] Reload 1
T:
Code:
kill @e[type=minecraft:arrow,tag=thrown,nbt={inGround:1b}]
U:
Code:
/summon minecraft:skeleton ~ ~1 ~ {Tags:["boss"],PersistenceRequired:1,HandItems:[{id:"minecraft:bow",Count:1b},{}],CustomName:"{\"text\":\"King Bone\",\"color\":\"dark_red\",\"bold\":\"true\"}",CustomNameVisible:1}
V:
Code:
/scoreboard players set @e[tag=boss] Reload 0
Les blocs U et V, c'est simplement pour invoquer un squelette à tir rapide. la commande du V doit être exécutée après la U, pour que le squelette aie le score Reload, très important.

Voici les intructions si tu veux changer les paramètres comme la vitesse de tir :
Comme il y a beaucoup de commandes, je te mets un fichier texte complet avec chaque commande. C'est très aidant, car tu peux utiliser ctrl+f pour trouver tous les termes pareils

Pour changer la vitesse de tir (sur les commandes du fichier texte, que tu recopieras après) :
-Mets le curseur en haut du fichier texte; utilise ctrl+f et tape "Reload". Chaque fois que tu vois "Reload 10" (qui n'apparaît qu'une fois) ou "Reload=10", remplace le "10" par la durée de recharge que tu veux (voir plus bas pour voir ce que ça représente).
Attention, il y a des "10" qui ne se trouvent pas après un "Reload", par exemple après "pos[0]". Ne les change pas!
-À 10 de Reload, le squelette tire une flèche tous les 10 ticks. 20 ticks = une seconde, donc il tire deux flèches par seconde. À toi de régler!

Pour changer la distance maximale requise entre le joueur et le squelette pour déclencher les tirs :
-Juste 2 commandes à changer : dans les blocs A et B, il y a "distance=..16". Remplace le "16" par la distance maximale que tu veux (le 16 équivaut au rayon de détection d'un squelette normal)

Pour changer la vitesse des flèches :
-Dans les blocs O,P et Q, remplace "-0.004" par la vitesse que tu veux (-0.003 tire moins loin, -0.005 tire plus loin). Je pense que -0.004 est suffisant pour un squelette normal...

Le principe du système (pour les intéressés, et puis c'est toujours mieux)
-Les squelettes avec le tag "boss" à moins de 16 blocs d'un joueur se font d'abord détecter la direction de leur regard et leur "timer" est mis en marche.
-À chaque cycle du timer avec le score "Reload", une flèche (sans particule!) est tirée dans la direction du regard du squelette "boss"
-Une fois tirées, les flèches invoquées prennent le tag "thrown"
-Les flèches dans le sol portant le tag "thrown" sont automatiquement supprimées pour éviter le lag.

Remarque : les commandes ajoutent des flèches, mais le squelette tire lui aussi en même temps! Comme les flèches de son arc ne prennent pas le tag "thrown", elles resteront quand même par terre... ce qui n'est pas forcément mauvais, vu que ça laissera une trace du combat sans garder un max de flèches.

Si tu utilises les tags d'entité et les scoreboards déjà, je te mets une liste des noms de ceux que j'ai utilisé, pour éviter que tu les réutilises pour d'autres systèmes de la map :
Objectifs :
"Reload" - "pos_x" - "pos_y" - "pos_z"
Tags :
"boss" - "arrow" - "thrown" - "ShootDirection"

Dans les fichiers joints, je te mets le dossier de la map fonctionnelle ainsi que le fichier texte contenant toutes les commandes nécessaires.
Si tu as des questions encore, n'hésite pas!


À ton service!
 

Fichiers joints

Dernière édition:
Bon sang mais c'est même plus un pavé, c'est un livre! En fait, avec une taille comme ça, je pourrai juste le copier-coller dans la section "tutoriels"...