Aller au contenu

Classement

Contenu populaire

Affichage du contenu avec la meilleure réputation le 31/12/2017 dans toutes les zones

  1. 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 : [re]load [non[(-| )]relative] [y[a]ml] %string% [as %-string%] 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. #Racine #Si serveur est sur le disque D:/ (pour Windows), alors la syntaxe ressemblerait à ceci load non-relative yaml "RootFolder/MyAwesomePlugin/config.yml" #Vous pouvez aussi spécifier le disque vous-mêmes load non-relative yaml "C:/RootFolder/MyAwesomePlugin/config.yml" #Si vous êtes vraiment borné et que vous voulez utiliser le chemin à chaque fois, voici comment load yaml "plugins/MyAwesomePlugin/config.yml" as "plugins/MyAwesomePlugin/config.yml" set yaml value "version" from "plugins/MyAwesomePlugin/config.yml" to 1.0 broadcast "%yaml value ""version"" from ""plugins/MyAwesomePlugin/config.yml""%" # Ces deux effets produisent un même identifiant : "config" load yaml "plugins/MyAwesomePlugin/config.yml" load yaml "plugins/MyAwesomePlugin/config.yml" as "config" 2. Modifier les valeurs : [[skript-]y[a]ml] (1¦value|2¦(node|path)[s]|3¦(node|path)[s with] keys|4¦list) %string% (of|in|from) %string% [without string checks] 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 : set skript-yaml value "test1.test2" from "config" to "test3" set skript-yaml list "list.name" from "config" to {_list::*} set {_test} to skript-yaml value "test1.test2" from "config" broadcast "%{_test}%" 3. Sauvegarder votre fichier : save [y[a]ml] %string% Permet de sauvegarder le YML spécifié dans son fichier correspondant. C'est le seul moment où vous modifiez le fichier. Exemple : save yaml "config" 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 : unload [y[a]ml] %string% Exemple : unload yaml "config" Permet tout simplement de supprimer un YML de la mémoire. À n'utiliser que si vous voulez supprimer les changements non sauvegardés. Syntaxe : [(the|all (of the|the))] [currently] loaded y[a]ml [files] Exemple : set {_list::*} to the currently loaded yaml files broadcast "%{_list::*}%" Retourne la liste de tous les configurations YML chargées par "load yaml" Syntaxe : [all] [[skript-]y[a]ml] (node|path)[s] (of|in|from) %string% Exemple : set yaml value "test1.test2" from "config" to "test3" set yaml value "boop.beep" from "config" to "bop" set {_list::*} to all yaml nodes of "config" broadcast "%{_list::*}%" 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 : y[a]ml[s] %strings% (is|are) loaded y[a]ml[s] %strings% ((are|is) not|(is|are)n[']t) loaded 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 : [skript-]y[a]ml [(node|path)[s]] %strings% (of|in|from) %string% has value [skript-]y[a]ml [(node|path)[s]] %strings% (of|in|from) %string% does(n't| not) have value Exemple : set skript-yaml value "test.test" from "config" to "test" yaml path "test.test" in "config" has value: # toujours vrai broadcast "has value" Retourne vrai si le chemin spécifié existe/a une valeur. Syntaxe : [the] comment[s] (of|from) [y[a]ml] node[s] %strings% (of|in|from) %string% [the] (comment[s] (at|on) [the] top of |header (of|from)) %string% Exemple : set the comments of yaml node "test" from "config" to "First line" and "Second line" delete the comments of yaml node "test" from "config" set {_header::*} to "First line" and "Second line" set the comments at the top of "config" to {_header::*} delete the comments at the top of "config" set the header of "config" to "First line" and "Second line" delete the header of "config" set the header of "config" to {_header::*} 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)
    5 points
  2. slt pour command /title: trigger: send player title "&aTitle" with subtitle "&bSubTitle" for 2 second voila pour un message en plein milieu de l'ecran
    3 points
  3. on join: set {ks.%player%} to 0 on quit: clear {ks.%player%} on death: victim is a player: set {ks.%victim%} to 0 attacker is a player: {ks.%attacker%} < 9: add 1 to {ks.%attacker%} else: execute console command "key %attacker%" set {ks.%attacker%} to 0
    2 points
  4. Bonjour, c'est une fonction vraiment toute simple mais qui à tout de même son utilité et surtout qui évite de taper toujours le même code (De plus ça peut éviter certains bugs :p) function NumRange(num: number, min: number, max: number) :: number: if {_num} < {_min}: set {_num} to {_min} else if {_num} > {_max}: set {_num} to {_max} return {_num} Exemple d'utilisation: set {_n} to -10 set {_n} to NumRange({_n}, 0, 999) broadcast "%{_n}%" #Le broadcast renverra donc la valeur 0
    2 points
  5. Tu sais qu'il y a des tutos pour apprendre skript !
    2 points
  6. Version de minecraft / skript : 1.8.x Type du skript : Skript d'automatisme Description du script : Bonjour, Bonsoir; Je souhaiterais un skript qui permettrait de casser automatiquement de la cobble ou de la stone si elle est dans une configuration bien special. En effet, je voudrais que la Stone/Cobble qui est situer au dessus d'un hopper qui lui même est situer sur un bloc de diamant soit dropper a cette endroit. Si possible, il faudrai que le bloc soit miner que si le lever qui est poser sur le bloc de diamant est activé. J'utilise tout les add-ons de skript 1.8. Merci de votre aide et bonne journée et Bonne année 2018 !
    1 point
  7. Pour que le joueur ne puisse pas poser de bedrock il suffit juste qu'il n'en ait pas dans son inventaire : On inventory click: if event-item is a bedrock: cancel event wait 1 ticks remove 64 bedrock from the player's inventory Je pense que ça te va :) Darkonight PS: Si tu veux que les admins puissent eux en poser demende moi !
    1 point
  8. Ok bah j'ai un problème alors ^^ function loadYML(): unload yaml "GA-Messages" if dir "plugins/GiveAll" doesn't exist: create dir "plugins/GiveAll" if file "plugins/GiveAll/messages.yml" does not exist: download from "https://raw.githubusercontent.com/noftaly/GiveAll/master/messages.yml" to "plugins/GiveAll/messages.yml" load yaml "plugins/GiveAll/messages.yml" as "GA-Messages" function YMLValue(node: text) :: text: set {_res} to skript-yaml value "%{_node}%" from "GA-Messages" return colored {_res} on load: loadYML() wait 1 second set {_bc} to YMLValue("Prefixes.Prefix") broadcast "Debug: (Préfix) %{_bc}%" 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 broadcast "Debug: (Préfix) %{_bc}%" me renvoie "Debug: (Préfix) <none>" Lien de mon yml Merci d'avance :)
    1 point
  9. Mets ce code à la place: command /listejoueur: permission: grade.modo trigger: set {_templist} to 0 open chest with 5 row named "&6Liste des joueurs connectés" to player loop all players: {_templist} < 46 format gui slot {_templist} of player with skull of loop-player named "&6%loop-player%" with lore "&7Clique pour ouvrir le menu d'interaction de ce joueur" to run player command "/interactlistejoueur %loop-player%" add 1 to {_templist}
    1 point
  10. Un grand merci a toi sa marche le else if "%{_role}%" = "recruit": je passe en résolue
    1 point
  11. Ouais mais la ca fait mal aux yeux tout vos code... passe sur TuSKe, tu te simplifieras la vie niveau 1000
    1 point
  12. il faut que tu mette un temp d'attente avant la mise des items: command /menu: trigger: open chest with 5 rows named "&8Menu Principal" to player wait 1 ticks format slot 2 of player with 388 named "&2Shop" to run [make player execute command "/warp shop"] format slot 4 of player with 2 named "&bSky&fblock" to run [make player execute command "/skyblock"] format slot 6 of player with 323 named "&6Warps" to run [make player execute command "/mwarp"] format slot 12 of player with 58 named "&3Events" to run [make player execute command "/event"] format slot 14 of player with 268 named "&eArene" to run [make player execute command "/warp arene"] format slot 18 of player with 160:5 named "&4" to run [make player execute command "/menu"] format slot 19 of player with 160:5 named "&4" to run [make player execute command "/menu"] format slot 20 of player with 160:5 named "&4" to run [make player execute command "/menu"] format slot 21 of player with 160:5 named "&4" to run [make player execute command "/menu"] format slot 22 of player with 160:5 named "&4" to run [make player execute command "/menu"] format slot 23 of player with 160:5 named "&4" to run [make player execute command "/menu"] format slot 24 of player with 160:5 named "&4" to run [make player execute command "/menu"] format slot 25 of player with 160:5 named "&4" to run [make player execute command "/menu"] format slot 26 of player with 160:5 named "&4" to run [make player execute command "/menu"] format slot 27 of player with 339 named "&bInformations" to run [make player execute command "/info"] format slot 31 of player with 355 named "&f/hub" to run [make player execute command "/spawn"] format slot 35 of player with 352 named "&2Pets" to run [make player execute command "/pet"] format slot 36 of player with 266 named "&eBoutique In-Game" to run [make player execute command "/boutique"] format slot 40 of player with 397:3 named "&3Bon jeux %player%!" to be unstealable format slot 44 of player with 368 named "&2Cosmétique" to run [make player execute command "/cosmetique"] command /boutique: trigger: open chest with 1 row named "&3Shop:" to player wait 1 ticks format slot 0 of player with 160:5 named "&4" to run [make player execute command "/boutique"] format slot 2 of player with 160:5 named "&4" to run [make player execute command "/boutique"] format slot 3 of player with 160:5 named "&4" to run [make player execute command "/boutique"] format slot 5 of player with 160:5 named "&4" to run [make player execute command "/boutique"] format slot 6 of player with 160:5 named "&4" to run [make player execute command "/boutique"] format slot 8 of player with 160:5 named "&4" to run [make player execute command "/boutique"] format slot 1 of player with 310 named "&cKits" to run [make player execute command "/kitgui"] format slot 4 of player with 388 named "&cGrades" to run [make player execute command "/grade"] format slot 7 of player with 3:0 named "&cItem" to run [make player execute command "/item"]
    1 point
  13. Mmh c'est pas tout à fait ce que je voulais dire, j'étais plus sur le fait que les cheats sont pas les mêmes, et que du coup, les méthodes pour les stopper sont pas les mêmes non plus. Mais d'un autre côté, ce que tu dis est aussi rendu faux par le fait que tous les cheats ne sont pas liés au déplacement : forcefield, X-ray, régénération instantanée, invincibilité, et d'autres auxquels j'aurai pas pensé. Mais bref, ce que je veux dire, c'est qu'un anti-fly ne permet pas d'empêcher un forcefield et un anti-forcefield n'empêche pas un X-ray. Mais juste : "un robot ne sera jamais plus fort qu’un humain" est faux, l'automatisation et la robotisation sont partout parce que plus performants que les humains !
    1 point
  14. ça marche aussi merci a vous 2
    1 point
  15. Voilà: Testé sous spigot 1.11.2 devrait fonctionné pour toi :) Si tu a un probleme encode ton skript en UTF-8 on chat: if message contains "<3": replace "<3" with "❤" in the message
    1 point
  16. on chat: replace every "<3" with "❤" in message
    1 point
  17. options: vote: &f&l[&c&lVotes&f&l] command /vote: trigger: set {_lastuse.vote.%player%} to difference between {lastuse.vote.%player%} and now if {_lastuse.vote.%player%} is less than 3 hours: send "{@vote} &cMerci d'attendre &e%difference between 3 hours and {_lastuse.vote.%player%}% &cavant de pouvoir refaire la commande &e(/vote)" else: give 1 emerald to player send "{@vote} &aVous avez voté." set {lastuse.vote.%player%} to now
    1 point
  18. Pas vraiment, car enfaite on imagine le combat suivant: Anarchick attaque 3 coups sur Noftaly, du coup le code sera exécuté à chaque fois, sur les 3 coups. Résultat, le dernier coup porté par Anarchick aura le timer de 30 secondes, et si Noftaly tombe, il n'y aura pas de soucis. Cependant, tu m'as fais tilté sur quelque chose qui pourrait se compliquer: si le combat s'exerce entre 3 joueurs. (ou plus) Et là, pour le coup ton: if difference between now and {attacker.%victim%} is more than 30 seconds: est très important, car le problème est réglé. Du coup, j'ai édité le code principal :)
    1 point
×
×
  • 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.