Aller au contenu

4rno

Donateur
  • Compteur de contenus

    149
  • Inscription

  • Dernière visite

  • Jours gagnés

    3
  • Crédits

    3 [Faire un don]

Messages posté(e)s par 4rno


  1. Bonjour,

    Déjà je te conseille d'utiliser plutôt Tuske que SkQuery pour les GUI, il bugge moins.

     

    Voici 2 tutos si tu veux:

    Dans ton cas, ce sera aussi + facile étant donné que Tuske permet de faire exécuter directement une commande au joueur (avec des perms spéciales ou non)

     

    4rno


  2. Bonjour !

    Voici l'épisode 3 de Sktructure, un peu différent des autres étant donné qu'ici nous ne nous occuperons pas de manipulation de structure déjà existante, mais bien de génération de structure - et non, nous ne verrons pas comment générer un arbre :p -.

     

     

    -Parallélépipède rectangle-

     

    Bon, déjà on va simplifier les choses, on va l'appeler "cuboïde" notre structure et non pas "parallélépipède rectangle", avouons-le, c'est 10x plus simple !

    Je sais cependant que le nom "cuboïde" n'existe pas -du moins dans le sens que l'on souhaite ici- ' date=' c'est sensé être un adjectif, mais une appellation aussi longue que "parallélépipède rectangle" pour quelque chose d'aussi simple n'est pas tolérable ! Combattons tous ensemble pour simplifier l'usage de la géométrie dans la langue française ! Ensemble on peut y arriver ![/quote']

     

    Donc, comme pour les épisodes précédents de Sktructure, nous allons ici aussi utiliser 3 boucles imbriquées, de façon à couvrir les 3 dimension de l'espace (promis, après on fera quelque chose sans les 3 boucles).

     

    Du coup, pour faire un cube simplement, on n'as qu'à utiliser un code comme celui-ci:

    Contenu masqué

      Réagissez ou répondez à ce message afin de consulter le contenu masqué.

     

    Bon, déjà, pour que la structure apparaisse bien à côté du joueur, on va y ajouter une variable {_ploc} qui contient sa position. On pourrais alors s'arrêter là, rendre le code exécutable en le mettant dans une commande, et aller voir ailleurs... Mais non !

    Du coup, on va ajouter 2 options supplémentaires à notre génération de cuboïde: l'une va permettre de le rendre creux, l'autre de casser les bords.

     

     

    -Rendre le cuboïde creux-

     

    Pour faire cela, il faut se demander, au niveau géométrique, comment savoir si il faut poser un bloc à cet endroit là ou non. Vous me direz alors -après un petit temps de réflexion, pas trop long j’espère- , qu'un cuboïde creux, il n'y a que ses faces qui sont présentes, l'intérieur non. Je vous demanderez alors "Comment savoir si un bloc appartient à une face d'un cuboïde ou non ?"

    La réponse est assez simple: tester si le bloc est dans au moins l'un des plans dans lesquels sont compris les faces du cuboïde, c'est à dire tester si le cube est à l'une des "extrémités" du cuboïde.

    On va travailler un peu différemment, on va créer notre cuboïde plein, puis le creuser, du coup, on va retirer tout bloc ne se trouvant à aucunes "extrémités" -au niveau des coordonnées, on va tester pour les 3 dimensions si la position n'est pas ni minimum ni au maximum-.

     

    Voici alors le code obtenu, avec quelques améliorations:

    Contenu masqué

      Réagissez ou répondez à ce message afin de consulter le contenu masqué.

     

    [spoiler=Pourquoi on teste si c'est pas égal à 1 ? Faut pas tester pour 0 plutôt ?]Et non ! Lorsque l'on fait "loop x times"; la boucle commence à compter à partir de 1 jusqu'au nombre précisé.

     

     

    [spoiler=Le résultat !][ATTACH=full]5565[/ATTACH]

     

     

    et c'est vide à l'intérieur !

    [ATTACH=full]5566[/ATTACH]

     

     

    Voilà, c'est tout pour le creusage de cuboïdes, passons maintenant à la suite !

     

     

    -Casser les arêtes-

     

    Alors, déjà, je sens certains me demander ça veux dire quoi "casser les arêtes" ! Mettons cela au clair, ça n'a rien avoir avec le poisson, ça veux plutôt dire ceci:

     

    [ATTACH=full]5508[/ATTACH]

     

    Donc pour faire cela, que peut on constater par rapport à ces arêtes ? Quelles sont leurs spécificités ?

    En voici la réponse: une arête, c'est lorsqu'un bloc appartient à 2 faces en même temps.

    Il ne faudra donc plus tester si le bloc n'appartient à aucune face, mais bien à au moins 2 faces (et oui, sinon les blocs des coins ne seront pas détruis).

    Pour faire cela, j'ai créé une variable {_face} à laquelle j'attribue, pour chaque bloc -la récup c'est bien- , le nombre de face auquel il appartenait.

    Voici le bout de code utilisé:

    Contenu masqué

      Réagissez ou répondez à ce message afin de consulter le contenu masqué.

     

    Maintenant on peut utiliser une jolie petite condition:

    Contenu masqué

      Réagissez ou répondez à ce message afin de consulter le contenu masqué.

    Et ça fonctionne nickel !

    [spoiler=Le résultat]Bah scroll un peu plus haut, il y a déjà un exemple ! :p

     

     

    -Petite optimisation-

     

    Étant donné que l'on a une variable {_face} qui compte le nombre de face à laquelle appartient un bloc, on peut aussi la réutiliser pour le creusage de cuboïde, il faudra alors tester si la variable est égale à 0.

     

     

    -Code complet-

     

    J'ai ajouté 2 arguments dans la commande, qui permettent de choisir un cuboïde plein et/ou avec les arêtes cassées.

    Contenu masqué

      Réagissez ou répondez à ce message afin de consulter le contenu masqué.

     

     

    -Escaliers en colimaçon-

     

    Comme je l'ai promis, ici nous n'auront pas affaire à une triple boucle... Mais à une seule.

    Déjà, il faut se poser la problématique: comment résumer un escalier (en colimaçon) ?

    Voici une façon de voir les choses (en tout cas c'est comme ça que l'on va les voir dans mon code !):

    • Quelque chose qui monte (on avance de 1 bloc, on en monte de 1)
    • C'est comme un escalier normal, sauf qu'il y a toujours quelque chose qui le dévie, de façon régulière. Il change de direction tous les x blocs.

    À partir de là, on peut s'imaginer la structure du code: une boucle pour chaque hauteur de bloc, une variable qui indique la direction actuelle de l'escalier, et une valeur qui augmente à chaque tour, jusqu'à un certain seuil -la longueur du côté de l'escalier en fait- et qui à ce moment là va faire changer la direction de l'escalier.

     

    On va donc créer une variable {_dir} qui nous donne la direction de notre escalier, et qui va prendre une valeur numérale entre 0 et 3 -pour les 4 directions est, sud, ouest et nord-. À chaque boucle, on modifiera des variables correspondant aux coordonnées du bloc à poser. le Y augmentera en permanence de 1, alors que X et Z dépendront de la valeur de {_dir}. Pour optimiser le code, on utilisera la valeur de Y pour déterminer si il faut changer de direction (en testant si le Y actuel est divisible par la largeur de l'escalier).

     

     

    -Code complet-

     

    Contenu masqué

      Réagissez ou répondez à ce message afin de consulter le contenu masqué.

     

    [spoiler=Résultat]En route !

    [ATTACH=full]5567[/ATTACH]

     

    Argh ! C'est haut !

    [ATTACH=full]5568[/ATTACH]

     

     

     

    -Conclusion-

     

    Dans cet épisode, nous avons vu comment générer des structures de façon automatisée. Je trouve très intéressant de comprendre qu'est ce qui, au niveau mathématique et géométrique, se cache derrière des structures comme celles là. J'espère que ce tuto vous aura plus, malgré le petit retard par rapport au 2 précédents ^^

    N'hésitez pas à proposer d'autres idées de structures à générer, ou bien une autre idée pour un futur tutoriel !

     

    4rno

    • J'aime 1

  3. Bonjour,

    tu utilises visiblement à la fois des espaces et des tabulations dans l'indentation de ton code, ce qui provoque effectivement une erreur dans ton code; essaie d'activer l'affichage des caractères invisibles dans ton éditeur de texte, cela te permettra de mieux visualiser les caractères utilisés.

     

     

    Cdlt,

    RebellCraft


  4. La condition "contains" n'accepte que de comparer des éléments de même type, or là la variable {_nbt} était de type "NBT list".

    Tu dois donc utiliser pour ta condition:

    Contenu masqué

      Réagissez ou répondez à ce message afin de consulter le contenu masqué.

     

    Cdlt,

    RebellCraft

    • J'aime 1

  5. Bonjour,

    pour supprimer une supprimer une news (ou tout simplement un élément d'une liste); j'ai personnellement 2 méthodes:

    • Soit il t'envoie la liste dans le chat des news, avec leur index, à ce moment là tu dois indiquer dans la commande l'index de la news à supprimer.
    • Sinon si tu veux un truc plus "user-friendly"; tu utilises un gui d'inventaire avec chaque fois un item par news, et le joueur clique sur la news à supprimer (à ce moment là on pourrait aussi imaginer qu'en fessant un clic drop -> supprimer; et un clic souris -> éditer ^^).

    La première option est plus simple à programmer, cependant j'ai déjà fait des systèmes de gui semblables, donc je pourrais te passer le code nécessaire ;)

     

    Cdlt,

    RebellCraft


  6. Si ce n'est disponible directement en Skript, il te reste plus qu'à calculer toi même quel jour de la semaine nous sommes !

     

    Pour cela, essaye de te fixer une date absolue (utilise n'importe quel date passée, mais sache que jour de de la semaine c'est (ex. Lundi 3 avril 2017)); ensuite calcule il y a combien de jours entre aujourd'hui et ta date "repère" (dans mon exemple 9 jours), puis utilise l'opération modulo 7 (c'est le reste de la division) pour pouvoir trouver -par rapport au jour de la semaine de ta date repère-, quel est celui d'aujourd'hui (ici 9modulo7 = 2, et 2 jour après le lundi c'est le mercredi).

     

    Cdlt,

    RebellCraft


  7. :'(

    modifie

    Contenu masqué

      Réagissez ou répondez à ce message afin de consulter le contenu masqué.

    en

    Contenu masqué

      Réagissez ou répondez à ce message afin de consulter le contenu masqué.

    Ce qu'il fait, c'est le modulo 60(le modulo est l'opération mathématique qui consiste à trouver le reste d'une division, ici par 60) de ton nombre de minutes; si par exemple le nombre de minutes est de 84, le modulo sera 24; et si il est de 1662, le modulo sera de 42 (omg le sens de la vie :O).

     

    Cdlt,

    RebellCraft


  8. @DQMNSWIIZ fait attention à ne pas utiliser à la fois des tabulations, et à la fois des espaces pour incrémenter un bloc de code; skript bug si tu fais ça.

    Je ne sais pas quel éditeur de texte tu utilises, mais dans tous ceux qui se respectent, tu as une option permettant de voir les caractères invisibles, c'est beaucoup plus pratique quand tu codes.

     

    Exemple, ici les tabulations sont représentés par des flèches, et les espaces par de petits points

    [ATTACH=full]4821[/ATTACH]


  9. Bonjour,

    le problème est que le serveur ne va pas recharger automatiquement la map. Cela est encore plus gênant car par la suite, il pourrait enregistrer par dessus ta map restaurée lorsque qu'il s'éteindra.

    Il te faut d'abord "décharger" le monde du serveur pour être sûr qu'il soit sauvegardé, et de même pour remettre une sauvegarde (et dans ce cas là tu le recharge juste après).

    Je suppose que tu utilise Multiverse-core, voici un bout de code qui fonctionne pour restaurer une map (en remplaçant les bonnes valeurs ^^):

    Contenu masqué

      Réagissez ou répondez à ce message afin de consulter le contenu masqué.

    • J'aime 1

  10. @DofyGame Ok x')

    Bon, l'idée, c'est que lorsque tu va poser ton portail de l'end, ça va ajouter à une variable liste la position du bloc posé.

    Lorsque tu va marcher sur un bloc de portail de l'end, tu va ajouter une condition pour vérifier que la position du bloc sur lequel marche le joueur est contenue dans la variable liste; si c'est le cas, ton bloc est bien piégé, sinon c'est un bloc "normal".

    Dans ce cas, tu devra aussi retirer le bloc de la variable liste si celui-ci venait à être cassé.

     

    @Aligatoror Malheureusement, après tests, les NBT ne sont pas sauvegardés sur des blocs "non-conteneurs" :/

×
×
  • Créer...

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.