Syst3ms 102 Posté : 31 décembre 2017 Skript-YAML : le bon YML Me voici à nouveau pour un autre tutoriel ! Et vous savez parfaitement que quand je fais un tutoriel, c'est que quelque chose me tient à coeur. Sans plus tarder, commençons. Si vous ne savez pas ce qu'est le YML, faites une recherche, puis lisez ce tuto. Le YML avant : Le YML est le format de configuration officiel de Bukkit. Skript permettant de faire des pseudo-plugins, il est logique qu'on veuille répliquer le fonctionnement d'un vrai plugin, d'où l'idée du YML. Et le YML dans Skript alors ? Ben, ça puait. Toutes les syntaxes qui offraient la fonctionnalité du YML avaient le même défaut : elles lisaient et interprétaient le fichier en entier à chaque fois. C'est comme si, pour trouver une réplique dans une pièce de théâtre, vous deviez lire la pièce en entier à chaque fois avant de trouver votre réplique (RPZ la seconde). Pas optimisé DU TOUT. Ah, et si vous voulez une preuve, voici un test de performance réalisé par Rezz : Pour les stats : C'est 53 fois plus lent de changer une valeur YML qu'une variable normale et 28 fois plus lent d'en obtenir (get). Changer une valeur YML prend 25,5 ms contre 0.472 ms pour une variable normale. Ça représente en peu plus de la moitié du temps qu'une balle de baseball reste en contact avec la batte (merci WolframAlpha). Obtenir une variable YML prend 17,3 ms contre 0,616 ms pour une variable normale Je vous laisse vérifier ces chiffres par vous-mêmes. Gardez en tête que ce sont des moyennes, et qu'il y a des chances qu'elles soient légèrement éloignées de la réalité. Au passage, les 4 addons (oui, quatre) qui ont cette fonctionnalité sont WildSkript, skQuery, Skellett, skUtilities. Déjà que j'aime pas WildSkript en général, alors si vous utilisez le YML de WildSkript, je vais vous réduire en salade de fruits. Bon, comme vous le voyez, j'ai quelques raisons pour dire que le YML tel que vous le connaissez, c'est de la bonne grosse daube. Bon, vous vous doutez bien que je ne vais pas m'arrêter là, donc continuons. Le YML maintenant : NB : quand je dis "maintenant", je veux dire "ce à quoi c'est censé ressembler maintenant". Récemment, l'addon skript-yaml, développé par Sashie, développeur de skDragon est sorti.... Putain que c'est mieux. Mais bon, il y a un peu d'explications nécessaires pour comprendre pourquoi c'est mieux, et surtout, comment l'utiliser. Le fonctionnement : Avant, on chargeait tout le fichier à chaque fois qu'on essayait de faire quoi que ce soit avec le fichier. Maintenant, ça fonctionne de la façon suivante : On charge le fichier en mémoire. Ça veut dire qu'on ne lit et traverse le fichier qu'une fois. Ensuite, les valeurs récupérées sont stockées quelque part dans la mémoire, prêtes à être utilisées. Là, on fait ce qu'on veut avec nos valeurs. Mais il est crucial de noter que on ne modifie RIEN sur le fichier. Une fois qu'on a fini d'éditer nos valeurs, il n'y a plus qu'à sauvegarder le YML. C'est le seul moment où on modifie le fichier. Bon, c'est bien gentil de savoir le principe, mais c'est encore mieux de pouvoir l'utiliser concrètement, non ? A) L'utilisation : 1. Charger le fichier YML : Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Cet effet charge un fichier YML en mémoire. Le premier "%string%" est le chemin de votre fichier YML qui va être chargé en mémoire, c'est celui qui vous utiliseriez avec n'importe quelle autre syntaxe YML. Si vous utilisez "[non[(-| )]relative]", alors le chemin commencera à la racine de votre disque dur au lieu du dossier de votre serveur. Le second "%string%", optionnel, représente l'identifiant donné à ce fichier, utilisé dans les syntaxes suivantes. Vous vous doutez bien qu'on va pas taper tout le chemin à chaque fois, ce serait totalement absurde et ce serait signe d'une mauvaise fonctionnalité, non ? Vous voyez où je veux en venir, hein ? Si ce paramètre est omis, alors on prendra le nom du fichier sans ".yml". Donc pour "config.yml", on gardera "config" comme nom. Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. 2. Modifier les valeurs : Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Comme vous pouvez la voir, cette expression ne diffère pas trop des anciennes. Pour éviter tout risque de conflit, je suggère d'utiliser "skript-yaml" au début. Le premier "%string%" simplement votre valeur telle que vous l'utiliseriez avec un YML standard. Pas de changements de ce point de vue-là. Le second est l'identifiant du YML chargé en mémoire. Attention, ce n'est pas le chemin du fichier. En reprenant l'exemple de la syntaxe précédente, on mettrait simplement "config". Enfin, si vous ajoutez "without string checks", l'expression retournera un texte quoi qu'il arrive, sans essayer de le convertir en nombre ou en booléen. Ça peut rendre votre code un tout petit peu plus rapide. Exemple : Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. 3. Sauvegarder votre fichier : Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Permet de sauvegarder le YML spécifié dans son fichier correspondant. C'est le seul moment où vous modifiez le fichier. Exemple : Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. B) Autres fonctionnalités: Vous vous en doutez sûrement, mais skript-yaml ne se limite pas à ces trois syntaxes. Les syntaxes suivantes ont leur utilité, mais il est probable que vous ne les utiliserez que dans certains cas. Syntaxe : Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Exemple : Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Permet tout simplement de supprimer un YML de la mémoire. À n'utiliser que si vous voulez supprimer les changements non sauvegardés. Syntaxe : Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Exemple : Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Retourne la liste de tous les configurations YML chargées par "load yaml" Syntaxe : Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Exemple : Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Retourne tous les noms des entrées d'une config YML. L'exemple au-dessus enverra "test1, test1.test2, boop and boop.beep" dans le chat. Syntaxe : Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Même pas besoin d'exemple pour celui-là, retourne vrai si la config YML spécifée a été chargée en mémoire. Syntaxe : Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Exemple : Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Retourne vrai si le chemin spécifié existe/a une valeur. Syntaxe : Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Exemple : Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Obtient, édite ou supprime les commentaires ou le header d'une config YML : Les headers ne contiennent pas '#' donc ajoutez-les si vous le voulez Les commentaires doivent se trouver à la racine. Exemple : 'root', et non 'root.something' On peut passer plusieurs valeurs aux commentaires et headers Cette expression ne modifie pas le fichier (ndlr : c'est une traduction) En espérant que ça vous ait aidé, je vous dis à plus tard. Je dirais même plus, à l'année prochaine ! HAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAAAAAAAA !!!! ...elle est nulle je sais. ...vous vous y attendiez hein ? ...c'est bien ce que je pensais. ... ...Qu'est-ce que vous foutez à lire ça ? (c'est ironique je vous rassure) 7 Partager ce message Lien à poster Partager sur d’autres sites
noftaly 497 Répondu : 31 décembre 2017 Super tuto ! Mais tu ne nous as pas dit comment récupérer une valeur :( (à moins que j'ai mal compris -> fort probable) Partager ce message Lien à poster Partager sur d’autres sites
Syst3ms 102 Répondu : 31 décembre 2017 C'est la syntaxe de "modifier les valeurs". Partager ce message Lien à poster Partager sur d’autres sites
noftaly 497 Répondu : 31 décembre 2017 Donc par exemple Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. c'est ca ? 1 Partager ce message Lien à poster Partager sur d’autres sites
Syst3ms 102 Répondu : 31 décembre 2017 Oui, c'est ça Partager ce message Lien à poster Partager sur d’autres sites
noftaly 497 Répondu : 31 décembre 2017 Ok bah j'ai un problème alors ^^ Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Et ca ne fonctionne pas... Mon dossier se créé, mon fichier se créé, le contenu de mon GitHub se colle dans mon .yml, mais cette ligne Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. me renvoie "Debug: (Préfix) <none>" Contenu masqué Réagissez ou répondez à ce message afin de consulter le contenu masqué. Merci d'avance :) 1 Partager ce message Lien à poster Partager sur d’autres sites
Soufreur78 189 Répondu : 18 janvier 2018 Trés bon tuto @Syst3ms. Mais imaginons j'ai mon fichier "Stats" avec dedans 1 .yml par joueur (Le nom du .yml c'est l'UUID du player) Si le joueur meurt et je veux rajouter +1 aux morts du joueur dans son .yml : - Je dois load, modifier, sauvegarder ? Et si le joueur fait /stats et que je veux récupérer les valeurs dans son .yml ! - Je load, récupére les données, unload ? C'est vraiment utile de load puis sauvegarde/unload à chaque petite action ? Ou alors je load le fichier du joueur quand il se connecte et puis sauvegarde quand il se déconnecte ? Partager ce message Lien à poster Partager sur d’autres sites
Syst3ms 102 Répondu : 18 janvier 2018 Trés bon tuto @Syst3ms. Mais imaginons j'ai mon fichier "Stats" avec dedans 1 .yml par joueur (Le nom du .yml c'est l'UUID du player) Si le joueur meurt et je veux rajouter +1 aux morts du joueur dans son .yml : - Je dois load, modifier, sauvegarder ? Et si le joueur fait /stats et que je veux récupérer les valeurs dans son .yml ! - Je load, récupére les données, unload ? C'est vraiment utile de load puis sauvegarde/unload à chaque petite action ? Ou alors je load le fichier du joueur quand il se connecte et puis sauvegarde quand il se déconnecte ? C'est plutôt le dernier cas qu'il faut choisir. Imagine que tu devais mettre load & save à chaque fois. Et bah en gros, le YML avant ça faisait ça. 1 Partager ce message Lien à poster Partager sur d’autres sites
Soufreur78 189 Répondu : 18 janvier 2018 C'est plutôt le dernier cas qu'il faut choisir. Imagine que tu devais mettre load & save à chaque fois. Et bah en gros, le YML avant ça faisait ça. Ok merci pour cette réponse rapide :) Je me doutais bien qu'il fallait utiliser la derniére solution mais : - On peut stocker combien de fichier en mémoire sans risque ? Car si je load le .yml de chaque joueur le temps qu'il soit connecté ça va faire beaucoup de chose en mémoire (Il n'y a que 30 lignes dans les .yml des joueurs). - Et si j'ai bien compris quand je vais load le .yml -> Modifier une valeur-> Si je get la valeur modifiée : je vais bien récupérer la valeur comme elle a été modifiée juste avant ? Car le .yml n'a pas été sauvegardé Partager ce message Lien à poster Partager sur d’autres sites
Syst3ms 102 Répondu : 18 janvier 2018 Quand tu récupères une valeur, ça la prend depuis la mémoire, sinon ce serait totalement inefficace. Si tu as un quelconque problème de mémoire, c'est que tu auras réussi à causer un erreur mémoire à Java. Donc non, il y a peu de chances que ça arrive. Il faut que tu retiennes ceci : seul l'effet 'save' - et 'load' si on veut - accèdent au fichier, rien d'autre. 1 Partager ce message Lien à poster Partager sur d’autres sites