1. Le forum de Minecraft-France va définitivement fermer ses portes. Celui-ci restera en lecture seule mais vous ne pourrez plus y apporter de nouveaux topics. Nous vous invitons à nous rejoindre sur le Discord de Minecraft-France qui permet de présenter vos projets, discuter avec la communauté etc.. Merci à tous d'avoir fait vivre ce forum de nombreuses années. Pour nous rejoindre sur Discord, Cliquez ici

Command Block Des épées à pouvoirs qui séléctionnent la bonne cible

Discussion dans 'Tutoriels' créé par The_Murmex, 9 Jan 2015.

  1. The_Murmex

    The_Murmex Mineur de Fer

    Inscrit:
    4 Jan 2015
    Messages:
    654
    Points:
    71
    Sexe:
    Homme
    Bonjour à tous !
    Ici je reviens sur un de mes précédents articles qui est disponible ici et qui parlait d'un "système" command_block utile pour des maps aventures : il permet de sélectionner précisément la cible frappée par une épée afin de lui mettre divers effets de potion où de le martyriser avec des événements :yeeaaahh:(foudre,téléportation,lave...). Suite à des demandes (et d'ailleurs je comptais le faire de toute façon), je vais non seulement vous montrer comment ça fonctionne, mais aussi vous décrire précisément (si,si...) comment le reproduire. Le tuto se divise en trois parties :
    1-Le principe
    2-le tuto "précis et clair" ^^
    a)Le système simple
    b)Le système double, triple...
    3-l'adaptation au multijoueur (en pvp)
    Bonne lecture ! (et vous en aurez besoin :D)


    1-Le principe

    J'ai d'abord cherché à déterminer la cible par un indicateur de dégâts mais sans succès (de toutes façons le système théorique était beaucoup trop gros). Puis un soir j'ai eu la RÉVÉLATION O:) -oh l'aut' comme y s'la pète !- :
    ça existe déjà dans minecraft ! Vous ne voyez pas ? Essayez de devinez...C'est l'aura de feu voyons !
    Ainsi l'épée est enchantée avec aura de feu et le système détecte qui est enflammé (et pour combien de temps) pour lui assigner les effets.
    Le principe est le suivant :
    -une clock ultra rapide (que cela déplaise ou non à certaines personnes @Aerosmite :p) donne aux entités enflammées pour une durée particulière une certaine scoreboard
    -elle éteint ensuite ces pauvres entités
    -elle leur fait avoir des tas de crasses ensuite
    -elle enlève la scoreboard
    Voilà c'est tout pour le principe, la suite comprend un tuto pour ceux qui veulent faire leur propre système


    2-Le tuto

    a)le système "simple"

    Avant toute chose, il vous faut réalisez une clock très rapide, celle que je vous propose est composée de deux blocs de commandes :
    le 1er :
    Code (cpp):
    fill ~ ~-1 ~ ~8 ~-1 ~ redstone_block 0 replace stone
    Le 2ème:
    Code (cpp):
    fill ~ ~1 ~ ~8 ~1 ~ stone 0 replace redstone_block
    Vous n'avez plus qu'à poser un block de redstone entre les deux blocs de commandes (Voir la sreen ci-dessous pour la position). La clock va alterner très vite les blocs de redstone et de stone pour faire une chaine très rapide (de l'ordre d'1/20 de seconde).
    Image explicative ici

    Il faut ensuite placer des blocs de redstone et de commande comme sur l'image l'orientation est importante.
    Ce système est simplifié afin de bien montrer l'ordre d'activation des blocs de commandes ; libre à vous d'en changer tant que vous respectez cet ordre.
    Je présenterais ensuite chaque command_block dans leur ordre d'activation.

    Testez le joueur enflammé :
    Code (cpp):
    scoreboard players set @e Effect 1 {Fire:4096s}
    Cette commande donne un score Effect de 1 à l'entité enflammée que nous appellerons M.Dupont pour plus de praticité ^^. Le nombre 4096 correspond à une durée ; nous verront ça dans la 2ème sous-partie. Bien sûr il est nécessaire de "déclarer" l'objectif Effect :
    Code (cpp):
    /scoreboard objectives add Effect dummy
    Voilà qui est fait ! Maintenant ont connais notre victime (Mr.Dupont)

    Éteindre le feu :
    Pour ne pas que M.Dupont meure trop rapidement :yeeaaahh:(ce serait pas drôle sinon :diable:)Il faut le débarrasser de ses flammes :
    Code (cpp):
    entitydata @e[score_Effect_min=1,score_Effect=1] {Fire:0s}
    Voilà, mais çà ne fonctionne que pour les entités. Et si Mr.Dupont est un joueur? Nous traiterons cette question dans la 3ème partie ;) (en attendant, je vous conseil de laisser de la place pour un second bloc de commande).

    Torturer notre victime :
    Maintenant, vous pouvez laisser libre cours à votre imagination de sadique et inventer de beaux châtiment pour M.Dupont, voici des exemples :
    Effet de potion :
    Code (cpp):
    effect @e[score_Effect_min=1,score_Effect=1] 0 0 0
    Particules (pour le style :yeah:):
    Code (cpp):
    execute @e[score_Effect_min=1,score_Effect=1] ~ ~ ~ particle snowshovel ~ ~1 ~ 0 0 0 0.5 10
    Éclair (le bourreau devient alors à moitié la victime,vous comprendrez si vous testez):
    Code (cpp):
    execute @e[score_Effect_min=1,score_Effect=1] ~ ~ ~ summon LightningBolt
    N'hésitez pas à partager vos créations dans les commentaires ! ;)

    La libérer de son calvaire :
    Il faut enfin reset le score afin de que M.Dupont ne se voit pas foudroyer en boucle :
    Code (cpp):
    scoreboard players set @e[score_Effect_min=1,score_Effect=1] Effect 0

    Le give de l'épée
    :
    Sans ça, le système aurais nettement moins d’intérêt :D :
    Code (cpp):
    give @p minecraft:diamond_sword 1 0 {ench:[{id:20,lvl:11520}],HideFlags:1,display:{Name:"Epee de la mort !!!!"}}
    Et voilà ! Vous avez créé votre première épée ! Vous en voulez encore? La seconde sous-partie va vous apprendre à créer plusieurs épées aux pouvoirs différents sans qu'elles interférent entre elles.

    b)Le système double, triple quadruple....

    Évidement vous ne pouvez pas combiné plusieurs système sans de fâcheuse conséquences ; ici nous allons voir comment adapter le deuxième,appliqués à M.Dupond, pour faire 3 épées voir 4 ou 5, c'est le même principe. Toutes les modifications que je vous conseillerai sont à appliquer seulement au(x) système(s )additionnel(s).

    La scoreboard :
    Pour que M.Dupond n'ait pas les mêmes effets que Mr.Dupont, il lui faut une valeur de scoreboard différente; ainsi, à la place de :
    Code (cpp):
    scoreboard players set @e Effect 1 [...]
    nous mettrons:
    Code (cpp):
    scoreboard players set @e Effect 2
    Il en découle que pour toute les autres commandes nous remplacerons :
    Code (cpp):
    [score_Effect_min=1,score_Effect=1]
    par :
    Code (cpp):
    [score_Effect_min=2,score_Effect=2]
    L'enchantement :
    Pour différentier l'épée, la valeur de l'enchantement dois être réduite de 1 niveau, on à donc :
    Code (cpp):
    give @p minecraft:diamond_sword 1 0 {ench:[{id:20,lvl:11520}],HideFlags:1,display:{Name:"Epee de la destruction !!!!"}}
    La durée des flammes :
    L'enchantement ayant baissé, la durée du feu sur M.Dupond est modifiée. Revenons donc à:
    Code (cpp):
    scoreboard players set @e Effect 1 {Fire:4096s}
    Ici le nombre 4096 représente le temps avat que le feu s'éteigne.Ne prêtez pas attention au "s" mais sachez qu'il est important. Pour chaque niveau d'enchantement, cette durée diminue de 80. On a donc :
    Code (cpp):
    scoreboard players set @e Effect 1 {Fire:4016s}
    Pour le 3ème système se sera 3936s puis 3856s pour le 4ème ect.

    M.Dupond peut maintenant être torturé sans interférer avec M.Dupont !

    3-L'adaptation au pvp

    Prochainement, il est tard et je ne suis pas encore au top la dessus donc je vous laisse cette partie en suspense.


    C'EST FINI! -ouf !- Vous en savez normalement maintenant autant que moi sur mon système (Je ne garantit pas l’exclusivité car Youtube est spammé de vidéos sur des systèmes plus classiques qui cachent peut-être déjà un système comme le mien). Si vous avez malgré tout des problème, je vous invite à me les dire par commentaire ou MP ; je me ferais plaisir en vous aidant ;) .

    Sur ce, bonne journée, merci d'avoir lu ce tuto et à bientôt !
     
    • J'aime J'aime x 3
    #1 The_Murmex, 9 Jan 2015
    Dernière édition: 10 Jan 2015
  2. Aerosmite

    Aerosmite Mineur de Fer

    Inscrit:
    18 Nov 2014
    Messages:
    611
    Points:
    86
    Sexe:
    Homme
    Super tuto vraiment bien fait continue comme ca ! ;)
     
  3. The_Murmex

    The_Murmex Mineur de Fer

    Inscrit:
    4 Jan 2015
    Messages:
    654
    Points:
    71
    Sexe:
    Homme
    Merci, j'espere juste que tu l'a lu ^^ , tu me pardonne pour la clock ? :D
     
  4. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 595
    Points:
    229
    Utile pour ceux qui commence à apprendre les /scoreboard et comment tester des NBT tags.

    Petit conseil : au lieu de set à 0 la valeur de l'objectif tu peux faire un reset, ça surchargera moins le scoreboard et permettra de voir plus facilement le fonctionnement en cas de problème (tu peux identifier l'entité vu qu'elle serait à priori seule dans le scoreboard).
     
    • J'approuve J'approuve x 1
  5. The_Murmex

    The_Murmex Mineur de Fer

    Inscrit:
    4 Jan 2015
    Messages:
    654
    Points:
    71
    Sexe:
    Homme
    Merci Calambiel mais depuis un certain temps (peut-être la 1.8.1) les scores se suppriment automatiquement quand l'entité meurt. Ainsi les scoreboards ne sont pas surchargées.
     
  6. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 595
    Points:
    229
    Oui c'est depuis la 1.8.1 mais pas en 1.8
    Ça ne change rien au reste du système donc c'est juste une précaution de plus, sauf bien sur si tu as besoin d'avoir le score à 0 pour l'adaptation au PVP.
     
  7. The_Murmex

    The_Murmex Mineur de Fer

    Inscrit:
    4 Jan 2015
    Messages:
    654
    Points:
    71
    Sexe:
    Homme
    J'en ai besoin justement, d'ailleurs le score sera reste après mais le système ne fonctionne pa encore très bien. En tout cas merci de m'aider je le modifierai quand le tuto sera achevé. ^^
     
  8. Aerosmite

    Aerosmite Mineur de Fer

    Inscrit:
    18 Nov 2014
    Messages:
    611
    Points:
    86
    Sexe:
    Homme
    Bon allez pour cette fois je passe l éponge (en fait je vois pas comment on aurais pus faire autrement ^^). Mais est ce que le systeme est assez performant pour ne pas laisser le feu infliger un dégat au joueur ca pourrais etre problematique dans certain cas...
     
  9. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 595
    Points:
    229
    Il a dit que le pvp serait abordé plus tard, dans l'état actuel l'enchantement de feu est tellement puissant que le joueur mourrait de l'effet de feu (vu que le /entitydata ne marche pas sur les joueurs donc pas de possibilité de l'éteindre).
     
    • J'aime J'aime x 1
    • J'approuve J'approuve x 1
  10. em1000diams

    em1000diams Explorateur

    Inscrit:
    7 Jan 2015
    Messages:
    57
    Points:
    34
    Sexe:
    Homme
  11. The_Murmex

    The_Murmex Mineur de Fer

    Inscrit:
    4 Jan 2015
    Messages:
    654
    Points:
    71
    Sexe:
    Homme
    Merci !^^ (Tu en fait peut-être un peu trop pour ce que c'est ? ;) )
    J'ai toujours su que j'étais un génie :* (hum hum)
    Sinon pour le pvp c'est pas gagné ; je me heurte à des bugs TRÈS surprenants (le joueur finit carbonisé ou ... s'envole !? :o) C'est comme si les joueurs ignorait une partie de l'enchantement :grrr:. Je vais m'y pencher plus en détails.
    En revanche, sur un principe similaire on peut faire un arc (je ferrais surement un tuto) qui résout tous les problèmes.
    Autre chose : il est logique que les créatures du Nether ne soit pas affectées par l'épée.
     
  12. em1000diams

    em1000diams Explorateur

    Inscrit:
    7 Jan 2015
    Messages:
    57
    Points:
    34
    Sexe:
    Homme
    pour le pvp tu pourrais faire ça : /execute jemesouvienplusdusélecteur ~ ~ ~ /setblock ~ ~1 ~ minecraft:water
    (peut être que la formulation d'est pas bonne mais tu comprend l'idée)
     
  13. The_Murmex

    The_Murmex Mineur de Fer

    Inscrit:
    4 Jan 2015
    Messages:
    654
    Points:
    71
    Sexe:
    Homme
    Oui c'est ce que je fais. D'ailleurs ça y est dans le prototype du lien au début du tuto. Le problème c'est que c'est ça qui bug justement. :grrr:
     
  14. em1000diams

    em1000diams Explorateur

    Inscrit:
    7 Jan 2015
    Messages:
    57
    Points:
    34
    Sexe:
    Homme
    tu met un délais d'un tic avant d'enlever l'eau
     
  15. The_Murmex

    The_Murmex Mineur de Fer

    Inscrit:
    4 Jan 2015
    Messages:
    654
    Points:
    71
    Sexe:
    Homme
    Pour le moment je n'essaie même pas d'enlever l'eau :D . Non il y a un bug je vais contourner le problème... enfin j'espère.
     

Partager cette page