Aller au contenu

4rno

Modérateur Discord
  • Compteur de contenus

    149
  • Inscription

  • Dernière visite

  • Jours gagnés

    3

Tout ce qui a été posté par 4rno

  1. 4rno

    SKRIPT BLOCKS PIEGE ! Besoins d'aide

    Bonjour, Il y a selon moi 2 moyen de parvenir à tes fins: 1/ (À tester) Tu ajoutes, lors de la pose du bloc, "trapped:1" (c'est un exemple) aux NBT du bloc. Cette solution a l'avantage qu'il suffit alors par la suite de simplement tester la présence de ce NBT dans "event-block". 2/ (Sûr) Tu ajoute non pas aux NBT, mais à une variable liste le bloc piégé. Il faudra alors être sur de retirer le bloc de la liste lors de la destruction de celui-ci.
  2. 4rno

    Dédié

    @Floxiik je me souviens que quelqu'un s'était amusé à créer un système de chargement de chunk en command block, mais je peux absolument pas te le retrouver x) Edit: Ah bah si en fait:
  3. 4rno

    Dédié

    @WtD_Keracled je suis totalement d'accord, mais ils s'adressent plutôt à des professionnels. Il faut avoir un certain budget... Cependant ton argument est un peu biaisé car Épicube loue plusieurs serveurs dédiés vu le nombre de joueurs connectés.
  4. 4rno

    Dédié

    Bonjour, Tout dépend de ton budget et de tes exigences. Effectivement, si tu comptes avoir 100 joueurs connectés; je te déconseille les serveurs Minecraft tout fait. Il est préférable d'avoir soit un serveur dédié, soit un VPS. Au niveau des serveurs dédiés je te conseillerais plutôt soit, comme dit plus haut, un serveur chez OVH (les prix commencent assez haut, à 81€ pour les serveurs GAME, équipés à ce prix de 32Go de RAM, Intel i7,...); soit un serveur chez Kimsufi (qui est la filiale "low-cost" d'OVH; et là tu as du petit serveur avec 2Go de RAM à 6€ jusqu'au serveur 16Go de RAM à 30€). Sinon, pour un VPS, je te conseillerais un VPS chez OMGServ, qui sont également de bonne qualité (j'en ai moi-même un; et ça va de 4€ avec 1Go de RAM à 36€ avec 12Go de RAM).
  5. Yeah ! Nouveau skript: https://skript-mc.fr/forum/resources/compask.926/
  6. Tiens donc, je ne te savais pas faire du Skript ^^ C'est fou comme le monde est petit x)
  7. Un nouveau skript en cours de validation... Déjà hâte d'en avoir des retours !
  8. 4rno

    Premium/Crack

    Avec un plugin, je sais pas, ne m'y connaissant pas assez en plugin MC (et en java ^^). Cependant, suite à de rapides recherches, tu peux trouver le fonctionnement de l'authentification d'un joueur ici: http://minecraft-fr.gamepedia.com/Protocole_de_serveur_Classique#Authentification_de_l.27utilisateur . Je ne sais pas si c'est directement exploitable avec un plugin, ou si il faut absolument passer par un spigot custom. Cdlt, RebellCraft
  9. 4rno

    Premium/Crack

    Ah ouais m****, bon bah du coup effectivement c'est pas possible :(
  10. 4rno

    Premium/Crack

    Absolument pas x) Cependant, tu peux tenter ceci -code non testé (sauf la 2e ligne)-: on join: set {_api} to result of connect to "https://api.mojang.com/users/profiles/minecraft/%name of player%" if {_api} contains player's uuid: #Joueur premium, donc accès immédiat au serveur else: #code pour que le joueur s'enregistre/connecte
  11. 4rno

    Premium/Crack

    @Floxiik L'UUID du joueur officiel n'est pas le même que celle du joueur crack, même si ils ont le même pseudo.
  12. 4rno

    Premium/Crack

    Bonjour, En quoi ce n'est pas possible de faire cela en Skript ? Après quelques recherches, Mojang dispose d'une API permettant de récupérer l'uuid d'un joueur à partir du pseudo. Pour cela, tu dois te connecter à ce site ci: https://api.mojang.com/users/profiles/minecraft/<player> En remplacant <player> par le nom du joueur. Ensuite, il te faudra récupérer le contenu de la page (la télécharger); puis il te suffit de vérifier que la page contienne bien l'UUID du joueur. À ce moment, si elle le contient bien, alors le joueur est authentique, sinon, c'est un crack ! :) Cdlt, RebellCraft
  13. 4rno

    « SkTutorial #1 - Les listes ! »

    @Skynidor Pour cela, tu es obligé de faire: loop {list::*}: if loop-value is <ce que tu cherches>: #Ton code Cependant, il est alors possible qu'il y aie plusieurs éléments qui y correspondent.
  14. 4rno

    « SkTutorial #1 - Les listes ! »

    Intéressant, mais personnellement je vois plus les listes comme des variables organisées (regroupées derrière un :: ) :) D'ailleurs, on peut créer des sous-listes, sous-sous-listes, ... P.S: En quoi les listes étaient buggées ?!?
  15. 4rno

    Remplacement de map

    De rien :)
  16. 4rno

    Remplacement de map

    Ah mais c'est automatisable ! make console execute command "/mvdelete end" wait 0.5 second make console execute command "/mvconfirm" wait 2 seconds copy dir "backups/end" to "" wait 2 second make console execute command "/mv import end normal" Il suffit d'adapter les "wait" en fonction des performances de ton serveur
  17. 4rno

    Remplacement de map

    Bonjour, personnellement, étant dans un cas semblable au tien, j'utilise le plugin Multiverse-Core, qui permet d'utiliser plusieurs maps sur un serveur.Il permet aussi de décharger (ou directement supprimer) des maps. Ensuite je copie une backup de la map et je réimporte la map. Malheureusement, je ne sais pas si cela fonctionnera avec le monde end du monde par défaut ("world_the_end" par exemple); si j'essaie de décharger le monde par défaut "world", il me met une erreur. Cependant, tu pourrais contourner cela en utilisant justement des mondes différents pour l'end, les ressources et le nether; faudrait juste un peu bidouiller lors de la téléportation ;)
  18. 4rno

    Problème de syntaxe au niveau d'une condition

    if {testSiTeamMate2} is false: set {_ok} to true if {testSiTeamMate1} is false: set {_ok} to true if {_ok} is true: #Ton code
  19. Bonjour, Je vais vous présenter un petit système permettant de manipuler des structures avec comme seul outil Skript, sans shematic, WorldEdit ou autre ! Pour comprendre ce tutoriel, il vous faudra juste connaitre les bases de Skript. Alors, pour manipuler des structures (tri-dimensionnelles), il faudrait déjà pouvoir en sauvegarder ! Nous allons donc voir ici comment enregistrer des structures, et les "coller" par la suite ! -Sauvegarde- Comme dit plus haut, nos structures sont en trois dimensions, nous allons donc devoir, les "découper" en structure bi-dimensionnelles, puis uni-dimensionnelles, puis en "zéro"-dimension (un bloc quoi...) [spoiler=Help... J'ai rien compris !]C'est possible, et c'est pour répondre à cela que ce message est là ! Pour imager la situation, prenez un cube: Celui-ci a 3 dimensions, ce qui est compliqué à gérer. Nous allons donc le découper en tranches bi-dimensionnelles -en 2 dimensions-, avec autant de couches que de blocs dans la dimension dans laquelle nous avons tranché: Ensuite, nous allons encore découper cette surface pour obtenir des éléments uni-dimensionnelles -des lignes (de blocs) donc-, puis encore pour obtenir des blocs à l'unité. Quand nous aurons nos blocs à l'unité, alors à ce moment là nous pourrons sauvegarder leur état, position, ... Pour pouvoir "trancher" notre structure, nous allons utiliser des (3 en fait, vu que nous avons une structure tri-dimensionnelle) loop x times imbriquées, où le "x" correspond au nombre de couches composant notre structure. Voici le principe de fonctionnement du code: loop <x couches> times: loop <y couches> times: loop <z couches> times: #Ici on sauvegardera la position RELATIVE du bloc, ainsi que le bloc en lui-même [spoiler=Position relative ? Késako ?]Vous connaissez -j'espère- les coordonnées de Minecraft ? le X, le Y et le Z. Et bien lors de vos parties d'UHC où vous communiquez à vos amis ces nombres, ce sont en réalité les coordonnées ABSOLUES de votre position, c'est à dire que depuis n'importe où dans la map, on peut aisément se situer, ces coordonnées là ont comme origine le 0, 0, 0 de la map. Les coordonnés relatives, elles, ce serait plutôt comme dire 'Je me trouve 39 blocs à l'est, 6 blocs plus bas et 148 blocs au nord PAR RAPPORT à ta propre position". Les joueurs ayant beaucoup utilisés les blocs de commandes connaissent aussi les coordonnées relatives, le fameux tilde (~). Vous vous demandez peut-être aussi pourquoi nous avons besoin de coordonnées relatives et non absolues; la raison est simple: ici, nous ne souhaitons pas de coordonnées absolues car elles sont justement absolues ! Or, nous ne devons connaitre que le positionnement des blocs de la structure les uns par rapport aux autres. Pour connaitre la position relative d'un bloc, il me suffit maintenant de récupérer la loop-value-<1|2|3> des boucles ! Enfin, presque, un skripteur minutieux sait que la loop-value d'une boucle loop x times commence à partir de 1, or, moi je souhaite que le premier bloc soit en position relative 0, 0, 0. Il me faut donc soustraire 1 à mes loop-values. Voici le code actuel: loop <x couches> times: loop <y couches> times: loop <z couches> times: #On définis les coordonnés corrects par rapport aux loop-values set {_x} to "%loop-value-1%" parsed as number -1 set {_y} to "%loop-value-2%" parsed as number -1 set {_z} to "%loop-value-3%" parsed as number -1 Maintenant, nous allons compléter le début du code, histoire que ce soit clair dans vos têtes ! Pour connaitre la zone à enregistrer, nous avons besoin de seulement 2 coordonnées, de manière à former un parallélépipède rectangle. Pour rendre la sélection plus facile, on va sélectionner nos 2 coordonnées grâce à un item (ici une blaze rod) -à la manière de WorldEdit et de sa hache-. Voici le code que j'utilise: [spoiler=Code] on left click with blaze rod: If name of player's tool is "Sélection": if event-block is set: cancel event set {sktruc::sel1::x} to x-coordinate of event-block set {sktruc::sel1::y} to y-coordinate of event-block set {sktruc::sel1::z} to z-coordinate of event-block send "Point 1: %{sktruc::sel1::x}% %{sktruc::sel1::y}% %{sktruc::sel1::z}%" on right click with blaze rod: If name of player's tool is "Sélection": if event-block is set: cancel event set {sktruc::sel2::x} to x-coordinate of event-block set {sktruc::sel2::y} to y-coordinate of event-block set {sktruc::sel2::z} to z-coordinate of event-block send "Point 2: %{sktruc::sel2::x}% %{sktruc::sel2::y}% %{sktruc::sel2::z}%" Je récupère donc mes coordonnées (absolues) de mes 2 coins de la structure dans des variables. [spoiler="C'est quoi {sktruc::[..]} ?"]Si j'utilise un préfix, car oui c'en est un (SKTRUCture), c'est pour que ce ne soit pas le bordel dans mes variables ! Imaginez que j'installe un skript qui n'est pas de moi sur mon serveur, et que ce skript n'ai pas de préfix et utilise les mêmes variables que moi ! Plus rien ne fonctionnerait correctement ! [spoiler=Et pourquoi tu n'utilise presque que des "::" ? Le . il existe aussi !]C'est exact, mais Skript étant ainsi fait que les "::" signifient une variable liste. Cela est d'un énorme avantage de les utiliser car elles permettent d'être manipulée comme des listes. Je peux donc, par exemple, supprimer le point 1 de ma sélection en une seule ligne (clear {sktruc::sel1::*}), alors que mettre un . n'apporte rien ! Si un jour je décide de supprimer seulement Sktructure de mon serveur, je peux aussi (par souci de perfection) supprimer toutes les variables qui y sont associées ! Une fois mes coordonnées obtenues, il me suffit de faire la soustraction, par exemple, de {sktruc::sel2::x} par {sktruc::sel1::x}, et j'obtient alors l'épaisseur en X de ma structure. On pourrait se dire que c'est bon comme ça; sauf que non. D'abord, il est fort probable que je ne sélectionne pas les plus petites coordonnées en "Point 1" et les plus grandes coordonnées en "Point 2", le problème étant que si je soustrait, par exemple, 98 à 72, le résultat sera négatif ! Le loop x times ne s’exécutera alors pas ! Il faut donc réordonner les paires de coordonnées. Le second problème est plus subtil. Imaginons que nous avons sélectionné un bloc en coordonnées x=2 et l 'autre en x=5; le calcul 5-2 donne 3. Hors, si vous êtes un peu malin, vous savez qu'il y a 4 blocs d'épaisseur en X, x=2, x=3, x=4 et x=5. On peut vérifier ce fait en sélectionnant qu'une épaisseur, vous aurez alors 2-2=0, mais il y a une couche en vérité ! Il faut donc ajouter 1 à notre soustraction. On va donc d'abord réordonner nos coordonnées, et en même temps vérifier qu'elles existent !: if {struc::sel1::x} < {struc::sel2::x}: set {_x1} to {sktruc::sel1::x} set {_x2} to {sktruc::sel2::x} else if {struc::sel1::x} > {struc::sel2::x}: set {_x1} to {sktruc::sel2::x} set {_x2} to {sktruc::sel1::x} else: send "Erreur" stop #Ce même code pour Y et Z Et pour le +1 et la soustraction, on va l'intégrer aux loops: loop {_x2} - {_x1} + 1 times: loop {_y2} - {_y1} + 1 times: loop {_z2} - {_z1} + 1 times: set {_x} to "%loop-value-1%" parsed as number -1 set {_y} to "%loop-value-2%" parsed as number -1 set {_z} to "%loop-value-3%" parsed as number -1 #Reste du code à découvrir ! Maintenant, on va effectuer différents effets à chaque bloc de la structure, en connaissant leurs coordonnées relatives. Cependant, pour récupérer notre bloc, il va falloir convertir nos coordonnées relatives en coordonnées absolue. Pour cela, nous allons ajouter les coordonnées relatives de notre structure (ayant comme origine le bloc avec les plus petites coordonnées) au coordonnées absolues de ce même bloc ! On peut donc faire : add location at {_x}, {_y}, {_z} to {sktruc::save::location::*} #Ici on enregistre les coordonnées relative du bloc add type of block at location {_x}+{_x1}, {_y1}+{_y}, {_z1}+{_z} to {sktruc::save::block::*} #Et ici on enregistre de quel bloc il s'agit ! [spoiler=Heu.. Et comment on sait quels coordonnées correspondent à quel bloc ?]Et bien c'est très simple ! Étant donné que l'on enregistre en même temps la position du bloc et ses propriétés, leur index dans la liste est le même ! On peut aussi informer le joueur de la bonne sauvegarde de sa structure avec: send "Structure sauvegardée." send "Taille: x:%{_x2} - {_x1} +1% y:%{_y2} - {_y1} +1% z:%{_z2} - {_z1} +1%" send "Points: x1:%{_x1}% y1:%{_y1}% z1:%{_z1}% x2:%{_x2}% y2:%{_y2}% z2:%{_z2}%" On peut également ajouter clear {sktruc::save::location::*} clear {sktruc::save::block::*} juste avant les loops, histoire qu'il n'y ai pas de bug de structure imbriquée. Voilà, c'est tout, passons au "collage" de notre structure ! [spoiler=Code de la sauvegarde (et de la sélection)] command /sktructuresave: trigger: if {sktruc::sel1::x} < {sktruc::sel2::x}: set {_x1} to {sktruc::sel1::x} set {_x2} to {sktruc::sel2::x} else if {sktruc::sel1::x} > {sktruc::sel2::x}: set {_x1} to {sktruc::sel2::x} set {_x2} to {sktruc::sel1::x} else: send "Erreur" stop if {sktruc::sel1::y} < {sktruc::sel2::y}: set {_y1} to {sktruc::sel1::y} set {_y2} to {sktruc::sel2::y} else if {sktruc::sel1::y} > {sktruc::sel2::y}: set {_y1} to {sktruc::sel2::y} set {_y2} to {sktruc::sel1::y} else: send "Erreur" stop if {sktruc::sel1::z} < {sktruc::sel2::z}: set {_z1} to {sktruc::sel1::z} set {_z2} to {sktruc::sel2::z} else if {struc::sel1::z} > {sktruc::sel2::z}: set {_z1} to {sktruc::sel2::z} set {_z2} to {sktruc::sel1::z} else: send "Erreur" stop clear {sktruc::save::location::*} clear {sktruc::save::block::*} loop {_x2} - {_x1} + 1 times: loop {_y2} - {_y1} + 1 times: loop {_z2} - {_z1} + 1 times: set {_x} to "%loop-value-1%" parsed as number -1 set {_y} to "%loop-value-2%" parsed as number -1 set {_z} to "%loop-value-3%" parsed as number -1 add location at {_x}, {_y}, {_z} to {sktruc::save::location::*} add type of block at location {_x}+{_x1}, {_y1}+{_y}, {_z1}+{_z} to {sktruc::save::block::*} send "Structure sauvegardée" send "Taille: x:%{_x2} - {_x1} +1% y:%{_y2} - {_y1} +1% z:%{_z2} - {_z1} +1%" send "Points: x1:%{_x1}% y1:%{_y1}% z1:%{_z1}% x2:%{_x2}% y2:%{_y2}% z2:%{_z2}%" on left click with blaze rod: If name of player's tool is "Selection": if event-block is set: cancel event set {sktruc::sel1::x} to x-coordinate of event-block set {sktruc::sel1::y} to y-coordinate of event-block set {sktruc::sel1::z} to z-coordinate of event-block send "Point 1: %{sktruc::sel1::x}% %{sktruc::sel1::y}% %{sktruc::sel1::z}%" stop on right click with blaze rod: If name of player's tool is "Selection": if event-block is set: cancel event set {sktruc::sel2::x} to x-coordinate of event-block set {sktruc::sel2::y} to y-coordinate of event-block set {sktruc::sel2::z} to z-coordinate of event-block send "Point 2: %{sktruc::sel2::x}% %{sktruc::sel2::y}% %{sktruc::sel2::z}%" stop [spoiler=Optimisation du code...]Si vous avez suivi, dans ce bloc de code ci: set {_x} to "%loop-value-1%" parsed as number -1 set {_y} to "%loop-value-2%" parsed as number -1 set {_z} to "%loop-value-3%" parsed as number -1 add location at {_x}, {_y}, {_z} to {sktruc::save::location::*} add type of block at location {_x}+{_x1}, {_y1}+{_y}, {_z1}+{_z} to {sktruc::save::block::*} Je parse mes différentes loop-values. Cependant, après des tests sur de plus grandes structures, cela rend le code horriblement lent ! De plus, je n'ai pas trouvé le moyen de faire autrement (voir :https://skript-mc.fr/forum/threads/loop-value-integer-number-non-reconnue.10038/#post-85436). Si vous pouvez m'aidez, ce serait bien gentil ! -Placer la structure à un autre endroit- Pour ce faire, c'est très simple ! Nous allons d'abord créer une "loop {sktruc::save::location::*}:", nous reconvertirons les coordonnées relatives en coordonnées absolues, et nous irons chercher le type de bloc à poser grâce au loop-index, qui est, je rappelle, le même pour les coordonnées et le type d'un même bloc. loop {sktruc::save::location::*}: set {_x} to x-coordinate of loop-value + x-coordinate of player set {_y} to y-coordinate of loop-value + y-coordinate of player set {_z} to z-coordinate of loop-value + z-coordinate of player set block at location {_x}, {_y}, {_z} to {sktruc::block::%loop-index%} Et vous avez votre structure collé avec comme origine relative votre joueur ! [spoiler=Code du collage de structure] command /sktructureload: trigger: loop {sktruc::save::location::*}: set {_x} to x-coordinate of loop-value + x-coordinate of player set {_y} to y-coordinate of loop-value + y-coordinate of player set {_z} to z-coordinate of loop-value + z-coordinate of player set block at location {_x}, {_y}, {_z} to {sktruc::save::block::%loop-index%} -Résumé- Ici, nous avons appris à sauvegarder une structure tridimensionnelle en Skript. On peut aussi y ajouter un support par joueur, une gestion des sauvegardes, ... On y a également vu comment récupérer notre structure précédemment enregistrée, et la coller de façon simple. Je compte continuez de faire des tutos, en gardant notre Sktructure, l'améliorant et essayant de faire (pourquoi pas ^^) un WorldEdit-like. Si vous avez des idées, des suggestions, des remarques, des questions ou autre, n'hésitez pas à vous manifester ! Suite: Sktructure#2 Rotation et symétrie orthogonale 4rno
  20. 4rno

    Sktructure#1 Sauvegarde de structure (simple)

    @LavaPower Merci ^^ Je craignais que ce soit un poil trop complexe pour les débutants, mais j'ai effectivement mis les spoilers en tant qu'aides/explications :) Heureux que ça soit si bien accueilli sur le forum ! Je ne souhaite pas créer de tutos "basiques" -sans mécanismes très complexes- (genre "Comment faire un SkyWars"), je n'y vois (personnellement) aucun intérêt (à part lorsque l'on débute de l'initiation du commencement de l'apprentissage de Skript xD); je préfère expliquer des mécanismes plus compliqués, de sorte à montrer non pas un code prêt à l'emploi, mais bien la logique qu'il y a derrière ! C'est d'ailleurs pour cela que je ne vais, sur ce tutoriel, pas "fignoler" le travail (en enregistrant par exemple les métas-datas ou les nbt des blocs). Par contre, je pense prochainement faire un tuto sur les variables listes, car j'ai l'impression que relativement peu de gens comprennent vraiment comment elles fonctionnent (comme des variables normales ,mais organisées, en fait !).
  21. 4rno

    Sktructure#1 Sauvegarde de structure (simple)

    @Protoxy @iLaZz Merci :) Mais la grande question est: "Est ce que mon tuto est (facilement) compréhensible ?" !
  22. 4rno

    Sktructure#1 Sauvegarde de structure (simple)

    Merci ! :) @WilliamEzzz Parce qu'il y a moyen de faire plus compliqué ! :O Les fichiers .shematic, par exemple, n'enregistre pas la position du bloc, mais sauvegarde les dimensions de la structure, et puis enregistre les blocs un à un dans un ordre précis. Cependant, ça aurait alors été beaucoup plus compliqué pour mon 2e tutoriel.
  23. Bienvenue dans le 2e épisode de Sktructure ! Si vous n'avez pas suivi le 1e épisode, je vous le conseille fortement, sinon vous ne comprendrez pas grand chose (https://skript-mc.fr/forum/threads/sktructure-1-sauvegarde-de-structure-simple.10021/) ! Cette fois ci, nous allons apprendre à effectuer des rotations (de 90°) et des symétries à nos structures qui ont étés préalablement enregistrées ! Les 2 manipulations sont en réalité relativement similaires. /!\Ce tutoriel est relativement... mathématique, cependant, j'ai essayé de simplifier les explications au maximum -Symétrie orthogonale- Vous devriez, j'espère, l'avoir déjà vu à l'école, la symétrie orthogonale, c'est quand on applique un effet "miroir" sur une figure ou autre. comme ceci: [spoiler=Exemple] Oh la belle symétrie ! Et bien si on applique cela dans un plan, voici ce que l'on obtient: Dans le cas ci dessus, on a effectué une symétrie orthogonale du triangle du dessus par rapport à l'axe X, ce qui a donné le triangle du dessous (appelé image). Ce que l'on peut remarquer, c'est, par exemple, le point A qui se situe en (1, 4) -donc de +1 sur l'axe X et +4 sur l'axe Y- se retrouve dans le triangle image (le résultat de la transformation, ici la symétrie) en (1,-4); on a juste pris l'opposé (on a mis le signe moins (-) devant si vous voulez) de la coordonnée en Y. Et cela est vrai pour tous les points du triangle ! Si on applique une symétrie d'axe Y cette fois, ce n'est plus les coordonnées en Y qui changent, mais celles en X ! [spoiler=Eh ! Pourquoi le point C il est le même pour les 2 triangles ?]C'est tout simplement que C est en (0,1), et -0=0, donc le point C ne bouge effectivement pas ! On sait maintenant ce que l'on doit simplement calculer l'inverse de la coordonnée de l'axe de symétrie. Facile ! On va donc effectuer un "loop {sktruc::save::location::*}:" et y effectuer notre calcul sur l'axe de symétrie choisi. command /sktructuremirror <text>: trigger: if arg-1 is "x" or "y" or "z": loop {sktruc::save::location::*}: if arg-1 is "x": set x-coordinate of {sktruc::save::location::%loop-index%} to 0 - x-coordinate of loop-value if arg-1 is "y": set y-coordinate of {sktruc::save::location::%loop-index%} to 0 - y-coordinate of loop-value if arg-1 is "z": set z-coordinate of {sktruc::save::location::%loop-index%} to 0 - z-coordinate of loop-value send "Symétrie orthogonale d'axe %arg-1% appliquée avec succès" else: send "Erreur" [spoiler=Pourquoi tu fais 0 - x-coordinate ... Tu peux pas simplement faire - x-coordinate ?]Eh bien non, c'est une limitation de Skript (bien que ça revienne au même). Je pense que c'est dû au fait qu'il faut lui donner un "vrai" calcul à effectuer. [spoiler=Et {sktruc::save::blocks::*}, tu l'as oublié non ?]Absolument pas, c'est juste que étant donné que l'on réutilise le même index pour la nouvelle position du bloc, il n'y a pas besoin de l changer ! Et voilà ! C'est tout ! Avouez que ce n'était pas très compliqué ! Passons maintenant à la rotation, vous verrez que c'est un brin plus complexe ! -Rotation- Pour la rotation, au niveau géométrie, voici ce que ça donne, avec une rotation de 90° (dans le sens das aiguilles d'une montre) et de centre (0, 0): On peut constater que pour passer du point A (1, 4), à A'1 (4, -1) -l'apostrophe signifie "image"-, on a échangé les deux coordonnées, et ensuite pris l'opposé pour l'axe Y. Cela est vrai également pour les autres points du triangle. On peut donc dire que qu'un point (X, Y) qui a subit l'effet de notre rotation (centre en (0, 0) et de 90° dans le sens des aiguilles d'une montre) se retrouvera en (Y, -X) ! Dans notre cas, on va faire appel à une fonction, car sinon on devra répéter le même code pour les 3 axes. Voici le code de notre fonction, qui correspond à ce que l'on vient de constater juste au dessus: function rotatepoint(coord1: number, coord2: number, times: number) :: numbers: loop {_times} times: set {_coord1temp} to {_coord1} set {_coord1} to {_coord2} set {_coord2} to 0 - {_coord1temp} delete {_coord1temp} add {_coord1} to {_coords::*} add {_coord2} to {_coords::*} return {_coords::*} Alors pour répondre à vos questions, la raison du "loop x times" est que l'on ne va en réalité pas créer une fonction pour chaque rotation de 90° (90, 180, 270), on va donc simplement répéter la rotation de 90° pour obtenir une de 180° ou 270°.Et la raison d’existence de {_coord1temp} et que on réutilise {_coord1}, ça va bugger étant donné qu'on la déjà modifié ! À partir de là, on va utiliser "loop {sktruc::save::location::*}:"; on va ensuite, en fonction de l'axe choisi, utiliser notre fonction et enregistrer le résultat ! [spoiler=Voici le code complet de la rotation] function rotatepoint(coord1: number, coord2: number, times: number) :: numbers: loop {_times} times: set {_coord1temp} to {_coord1} set {_coord1} to {_coord2} set {_coord2} to 0 - {_coord1temp} delete {_coordtemp} add {_coord1} to {_coords::*} add {_coord2} to {_coords::*} return {_coords::*} command /sktructurerotate <text> <integer>: trigger: if arg-1 is "x" or "y" or "z": if arg-2 is divisible by 90: loop {sktruc::save::location::*}: if arg-1 is "x": set {_coords::*} to rotatepoint(y-coordinate of loop-value, z-coordinate of loop-value, arg-2 / 90) set {sktruc::save::location::%loop-index%} to location at (x-coordinate of loop-value, {_coords::1}, {_coords::2}) if arg-1 is "y": set {_coords::*} to rotatepoint(x-coordinate of loop-value, z-coordinate of loop-value, arg-2 / 90) set {sktruc::save::location::%loop-index%} to location at ({_coords::1}, y-coordinate of loop-value, {_coords::2}) if arg-1 is "z": set {_coords::*} to rotatepoint(x-coordinate of loop-value, y-coordinate of loop-value, arg-2 / 90) set {sktruc::save::location::%loop-index%} to location at ({_coords::1}, {_coords::2}, z-coordinate of loop-value) send "Rotation de %arg-2%° sur l'axe %arg-1% effectuée" else: send "Erreur" else: send "Erreur" -Résumé- Cette fois ci, nous avons vu comment modifier nos structures avec des rotations et symétries. Ce sont des transformations, cependant, la forme de notre structure reste inchangée. Qui sait, pourront nous un jour faire des réductions, agrandissements, déformations quelconques en Skript ! Suite: Sktructure #3: Génération de structures automatisée 4rno
  24. 4rno

    Loop-value/integer/number non reconnue :'(

    Je viens d'essayer, mais malheureusement ce n'est pas cela :/ Les loop {_x2} - {_x1} + 1 times, c'est juste que j’intègre un calcul dans ma loop, et elle boucle autant de fois que le résultat de ce calcul. Cdlt, RebellCraft
  25. Bonjour, Essayant (en vain) d'optimiser le code de mon tutoriel (https://skript-mc.fr/forum/threads/sktructure-1-sauvegarde-de-structure-simple.10021/), je tombe sur une erreur... étrange... Voici le bout de code qui bug: loop {_x2} - {_x1} + 1 times: loop {_y2} - {_y1} + 1 times: loop {_z2} - {_z1} + 1 times: if {_count} is divisible by 500: send "Progression: %{_count}/(({_x2} - {_x1} + 1)*({_y2} - {_y1} + 1)*({_z2} - {_z1} + 1))*100% pourcents" add 1 to {_count} add location at (loop-integer-1-1, loop-integer-2-1, loop-value-3 -1) to {sktruc::save::location::*} add type of block at location at (loop-integer-1-1+{_x1}, loop-integer-2-1+{_y1}, loop-integer-3 -1+{_z1}) to {sktruc::save::block::*} Avec comme erreur: [ATTACH=full]4521[/ATTACH] J'ai essayé de mettre "loop-value-3", "loop-number-3", "loop-integer-3", mais rien n'y fait... J'ai aussi essayé avec d'autres syntaxes (pour le location) , avec et sans (), avec x: , y:, z:, sans, et toujours rien ... En essayant de me résigner, j'ai mis le z en variable locale, mais alors c'était les loop-value-2 qui buggaient ! Si vous avez une idée, n'hésitez pas à proposer...
×

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.