Aller au contenu

Classement


Contenu populaire

Affichage du contenu avec la meilleure réputation depuis le 09/27/20 dans Messages

  1. 8 points
    Salut à toi et bienvenue sur ce tutoriel ! Dans ce post je vais te faire découvrir ou t'apprendre les listes. Premièrement, une liste est un "tableau", ou vous renseignez une id et une valeur (donnée). Je vous montrerai : I. Représentation codée d'une liste II. Comment add une donnée à votre tableau III. Comment delete une donnée de votre tableau IV. Comment lister votre tableau V. Conditions de listes VI. Comment générer une entrée aléatoire de votre tableau VIII. Comment supprimer votre tableau IX. Conclusion I. Représentation codée d'une liste. Pour utiliser une liste dans votre code, une liste se présente comme cela: {liste::*} -> Comme une variable, a laquelle on ajoute "::" après la premiere "partie" de variable, qui ici est "liste". Si l'on met une étoile ("*"), toutes vos entrées (chaque ligne du tableau, pour reprendre la représentation) sont concernées. Si l'on met {liste::uneentrée}, alors c'est votre entrée "uneentrée" qui sera concernée. II. Ajout de donnée à un tableau. Premièrement, nous allons ajouter une entrée à notre tableau. Pas besoin d'un effet pour créer ce tableau, il existe a partir du moment ou vous ajoutez une entrée. Exemple : j'ajoute une entrée de type texte à mon tableau (liste): Cela donne ( en ligne d'effet ) : add "Hello" to {mots::*} Donc ici, on créer une nouvelle ligne avec comme valeur "Hello". III. Retirer une donnée d'un tableau Ensuite, nous allons retirer une entrée à notre tableau. Pour retirer cette entrée, nous allons faire: Cela donne (en ligne d'effet ) remove "Hello" from {mots::*} Comme cela, on retire la ligne qui porte la valeur "Hello" dans la liste "mots". IV. Lister notre tableau Ici, en reprenant toujours en encore notre même liste "mots", nous voulons lister, simplement ce tableau. Comment allez vous me dire ? Je vais vous montrer 2 types d'affichage de listes. La première, la plus simple, comme mon ami @imSizk vous l'a sûrrement expliquée, est, l'affichage comme une variable : send "%{mots::*}% Une méthode plus poussée, que j'utilise utilise la notion de loop. Je ne l'ai pas encore expliquée mais ne cherchez pas, lisez juste ce que je vous dit ;) Donc, pour listez correctement notre tableau, on va utiliser le loop. Cela se déroule sous cette forme : loop {mots::*}: send "%loop-index% -> %loop-value%" De cette manière, on va nous dire "numéro de la ligne -> valeur de la ligne" V. Génération aléatoire d'une ligne de la liste Pour générer quelque chose d'aléatoire, il vous suffit d'avoir cet effet : set {_donneealéatoire} to a random element of {mots::*} Ici on met la variable temporaire "donnealéatoire" sur un élément aléatoire de la liste "mots". VI. Conditions de liste Pour les conditions de liste, certains mon posés la question : "C'est bien les listes, mais comment je fais pour savoir si une donnée est déjà mise dans la liste ?". Donc je vais vous répondre ici ! : Pour voir si une donnée est déjà rentrée, une donnée ajoutée à la liste est "mise" dans la liste, donc elle "existe" dans la liste. Pour ce faire voici une condition : if {mots::Hello} is set: send "Hello" Chose très bête hein ^^ Mais vous pouvez remplacer le "Hello" dans la condition par un "%arg-1%" s'il s'agit d'une commande. VII. Supprimer une liste Après tout ça et en chapitre "final" du tutoriel, je vous propose de voir un effet qui vous permettre de remettre à zéro une liste. Voici l'effet concerné : clear {mots::*} L'effet "clear" vous permet de nettoyer votre liste. Et, comme je vous l'ai dit précédemment, une liste sans ligne est une liste nule, donc inexistante, donc elle est supprimée ! VIII. Conclusion Les listes sont, pour moi une des choses les plus importantes dans Skript, vous pouvez ajouter des informations, les récupérer les supprimer, etc... (Je vous invite à voir l'algorithme conçu à l'ajout automatique de données dans une liste en cliquant ici) Merci à vous d'avoir suivi ce tutoriel, n'hésitez pas à mettre un like pour m'encourager à vous faire des tutos complets ! :) Cordialement, Hugo / Azen.
  2. 6 points
    Bienvenue dans mes premiers tutoriaux sur Apprendre le Skript ! Dans ce premier épisode,nous allons déjà apprendre à installer Skript,et un peu commencer le code. Tout d'abord,il vous faut un logiciel de traitement de texte.C'est assez con mais il vous en faut un bon.Même le bloc-note suffit,ou vous pouvez opter pour SublimeText,Notepad... il faut juste que vous soyez à l'aise.Pour Notepad++,cliquez ici pour voir un tutoriel qui vous permettra de tous voir en couleur etc pour vous faciliter la vie. Ensuite,il vous faut un serveur,spigot de préférence mais bukkit marche aussi,peu importe la version.Ensuite,vous devez télécharger Skript,je vous conseille la 2.2 fixe qui est vraiment pas mal. ICI Une fois téléchargé,mettez Skript dans votre fichier plugins sur votre serveur,tout marche à présent. Optionnel: Vous aurez forcément besoin d'addons,donc jvous conseille de les téléchargez maintenant: pack Une fois fait,prenez les .jar de votre version,et pareil,dans le dossier plugins ! I) Commençons par le commencement ! > Bon,c'est bien long de faire tout ça,mais on a envie de coder nous ! Oui oui,attendez,déjà,allez dans le fichier "Skript" qu'à générer le .jar.Allez dans "scripts" Vous verrez un tas de merde Skript avec un petit tiret avant chaque nom >Cool mais à quoi ça sert ? les tirets servent à désactiver le skript :) > On a qu'à le supprimer lol Ben non,si on le développe et qu'il a des erreurs et qu'on stoppe le développement un moment,ça évide qu'à chaque /reload y'as ses erreurs :) Donc,pour commencer,créer un fichier .txt que vous renommez "votrenom.sk" (Le .sk est très important pour que skript reconnaisse le fichier !) Ouvrez le avec l'éditeur de texte de votre choix,pour commencer un code,ce sera toujours pareil ! Skript se compose de plusieurs choses: > Evenements > Variables > Commandes custom > Effect > Conditions > Fonctions > Breeeeeeeeeeef Pour commencer un code,il y a deux grandes "manières" de commencer un code. Détecter un évènement (Qu'on va faire dans ce tuto) Créer une commande custom ( Pas maintenant <: ) II) Les évènements Pour commencer,on va apprendre à éxecuter un effet.Qu'est-ce qu'un effet ? C'est quelque chose qui se passe après une certaine action ou commande.Par exemple,l'effet de kill quelqu'un,vous comprenez ? Au cas ou,je fais un exemple ;x on damage: #Alors la on dit "Quand un joueur reçoit des dégats" kill the victim #On tue la personne qui s’est pris les dégats (Pour un système de mort subite par exemple) Donc,pour commencer,on met l'évènement au bord (Clique >ici< pour la liste des évènements sans addons) on break: A noter qu'il y a toujours un ":" à la fin de chaque évènement ! Il signifie que vous devez retourner à la ligne et faire une tabulation après (Pour tabulation,faire "TAB",ou 4 espaces,mais dans un code,faite soit l'un soit l'autre !).Vous pouvez préciser la plupart des évènements ! on break of stone: Ici,on précise que les effects ne se font que si le block cassé est de la stone ! Ensuite,après la tabulation,on fait un effect.Les effects n'ont jamais (Sauf cas rares comme loop all players ou autres) mais alors jamais de ":",donc les effets s'alignent comme ça: on break: # Quand un block se casse cancel event # Permet d'arrêter l'évènement,et de réinisialiser.Par exemple,la le block va se remettre,si un outil a été utilisé,sa durabilité sera comme avant,bref wait 1 second # Demande à skript d'attendre une seconde après avoir cancel l'event kill the player # Tue le joueur qui l'a cassé message "&aTu as cassé un block,tu as été tué par Mère Nature !" Voila,vous pouvez maintenant,quand un évènement se produit,produire des effets ! Liste des effets: ici Vous pouvez voir que touts les effets sont alignés,effets les plus utiles: broadcast "Message" > Permet de mettre un message à tout les joueurs message "Message"> Permet de faire un message privé au joueur qui a éxecuté l'évènement kill the player/victim/attacker > Tue le joueur,pour victim et attacker,c'est seulement dans les évènements de pvp ! (On damage,on death...) wait "Nombre" "ticks/seconds/minutes..." Permet d'ordonner à Skript d'attendre clear the player's inventory > Permet de clear l'inventaire du joueur cancel event > Le fameux ! Permet d'annuler l'évènement ! J'ai dit dans les grandes lignes,après on peut rajouter énormément de choses dans ces effects la. C'est la fin de ce tutoriel,prochain tutoriel assez court mais je vous dirais comment créer une commande ;) N'hésitez pas à me dire ce qui va pas pour que j'édit tout ça ! > J'ai rien compris mec Alors poste ta demande dans les commentaires de ce topic ! :D Apprendre le skript #2 : ici
  3. 5 points
    — Pourquoi skript-gui ? Cet add-on est un fork, une copie améliorée de TuSKe (Pikachu Patch 3) spécialement dédié pour la création de vos GUI. ↪ Celui-ci est désormais le seul et unique add-on que je recommande ; l'auteur de TuSKe ne le mettant plus à jour et donc de nombreux bugs restent non résolu. — Téléchargement L'auteur de skript-gui (APickledWalrus) a décidé de le mettre à disposition sur GitHub. ↪ Vous pouvez télécharger la dernière version stable à cette adresse, et glissez-le dans vos plugins. — Création de votre premier GUI ↪ Pour commencer, nous allons visiter la documentation de skript-gui (en anglais) et y trouver la syntaxe pour créer un nouveau GUI : create [a] [new] gui [[with id] %-string%] with %inventory% [(and|with) (moveable|stealable) items] [(and|with) shape %-strings%] ↪ Construisons ensemble notre inventaire virtuel ("%inventory%" dans la syntaxe) avec les syntaxes d'exemple : virtual %inventorytype% [(named|with (name|title)) %string%] with size %number% virtual %inventorytype% [(named|with (name|title)) %string%] with %number% row[s] Cette syntaxe vous demande de préciser un "inventorytype". Rendez-vous sur la documentation de Skript pour récupérer tous les types d'inventaire existants ; nous allons choisir un "chest inventory" (coffre), avec comme nom "Tartiflette" et avec 6 de taille. Voici à quoi devrait ressembler cette syntaxe : virtual chest inventory named "Tartiflette" with 6 rows ↪ Parfait. Nous avons créé notre %inventory%. Intégrons-là désormais à notre syntaxe de départ (nous reviendrons sur les autres possibilités après) : create a new gui with virtual chest inventory named "Tartiflette" with 6 rows — Ouvrir un GUI ↪ Jetons un œil à cet effet : (open|show) [[skript[-]]gui] %guiinventory% (to|for) %players% Vous me direz, comment afficher le GUI que j'ai créé juste en haut ? Utilisez l'expression "[the] last[ly] [created] gui". Voici un exemple de son utilisation : command tartiflette: trigger: create a new gui with virtual chest inventory named "Tartiflette" with 6 rows open last created gui to player — Modifier son contenu ↪ Bien. Vous avez désormais un GUI fonctionnel, mais vous ne savez pas comment ajouter du contenu. Nous y voilà ! Si vous avez l'habitude des GUI avec TuSKe, les syntaxes que je vais vous présenter vous seront familières : (make|format) [the] next gui [slot] (with|to) %itemtype% (make|format) gui [slot[s]] %strings/numbers% (with|to) %itemtype% ↪ Pour cela, nous allons essayer de définir le premier emplacement avec la tête du joueur. En se basant sur cette syntaxe, nous devrions avoir : make gui slot 0 with player's head ↪ Intégrons désormais ceci à la création de notre GUI. Nous allons modifier légèrement la syntaxe de création de GUI de manière à ce qu'elle prenne en compte des modifications : command tartiflette: trigger: create a new gui with virtual chest inventory named "Tartiflette" with 6 rows: # <-- ajout de deux points make gui slot 0 with head of player # ne pas oublier l'indentation ! open last created gui to player — Shapes ↪ Les shapes sont une fonctionnalité très intéressante propre à skript-gui. Vous pouvez par exemple l'utiliser pour remplir facilement certaines parties de votre GUI. Voici un exemple : command tartiflette: trigger: create a new gui with virtual chest inventory named "Tartiflette" with 3 rows with shape "sssssssss", "s-------s" and "sssssssss": make gui slot "s" with dirt named "Ceci fait le tour du GUI !" make gui slot "-" with head of player open last created gui to player Cette syntaxe fonctionne comme un schéma. La première ligne de votre GUI est représentée avec la première ligne du shape, la deuxième pour la deuxième ligne du shape etc. Vous pouvez remarquer que la lettre "s" fait donc le tour du GUI en laissant un espace vide au milieu ("-"). Pour remplir toutes les cases "s", j'ai simplement utilisé la syntaxe classique, en utilisant donc la lettre "s". De même pour la tête du joueur, j'ai simplement utilisé "-". Voici les principales fonctionnalités de skript-gui, je n'ai pas présenté tout dans ce tutoriel. N'hésitez pas à poser vos questions en commentaire.
  4. 5 points
    Bien le bonjour, Aujourd’hui je vous propose un petit tuto pour utiliser la coloration syntaxique Skript sur sublime text. Rapide topo sur sublime text : Sublime est un IDE qui pour moi fait partis des meilleurs, autant pour sa légèreté, son confort d'utilisation et son extensibilité. Il gère nativement une cinquantaine de langages, et il existe des plug-ins pour tout et n’importe quoi.Petite note Sublime texte est payant à la winrar (un pitit message tous les 50 enregistrements). Essayez-le vous ne serez pas déçus. Vous êtes prêts ? On est partis. Déjà, si ce n'est pas déjà fait installez l'ide : [Contenu masqué] Une fois lancé vous suivez les étapes indiquées pour installer package control: [Contenu masqué] Le plus dur est fait vous pourrez désormais à l'aide de package control accéder a toute un libraire de plug-in pour a peut près tout. Je laisse l'installation de package control qui donne accès à des centaines de plugins utiles [spoiler=Installation d'un plugin] Pour installer un plug-in : Préférences -> Pakage Control et sélectionnez a l'aide des flèches du clavier et d'entrer "Package control : install package" Patientez quelques secondes un autre fenêtre s'ouvre tapez alors Skript (ou le nom du plug-in que vous voulez) appuyez sur entrer pour valider l'installation et c'est fait vous n'avez plus qu'a ouvrir un .sk Update : Le package n’étant plus disponible sur package control voici comment remédier au problème : Téléchargez le fichier ci-joint Télécharger Sur sublime text dans le menu Préférences -> browse packages Un fois dans le dossier remontez s'en d'un et glissez le zip tel quel dans le dossier Installed packages Redémarrez Sublime text Je vous invite à explorer plus en détail les secrets de cet IDE qui est bourré de fonctionnalités, si vous êtes perdu n'hésitez pas à me demander ou à utiliser google :p
  5. 4 points
    Bonjour, Je vous présente mon premier tutoriel pour les débutants. Je ferais plusieurs tutoriels pour but d'enseigner les bases aux nouveaux qui entrent dans le monde de Skript. Nous allons donc commençer. I/C'est quoi une variable ?: Une variable, comme son nom l'indique c'est quelque chose de modifiable, qui varie. Vous pouvez ajouter un certain nombre de choses dans une variable, en retirer, l'afficher ect... Les variables peuvent aussi s'appliquer pour le joueur, ou pour autre chose (vous comprendrez plus bas). II/Comment stocker dans une variable ?: Une variable a pour but d'être un stockage de plusieurs choses ou d'être appliqué à quelque chose. Nous allons d'abord étudier ce premier point: stocker dans une variable. Nous allons étudier plusieurs exemples: on join: add 1 to {players.count} Grâce à ce code, quand un joueur rejoindra le serveur, cela ajoutera 1 "point" dans "{players.count}". Il est aussi possible de supprimer dans une variable, grâce à cela: on quit: remove 1 from {players.count} Quand un joueur quitte le serveur, cela supprime 1 "point" de "{players.count}". Il existe aussi la possibilité de supprimer la variable, c'est à dire qu'elle sera remise à zéro: command /clear: trigger: delete {players.count} send "&eLa variable {players.count} a été supprimée" III/Appliquer une variable à un joueur ou autre: Il est aussi possible d'appliquer une variable à un joueur, la variable sera unique au joueur. Si vous écrivez une variable comme "{skript.test}", la variable s'appliquera pour tout le monde. Mais si vous faites "'{skript.%player%.test}", la variable s'appliquera SEULEMENT au joueur. Voici deux exemples: command /join: trigger: set {join.%player%.serveur} to true send "&eVous êtes bien connecté !" Là, quand vous allez exécuter cette commande, la variable "{join.%player%.serveur}" sera en true (activée) pour vous. Vous pouvez aussi désactiver une variable, comme l'exemple ci-dessous: command /quit: trigger: set {join.%player%.serveur} to false Là, en exécutant cette commande, la variable "{join.%player%.serveur}" sera en false (désactivée) pour vous. III/Afficher une variable: Une variable peux aussi être affichée en message. Il suffit juste de mettre votre variable entre "%" pour pouvoir la "lire". Voici un exemple: command /check: trigger: send "&eJoueurs: &a%{join.%player%.serveur}%" Là, quand vous allez faire la commande /check, le message vous dira le nombre qui est stocké dans la variable, par exemple, cela vous affichera en jeu: Joueurs: 5 Le tutoriel est terminé. Je sais qu'il y a encore plus à dire, mais comme précisé dans le titre, c'est un tutoriel pour les débutants. J'en ferais d'autres pour ceux qui débutent :). N'hésitez pas à me poser une question si vous ne comprenez pas. Cordialement, Voserv
  6. 4 points
    Hey les skripteurs Tutoriel pour installer le langage Skript 2.0 sur Notepad++ qui intègre des variations de couleur pour vous aider dans votre code. 1) Rendez-vous sur ce lien : [Contenu masqué] 2) Cliquez sur Télécharger qui se trouve à votre droite. 3) Cliquez sur " Téléchargement direct. " 4) Après l'avoir télécharger mettez le fichier dans votre bureau. 5) Lancer Notepad++ et rendez vous dans : Langage>Définissez votre langage... 6) Cliquez sur "Importer" et prenez votre fichier Skript 2.0 7) Relancez Notepad++. 8) Repartez dans Langage>Skript2.0 ( qui se trouve tout en bas. ) Voilà , votre langage Skript est désormais installer ! Si vous avez un problème, n'hésitez pas à me le faire part dans les commentaires. A bientôt.
  7. 3 points
    Suite à une forte augmentation de l'intérêt porté à MongoDB au sein de la communauté FR de Skript j'ai décidé de faire ce petit tuto pour vous expliquez étape par étape comment setup votre serveur MongoDB. Avant de commencer : - Ce tuto n'est disponible que pour les plateformes Debian 10/11 - Il ne traiterais que l'installation de l'édition communautaire - Ce tuto est inspiré de l'article disponible à cette adresse : ici - Pour allez plus loin ça se passe ici : Documentation MongoDB - Les fonctions avancées de permission ne sont pas abordé - Ce tuto sera mis à jour si des maj importantes sont publiées par l'équipe de MongoDB - Cette installation supporte les panel type Ptero ou Puffer. Pour toute demande je suis disponible sur discord : Hecate#0667 C'est quoi MongoDB ? MongoDB est une base de données NoSQL populaire qui utilise un modèle de données orienté documents. Cela signifie que les données sont stockées sous forme de documents JSON au lieu de lignes et de colonnes comme dans une base de données relationnelle. MongoDB est souvent utilisé pour construire des applications Web et mobiles de haute performance et est particulièrement bien adapté aux données non structurées ou à structure variable. Il est facile à utiliser et à déployer, ce qui en fait un choix populaire pour de nombreux développeurs. C'est parti Installer le cluster sur la machine Avant de commencer installons les outils nécessaires à l'installation de MongoDB sudo apt install wget curl gnupg software-properties-common apt-transport-https ca-certificates lsb-release Importons la clé GPG nécessaire curl -fsSL [Contenu masqué] gpg --dearmor -o /etc/apt/trusted.gpg.d/mongodb-6.gpg On ajoute les repos de mongo à notre source.list Debian 11 echo "deb [Contenu masqué] bullseye/mongodb-org/6.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list Debian 10 echo "deb [Contenu masqué] buster/mongodb-org/6.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list Plus qu'a effectuer une petite mise à jour de la liste des packages sudo apt update Installons MongoDB sudo apt install mongodb-org Activez MongoDB systemctl start mongod Félicitation vous venez de setup un serveur MongoDB sur votre VPS Installer un service est une chose, le configurer en est une autre. Il est maintenant l'heure de configurer MongoDB Créer un utilisateur root On se connecte à la base via l'utilitaire mongosh (L'interface classique de linux risque de changer ne paniquez pas) mongosh 127.0.0.1:27017 On se place dans la base admin use admin On créé un utilisateur root db.createUser({ user: "AdminCharismatique" , pwd: "monsuperpassword", roles: ["root"]}) (Configurer les paramètres user et pwd. Pour les mot de passe n'utilisez pas de caractères spéciaux sur une base local , la raison vous sera expliquez plus tard) Génial nous avons créé un utilisateur root, il est l'heure de se connecté à notre base distante Visualiser sa base avec Mongo DB Compass Pour cela nous allons utiliser le logiciel MongoDB Compass facilement trouvable en ligne A votre première ouvertures cette interface vous sera proposé. Déroulez les options avancées et éditez le connection string. Parfait, éditons le string de connexion mongodb://utilisateur:[email protected]:27017/ (Remplacez simplement les informations par les votres. Malheureusement MongoDB Compass ne supporte pas les caractères spéciaux) Le Tunnel SSH, votre allié contre le VPN Rentrons dans une partie un peut plus technique, par défaut MongoDB écoute sur le port 27017 et accepte uniquement les requêtes provenant de l'adresse de loopback (127.0.0.1). Cette configuration est en soit la plus sécuriser qu'il vous est possible de faire avec un simple VPS. Nous allons donc créer un tunnel SSH entre votre PC et votre VPS pour vous permettre d'atteindre votre base de donnée sans ouvrir de port supplémentaire, pas de panique c'est extrêmement simple Dans la section avancé, rendez vous dans la catégorie PROXY/SSH puis dans SSH with Password : Vous pouvez saisir les informations de connexion SSH fournie par votre hébergeur N'oubliez pas de sauvegarder votre configuration Et voilà ! Votre Client MongoDB Compass peut maintenant atteindre votre base de donnée sans avoir besoin d'ouvrir un port Pterodactyl Pour les personnes utilisant Pterodactyl il vous sera impossible en l'état de joindre votre base MongoDB via MongoSK sans configurer la bind adress. Cela vient du fait que Pterodactyl conteneurise vos serveur, il ne partage donc pas la même adresse de loop back. Pour rendre MongoDB compatible avec Pterodactyl éditez la config de MongoDB nano /etc/mongodb.conf Il ne vous reste plus qu'a éditez le champ : bindIp et remplacé 127.0.0.1 par 172.18.0.1 N'oubliez pas de modifier dans votre string de connexion par l'adresse précédemment modifier ! GNU nano 5.4 /etc/mongod.conf # mongod.conf # for documentation of all options, see: # [Contenu masqué] # Where and how to store data. storage: dbPath: /var/lib/mongodb journal: enabled: true # engine: # wiredTiger: # where to write logging data. systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log # network interfaces net: port: 27017 bindIp: 172.18.0.1 # how the process runs processManagement: timeZoneInfo: /usr/share/zoneinfo #security: #operationProfiling: #replication: #sharding: ## Enterprise-Only Options: #auditLog: #snmp:
  8. 3 points
    J'écris ce message pour vous dire que le projet est toujours vivant, et qu'il va bientôt aboutir.
  9. 3 points
    Bonjour, aujourd'hui je vais vous montrer comment mettre le nombre de personnes connectées sur un serveur dans une variable, cela marche pour les serveurs BungeeCord et tout les autres. Le codes est simple: Command /infox: trigger: set {_g} to text from "[Contenu masqué]" send "&7Nombre de joueurs connéctés sur &eEpiCube&7: %{_g}%" Voici un exemple en mettant l'IP d'Epicube:
  10. 3 points
    Bonjour/bonsoir ! Dans les dernières versions de Skript se trouve une nouvelle fonctionnalité assez utile, permettant d'utiliser le format JSON dans des messages de manière à mon goût très simple et plus pratique qu'avec json.sk. ➤ Qu'est ce qu'un message contentant du 'json' ? Comment en faire via Skript ? Le json est un format permettant de stocker des données, et n'est pas utilisé que par Minecraft. Dans Minecraft, il permet entre autres d'envoyer des messages en couleur, contenant des commandes cliquables, des infobulles, et autres choses que l'on verra par la suite. Pour l'utiliser directement dans minecraft, il faut se servir de la commande "/tellraw", une commande à la syntaxe très restrictive et compliquée à utiliser. C'est le mode de fonctionnement de l'API json.sk. L'inconvénient est qu'avec ceci, il est difficile (impossible ?) d'envoyer plusieurs formats différents sur la même ligne, par exemple 2 commandes cliquables sur 2 portions de textes différentes de la même ligne. De plus cela envoie dans la console le log de la commande tellraw. Il existe aussi une syntaxe contenue dans SkQuery permettant d'envoyer des messages json, pouvant contenir plusieurs formats, mais cette syntaxe reste assez restrictive elle aussi, et nécessite l'addon. ➤ La nouvelle méthode Depuis longtemps il existe dans skript des bouts de codes intégrable directement dans l'effet "message/send", permettant de faire la mise en forme : message "<red><bold>Message en rouge et en gras<reset> en blanc <green> en vert" Ils sont très peu utilisés, car il est bien plus simple de se servir de "&4 , &l , &2 , &r , ...". Mais c'est avec des balises de ce type que l'on va intégrer des commandes/tooltip à nos messages. Voici les 4 balises disponibles : <url:url>texte cliquable, ouvre la fenêtre 'Êtes vous sûr de vouloir ouvrir..'<reset> <command:/commande>texte cliquable, exécute la commande<reset> <suggest command:commande>texte cliquable, écrit la commande dans la barre de tchat<reset> <tooltip:texte de la tooltip>Quand on passe la souris sur le texte, affiche la tooltip<reset> Et voici quelques exemples d'utilisations et le résultat en jeu: [spoiler=Exemples] #1 message "<command:/say J'ai cliqué><tooltip:§4Allez, clique%nl%§2§lSteuplé%nl%&1 :)>Passe ta souris....<reset>" #2 message "<url:[Contenu masqué] ici pour ouvrir%nl%le magnifique forum>Ouvrir le forum skript-mc.fr<reset>" #3 message "<tooltip:Clique pour faire /say Bonsoir><command:/say bonsoir>clic ?<reset>%nl%<tooltip:Clique pour préparer la commande /say><suggest command:/say >ou bien ici ?<reset>" [spoiler=Résultats](Après avoir cliqué sur le message) #1 [ATTACH=full]7864[/ATTACH] J'ai sauté quelques lignes pour ne pas cacher le texte, mais normalement il n'y a pas de saut de ligne. On remarque que dans les tooltips, le code couleur doit être mit avec le symbole § et non &, si vous écrivez le texte directement. Néanmoins si le texte de la tooltip est stocké dans une variable, alors le caractère & fonctionnera. Exemple : set {_tooltip} to "&1Bonsoir" message "<tooltip:%{_tooltip}%>Bonjour<reset>" affichera bien Bonsoir en bleu dans la tooltip. #2 [ATTACH=full]7867[/ATTACH] et au clic : [ATTACH=full]7868[/ATTACH] [spoiler=Résultats] #3 [ATTACH=full]7866[/ATTACH] Juste pour montrer qu'il est possible de faire plusieurs commandes dans le même message, sur plusieurs parties de textes différentes. C'est bien sûr aussi possible avec les url. ➤ Remarques ● Certaines combinaisons de formatage ne sont pas possibles, si elles sont mises sur la même portion de texte: - commande + commande suggérée - commande + url - commande suggérée + url ● Ils n'est pas possible d'associer plus d'un format du même type à la même portion de texte. Par exemple, les codes suivants ne fonctionneront que partiellement : message "<command:/say premier message><command:/say 2eme message>clic<reset> -> n'exécute que la 2eme commande message "<tooltip:premiere><tooltip:deuxième><tooltip:troisième>texte<reset>" -> n'affiche que la 3ème tooltip etc.. ● Les caractères < et > écrits dans l'un des formatages le fera boguer. Je n'ai personnellement pas trouvé d'autre moyen que de les remplacer par un caractère unicode comme ➤ ou ▶ ● Les commandes cliquables et les commandes suggérées ne peuvent pas faire plus de 100 caractères, sinon seuls les 100 premiers caractères seront exécutés. ● Placer le symbole § dans une commande cliquable fera kick le client, avec l'erreur "illegal characters in chat". Si vous placez un § dans une commande suggérée, la couleur sera bien appliquée dans le tchat, mais le joueur sera kick s'il exécute la commande, avec la même erreur. ● Les urls doivent commencer par "http(s)://", sinon le texte ne sera pas cliquable ● Ces formats ne sont pas utilisables avec l'effet broadcast Je rappelle qu'il faut avoir une version assez récente de skript, prenez les dernières releases de Bensku pour être sûr, et parce que c'est bien d'être à jour ;) Pour info, cette fonctionnalité a été ajoutée dans la dev26. Voilà, en espérant que ça vous sera utile :)
  11. 3 points
    Salut a tous. Suite a une demande en message privée de @Silass_ qui avais un problème pour faire fonctionner les fonctions, je me suis rendue compte qu'il y avait très peut d'explication sur ce sujet, ou alors des exemples qui ne sont pas fonctionnel. j’étais tomber une fois ( rassurer vous je me suis pas fait mal :D ) sur un bon court tutoriel en anglais mais je ne le retrouve pas, je vais donc essayer de partager avec tous le monde ce que j'en avais compris. Tous d'abord ce que je vais utiliser c'est Skript 2.2 minimum et l'Addon SkQuery ( et oui c'est dans le titre ^^ ). La base d'une fonction: function Nom(t:text)::text: return {_t} ont as d'abord " function " qui commence par dire a Skript /!\ ceci sera une fonction. Nom => c'est le nom de votre fonction, vous pouvez lui donner n'importe quel nom mais éviter les espaces et les accents. text => seras le type de retour de la fonction, cela peut être "player,number,text..." en gros les types que skript peut retournée. return => c'est ce que la fonction va retournée ( ici sa renvoie {_t} car le type de la fonction est "text"). Voici quelque exemples et leur explication. Imaginons une fonction qui permet d'envoyer un message a un joueur pour une commande de give. command /giveme <item>: trigger: if player has permission "sk.grade.vip": if player has permission "sk.kit": if player has permission "sk.give.%{arg-1}%": message "Give Autorisé" else: message "Give refusé" else: message "Give refusé" else: message "Give refusé" ce Skript est volontairement absurde mais c'est pour l'exemple qui va venir ;) que constatons nous du skript ci-dessus ? 1 - ont vérifie plusieurs permission 2 - un message identique reviens "Give refusé" si je veux modifié le texte "Give refusé" il faut que je le modifie trois fois dans ce code et encore ici le Skript et très court, si il était plus long, ont risquerais d'en oublier un, de plus si je fait le même message pour différent kit, et bien il faudrait le modifié a d'autres endroit encore, donc comment faire pour rendre la modification du message "Give refusé" plus simple ? et bien avec une fonction ont peut je reprend le skript ci-dessus et j'ajoute une fonction. function MsgGive(p: player, t: text): if {_t} is "yes": send "Give Autorisé" to {_p} else: send "Give refusé" to {_p} command /giveme <item>: trigger: if player has permission "sk.grade.vip": if player has permission "sk.kit": if player has permission "sk.give.%{arg-1}%": MsgGive(player,"yes") else: MsgGive(player,"no") else: MsgGive(player,"no") else: MsgGive(player,"no") voila si je veux modifier "Give refusé" je peut le faire dans la fonction et ce serras modifié partout dans mon code. bon ok c'est bien beau je vous ais balancer un bout de code mais l'avons nous compris ? au cas ou je vais le détailler ^^ function MsgGive(p: player, t: text): <= vous constaterais la disparition du type de retour, en effet il est possible de faire une fonction qui ne renvoie rien mais qui ce contente d’exécuter ce quelle as dedans. ont a déjà vue plus haut que MsgGive était le nom de la fonction p => est un nom de variable qui aura pour valeur un joueur de type "player" p peut être de n'importe quel nom, c'est a dire qu'ont peut faire aussi ceci function MsgGive(joueur: player, t: text): maintenant le nom de la variable est joueur et aura pour valeur un joueur "player" player étant le type que skript va interpréter t = > et bien comme pour p, mais cette fois ont auras une valeur de type "text" encore une fois, t peut avoir un autre nom comme "msg, texte, ... libreAvotreImagination" p et t étant des noms de variable, nous allons les réutiliser dans la fonction comme une variable temporaire. vous savez les variables {_variable} avec le _ ' tiret du 8 comme certain aime le dire :D ' ce qui donne {_p} et {_t}, qui aurons les valeur que vous aurais mie dans l'appelle de la fonction: MsgGive(player,"no") player étant le joueur qui a taper la commande, "no" étant une valeur texte. --------------------------------------------------------------------------------------------------------------------------- _______ Suite plus tard avec plus d'exemple sur type de retour de la fonction_____________ je finirais plus tard le reste du tutoriel, mais vous avez normalement de quoi commencer a comprendre ;) mais aussi, cela vous permet de me dire quelle sont les parties qui sont difficile a comprend afin que je puisse l'améliorer et rendre plus claire ce que j'ai écrit mais aussi ce qui va suivre ;) bien évidement, j'autorise le Staff a corriger mon écrit qui doit forcément contenir des fautes ( si vous pouviez juste me MP quelle était les fautes histoire de pouvoir m'améliorer en orthographe ;) )
  12. 3 points
    Version de minecraft et skript: 1.12 / 2.2-dev37c Description du script: Je souhaite avoir: Quand on fait /setwarp [<nom du warp>] Pour ajouter un warp Quand on fait /delwarp [<nom du warp>] Pour retire un warp Quand on fait /warp: Pour avoir un menu avec tout les warps disponibles je souhaite avoir 2 PAGES PAS PLUS ! Permission: Pour le /setwarp : /delwarp : /warp >>> warp.adm
  13. 3 points
    j'aimerais tellement qu'il y ais un bouton DisLike rien que pour cliquer dessus quand quelqu'un le mendie !
  14. 2 points
    Bonjour à tous :D Aujourd'hui je vous propose un petit tutoriel de compte à rebours pour vos serveurs. Ce compte à rebours est surtout destiné aux mini-jeux que vous souhaitez faire. Ce tuto vous servira à faire par exemple un compte à rebours qui peut s'interrompre si un joueur se déco durant le décompte. (Note: j'ai fait ce code pour un mini jeu mais je n'ai gardé que la partie décompte. Pour un jeu du type uhc, plusieurs ajouts s'imposent :)) Nous allons voir comment faire ceci pas à pas ^^' Tout d'abord, lorsque le joueur rejoint l'uhc on veut l'ajouter dans la liste avec tous les autres joueurs présents options: uhclogo: &9[&2UhcRun&9] #Ici c'est une variable crée pour pas avoir à placer 50 fois le [uhcRun] mais inutile ici ^^ on join: add player to {uhc.players::*} broadcast "{@uhclogo} &a%player% a rejoint la partie &b(%size of {uhc.players::*}%/20)" #Quand le joueur rejoint, il est ajouté dans la liste et un message est envoyé avec le nombre de joueurs. #%size of {uhc.players::*}% détecte le nombre d'éléments dans la liste (en l’occurrence, ici c'est des joueurs) Ensuite, on veut lancer le compte à rebours lorsqu'il y a 8 joueurs ou plus. Pour cela on utilise encore le type %size of {uhc.players::*}% mais pour une condition cette fois ^^ if size of {uhc.players::*} = 8: set {_time} to 60 broadcast "{@uhclogo} &eCommencement de la partie dans &a%{_time}% &esecondes. #S'il y a 8 joueurs ou plus de connectés, on lance alors le décompte. On définit une variable (locale pour éviter les problèmes) sur une valeur de 60. (pour une minute, à vous de mettre plus si vous voulez un décompte plus long ^^) Mais cela ne s'arrête pas ici ! Et il ne suffit pas de mettre des messages à la suite avec le 20/15/10/5 secondes. Car on veut qu'il y ait obligatoirement 8 joueurs ou plus pour commencer la partie. Si quelqu'un déco, le décompte doit s'interrompre et devra reprendre à 60 secondes lorsqu'il y en aura assez. while size of {uhc.players::*} >= 8: remove 1 from {_time} wait 1 second if {_time} = 30 or 20 or 15 or 10 or 5 or 4 or 3 or 2: broadcast "{@uhclogo} &eCommencement de la partie dans &a%{_time}% &esecondes." else if {_time} = 1: broadcast "{@uhclogo} &eCommencement de la partie dans &a%{_time}% &eseconde." else if {_time} = 0: broadcast "{@uhclogo} &eLancement de la partie..." stop else: wait 0 tick Avec ce bout de code, on va vérifier en permanence à l'aide d'une boucle while si le nombre de joueurs est de 8 ou plus. Si effectivement, il y a plus de 8 joueurs, nous allons retirer 1 "point" de la variable (donc de 60 on passe à 50) et ce à 1 seconde d'intervalle toujours ! (ceci nous fait notre chrono). Mais on veut aussi executer certaines actions lorsqu'il reste x secondes. pour cela il faut à l'aide de la boucle vérifier à chaque seconde écoulée si on arrive à 30/20/15 ou 10 secondes restantes. le " if {_time} = 30 or 20 or 15 or 10 or 5 or 4 or 3 or 2: " sert à regarder justement combien de secondesi l reste dans le décompte ! A ce moment là, on pourra envoyer un message précisant combien de secondes il reste en analysant le nombre de "points" dans la variable à l'aide une fois de plus de %{_time}% Et enfin, lorsque la variable est arrivée à 0 c'est le top départ :D. pour les 2 dernières lignes, cela sert juste à relancer la boucle (tant évidemment qu'il y aura toujours 8 joueurs) depuis le haut quand le nombre de seconde qu'il reste n'est pas égal à 30/20/10 et les autres. Il est possible que certaines de mes explications ne soient pas claires. Je vais vous mettre le code en entier et préciser chaque ligne :D options: uhclogo: &9[&2UhcRun&9] on join: add player to {uhc.players::*} broadcast "{@uhclogo} &a%player% a rejoint la partie &b(%size of {uhc.players::*}%/20)" if size of {uhc.players::*} = 8: set {_time} to 60 broadcast "{@uhclogo} &eCommencement de la partie dans &a%{_time}% &esecondes." while size of {uhc.players::*} >= 8: remove 1 from {_time} wait 1 second if {_time} = 30 or 20 or 10 or 5 or 4 or 3 or 2: broadcast "{@uhclogo} &eCommencement de la partie dans &a%{_time}% &esecondes." else if {_time} = 1: broadcast "{@uhclogo} &eCommencement de la partie dans &a%{_time}% &eseconde." else if {_time} = 0: broadcast "{@uhclogo} &eLancement de la partie..." stop else: wait 0 tick #Quand le joueur rejoint le serveur... #...on l'ajoute à la liste des joueurs... #...et on lance un message de join avec le nombre de joueurs connectés en analysant le nombres d'éléments dans la liste #Si le nombre de joueurs présents dans la liste est superieur ou égal à 8... #...on crée une variable qui sera notre décompte et on lui donne l'équivalent d'une minute... #...et on lance un message pour prévenir le début du décompte ! #Maintenant on va en permanence vérifier s'il y a 8 joueurs ou plus grâce à la liste. si c'est le cas alors... #...on enlève "1" de la variable {_time} (pour notre décompte) #Pour éviter un décompte trop rapide, on rajoute un délai de 1 seconde entre chaque retrait de la variable (et ainsi faire un décompte toute les secondes (classique quoi :D)) #Désormais, on va vérifier après un certain nombre de retrais de la variable (1 retrait équivaut à une seconde d'écoulée) on vérifie à combien est la variable et donc combien de secondes reste-t-il. S'il reste 30/20/10/5/4/3 ou 2 secondes... #...on envoie un message prévenant précisément le nombre de secondes qu'il reste en "lisant la variable" #S'il ne reste par contre qu'une seconde... #...on envoie le même message mais cette fois au singulier et non pluriel (l'orthographe :):):)) #Si maintenant il n'y a plus de secondes (donc si on est à 0)... #...On lance la partie :D... #...et on arrête le skript pour éviter que la boucle tourne inutilement (car elle continuera de tourner tant qu'il y aura plus de 8 joueurs rappelez vous !) #mais par contre si le nombre de secondes restantes est supérieur à 5 mais n'est pas multiple de 10... #...on met un délai nul pour relancer la boucle et ainsi continuer le chrono en toute sérénité :) Nous sommes déjà rendus à la fin de ce tutoriel ! Merci à vous d'avoir pris le temps de le lire. S'il vous à plu n'hésitez pas à mettre un like ou à me le dire en message. S'il y a des choses qui ne sont pas assez claires et/ou mal expliquées et/ou que vous ne comprenez pas, faites le moi savoir et j'essayerais de rendre une partie plus compréhensible :) Sachez aussi que je prend toute critique constructive afin que je puisse progresser encore et encore :) A très bientôt <3
  15. 2 points
    Hey ! Les Apprendre le skript vous ont manqué ? non *Commentaire supprimé* Plus sérieusement les vacances et la flemme ont fait que j'ai pas écris le 4 :x C'est pourquoi, pour me pardonner, je vais faire un très long tutoriel comme vous me l'avez demandé sur les arguments dans une commande,mais les conditions en même temps ! (Trop swag :O) Zzzzé parti ! ---------------------------| Les conditions |----------------------- Je vais donc faire un résumé rapide des conditions. > ça sert à koua ? Eh bien tout simplement,ça sert à trier les joueurs ! Imaginons.J'ai un évènement quelconque. on walk on diamond block: On a vu,on walk sert à dire "Quand on marche" et "on diamond block" sur un block de diamant. Imaginons que je veux qu'il se passe une action seulement si le joueur a une particuliarité.Par exemple,je vais vous montrer une condition qui test si le joueur a une certaine permission. on walk on diamond block: if player has permission "vip": message "Toi t'es vip !" Ici,ceux qui ont la perm "vip" ou qui sont op (Un op a toute les perm) recevront un message mais pas ceux qui ne l'ont pas.Donc,je vais vous apprendre les bases. La condition se situe souvent avant un effect (Limite tout le temps je crois).Une condition a un "if" devant elle.En anglais,ça veut dire "si".Donc ici,si on traduit,ça disait: "Si le joueur a la permission "vip"".Les conditions commencent toujours par if,vous verrez quand vous serez plus expérimentez que pour raccourcir parfois on peut l'enlever mais à ce stade dites vous qu'il y a toujours un if.Vous remarquez le fameux ":" que vous connaissez maintenant,je le répète la derniiiiière fois: RETOUR A LA LIGNE + TAB ! Ce pavé était chiant ? Mais maintenant,vous savez que vous pouvez trier.Autre exemple: if player's world is "world": Cette condition test le monde du joueur.Swag non ? Retrouve toute les conditions sans addon ici Bon,vous vous dites sûrement que c'est trop simple,voila ce que vous pouvez faire d'autre. Mais donc vous avez vu qu'on peut mettre autant de condition qu'on veut.Sans oublier le retour à la ligne + tab :) Maintenant,regardez ça,c'est hyper utile mais j'arrive pas trop à l'expliquer: on walk on diamond block: if player is not op: if player has permission "vip": # Condition n°1 message "&cToi t'es vip" # Effect n'°1 if player has permission "joueur" # Condition n°2 message "&cToi t'es joueur" # Effect n°2 Intéressant ! Donc ici,je vérifie si le joueur n'est pas op,car il a toute les perm et il aurait pris les deux messages dans la gueule.Donc je test si le joueur non-op a la perm "vip" (Condition 1).Si il l'a je fais l'effect n'°1 ! Et c'est la même chose pour le 2. Enfaite,les conditions sont bien évidemment influencé par les ":" mais dans ce cas la on voit qu'elle est à la même ligne que la première.Tout simplement car si je l'aurais mis à la ligne qui suit l'effect 1 (ça chauffe le cerveau !) ça aurait fait que la condition 2 nécessite la condition 1 pour être rempli. Par exemple: Vraiment désolé la je m'exprime très très mal,j'espère que vous aurez un minimum compris que si la condition est après un effet,il faut que l'effet au dessus soit réalisé pour que la condition soit test. Maintenant,les "else" qui veulent dire "sinon": > Putain on en a eu assez arrête de nous assomer )': Vous me remercierez plus tard hahaha ha ha h.. Si je mets la perm et un effet on break: if player has permission "minage": stop else: cancel event Alors la,on dit: Si un joueur casse un block et qu'il a la permission "minage",on fait rien (stop signifie fin des actions).ELSE signifie donc "Sinon",vu qu'on l'a mis à la même ligne que la condition,ça veut donc parler de la condition "if player...".Donc ça donne: Si le joueur a la perm "minage" on fait rien,sinon on cancel event. Aussi simple que ça.Else peut donc signifer pleins de trucs ! Si on test si le joueur est en gamemode 1 et qu'on met un else,il se fera éxecuter si le joueur est en gamemode 0,2,3 ! Il y a aussi "else if" (Sinon si ...) mais parler de tout ça dans des tutoriels écrits serait trop long,vaut mieux voir un tutoriel spécialisé dedans ^^ Un else,selon la ligne ou il est,est le else d'une certaine condition,exemple: Ici,le premier else est pour la deuxième condition,et le deuxième plus en bas pour la première.Donc vous voyez que les else peuvent faire en sorte qu'on se redirige vers le bord du coup. ---------------------------| Les arguments |----------------------- Alors,on va parler des arguments.Pour créer une commande. Donc c'est comme créer une commande,mais avec des arguments.Vous faites comme ça: command /lol <text>: Ne pas oublier le ":",ça change pas ! Ici,il faudra mettre /lol <Quelquechose>.<> signifie que l'argument est obligatoire à mettre.Pour qu'il soit optionnel,vous pouvez mettre command /lol [<text>]: Ici,on est pas obligé de le mettre. A quoi ça sert ? Au lieu de créer une commande command /lol on: et une commande command /lol off: Vous pouvez le mettre en une seule commande ! Hyper pratique :D command /lol <text>: Ensuite,obligatoire à mettre,la condition après ! Donc ça tombe bien vu que je viens de vous l'apprendre :D Tout coïncide ! Illuminati confirmed ! Vous faites donc ça: command /test [<text>]: trigger: if argument 1 is "on": message "on" if argument 1 is "off": message "off" if argument 1 is not set: message "Rien mis en argument,de toute façon c'était optionnel" On test si l'argument 1 est "on",on fait l'effect approprié.Si c'est "off",pareil.Si il n'est pas set (Possible vu que c'était optionnel) on peut envoyer un message approprié.Utile au lieu de faire plusieurs commandes.Ce n'est pas tout,skript a crée des arguments perso.Par exemple,au lieu de <text> qui signifie TOUT (Nombres,textes,...) on peut mettre par exemple <number>.Skript,si ce n'est pas un nombre,va automatiquement mettre la description de "usage:" dont je vous avais parlé au deuxième tutoriel ! Tout coïncide encore + ! Chef des illuminatis ! (Il y a aussi <player> qui désigne un joueur).Voila si vous voulez en savoir plus à propos des arguments,c'est dans des tutoriaux fais que pour ça et non sur skript en général,comme je l'ai dis plus haut.Cépendant,notez Petit bilan: Avez ce que je vous ai appris,vous pouvez donc créer votre propre commande avec des arguments comme /friends <add/remove> <Joueur> :D Vous pouvez donc détecter un évènement,voir si le joueur qui l'a fait a bien les conditions nécessaires et faire une action en conséquence.Pas mal pour seulement 4 topics non ? > Tes "topics" font 40 pages mec C fau > Et 84.7% des gens ont rien compris C vré Plus sérieusement si vous avez des questions postez en commentaire ;)
  16. 2 points
    Bonjour aujourd’hui je vais vous montrez comment faire un menu virtuel très simplement avec des panneaux ou des enclumes. Tout d'abord vous aurez besoin de Skacket et de WolvSk, je sais que skacket peut faire des menus avec des enclumes, mais il sont bug donc je vous conseillerais d'utiliser WolvSk qui est beaucoup plus simple. On va créer un petit code ici: command /test: trigger: open sign to player with lines "Nom", "", "^^^^", "^^^^^^": # sa va ouvrire un sign virtuelle avec les lignes : "", "", "", "": set {_variable1} to 2rd element out of lines #la sa set le résultat de la ligne demander dans une variable. send {_variable1} to player #puis sa envois la variable -------------------------------------------------------------------------------------------------------------------------------------------------- command /meloka: trigger: open an anvil gui named "testm3loka" to player with default text "ecrit ici" #en cros la on ouvre une enclume virtuelle avec son nom. on close anvil gui named "testm3loka": #la sa détecte quand tu ferme une enclume virtuelle. set {testmelo} to event-text #sa va set le text dans une variable. send {testmelo} to player #sa lui send la variable (le text) Si vous avez besoin d'aide (M3loka#3634)
  17. 2 points
    Skript-db : L'addon qui va vous faire aimer le SQL ! Bonjour, je présente aujourd'hui mon premier tuto sur le Forum, j'espère qu'il servira au plus grand nombre d'entre vous ! Avant de lire ce tuto, il est nécessaire d'avoir de légères bases en SQL, si vous n'en avez pas, pas de panique je tout de même vais aborder les principes de base. Difficultés : ✪✪✪✫✫ Temps d'apprentissage : 30mn si vous connaissez le SQL ~ 2h sinon. Le SQL: Bon, vue que tout le monde ne sait pas forcément ce qu'est le SQL et pour pouvoir toucher un maximum de monde à travers ce tuto je vais en parler un peu ! Le SQL, c'est un langage de programmation, spécialement créé pour l'exploitation de bases de données, c'est pour cette raison qu'on associe toujours "SQL" à "Data Base". En gros, le SQL est le langage qui va vous permettre de gérer votre base de données. Par ailleurs, le SQL permet d'utiliser vos Bases dans plusieurs langages de programmation (PHP, C++, Java, skript !). L'addon Skript-db permet donc d'utiliser le SQL sur skript dans toutes ses mesures. La Base de données: Pour le tuto que je vais aborder, nous allons uniquement traiter de bases de données de type "MySQL", je vous recommande vivement, si vous débutez, d'utiliser une base MySQL avec un accès PYPMyAdmin, qui vous permet d'avoir un panel graphique sur votre base de donnée et une assistance pour la rédaction de vos requêtes SQL (Très pratique pour la suite). Pour expliquer rapidement, la base de données va stocker vos "informations" dans des "tables" organisées en colonnes et classés en plusieurs lignes. Résumé: Vous avez compris, le SQL vous permet d'exploiter des bases de données dans plusieurs programmes de langages différents, par exemple, vous pouvez grâce au SQL, partager des informations entre plusieurs serveur minecraft, ou entre un serveur minecraft et un site web. Skript-db: Voilà enfin le chapitre intéressant ! L'addon est ULTRA basique, mais ULTRA complet. Il permet au contraire des autres addons, d'exécuter n'importe quelle requête de SQL, en seulement 1 ET UNIQUEMENT 1 effect (en vrai il y en a 2 mais ils fonctionnement de la même manière l'un est juste plus complet donc disons 1 seul effect). Donc, comme je l'ai dit il y a 2 effects pour effectuer des requêtes (query) SQL et 2 expressions, l'une pour se connecter une base de donnée et une autre expression pour récupérer vos erreurs SQL. Concrètement nous allons donc utiliser "seulement" l'expression pour se connecter, et l'effect pour les effectuer des requêtes. Ce connecter à votre BDD: Alors déjà, j'aime beaucoup cet addon, car contrairement aux autres addons qui "gèrent" le SQL, il permet de se connecter à plusieurs bases différentes dans le même skript, et surtout de pouvoir les utiliser dans d'autres skript sans les rappeler. C'est magique, non OPTIMISÉ !! Donc sans plus attendre on ce connecte: on load: set {sql} to the database "mysql://%host%:%port%/%database-name%?user=%username%&password=%password%&useSSL=false" # "useSSL", si votre base de donnée est protégée par un certificat SSL, en localhost ignoré le ! {sql}, ça va être la valeur avec laquelle vous aller pouvoir effectuer vos requêtes, ce qui veut dire que si vous voulez plusieurs bases, il suffit d'utiliser des vars différentes ({sql.1} puis {sql.2} ... etc ...). Voilà, rien de compliqué c'est bon vous êtes connecté, une fois cette expression utilisée plus besoin de l'utiliser (Je vous conseil de la mettre dans un "on load")! Effectuer une requête SQL: Et bien, c'est tout l'intérêt de l'addon, alors comme je l'ai dit, il y a 2 effects différents mais qui permettent de faire légèrement la même chose. La différence c'est que l'un permet d'exécuter une requête 'unsafe' stockée dans une variable, et l'autre d'exécuter un texte brut (comprenez sans variables). Vous l'aurez compris, l'effect 'unsafe' permet donc d'exécuter des variable, ce qui est plutôt utile comparé à l'autre. Je ne vais donc montrer que l'effect 'unsafe' dans ce tuto. # Requête sans retour : execute unsafe {_requete} in {sql} # Requête avec retour : execute unsafe {_requete} in {sql} and store the result in {_output::*} Bon voilà, un bon aperçue de l'effect, alors comment l'utiliser ? - Premièrement il faut savoir si vous allez avoir besoin du paramètre de retour ou non, c'est simple, il y a 2 types de requêtes SQL, celles où vous modifiez la BDD, et celles où vous lisez la BDD, dans le cas où vous écrivez, pas besoin de retour, dans l'autre cas il vous faut un retour, évidement. - Ensuite, il vous faut définir la requête {_requete}, c'est simplement une variable text. [spoiler=Application et Exemples] # Petit exercice: un log de chat, pour cela il faut : # Une table avec 2 colonnes : "joueur" et "messsage", avec en bonus "date". # Si vous souhaitez réaliser ce tuto avec moi, je vous passe une ligne SQL. # Vous pouvez la rentrer dans votre console SQL pour générer la table : CREATE TABLE IF NOT EXISTS `chat` ( `joueur` varchar(32) CHARACTER SET utf8 DEFAULT NULL, `message` varchar(64) CHARACTER SET utf8 DEFAULT NULL, `date` varchar(20) CHARACTER SET utf8 NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Table du tuto skript-db par tutur1004'; # Voilà, à présent passons au skript ! # Le but: dès qu'un joueur écrira un message il sera enregistré dans votre base SQL. # À noter que "insert" permet d'ajouter une nouvelle entrée dans votre base, `chat` est le nom de la base. on chat: set {_requete} to "INSERT INTO `chat` (`joueur`, `message`, `date`) VALUES ('%player%', '%message%', '%now%')" execute unsafe {_requete} in {sql} # Maintenant, on va essayer de récupérer avec une commande les x derniers messages d'un joueur (Connecté). # Nous allons utiliser la fonction SQL "SELECT" qui permet de lire une ligne (ou plusieurs) dans une table. command /find-msg <player> <int>: trigger: set {_requete} to "SELECT * from `chat` WHERE `joueur` = '%arg-1%' ORDER BY `message` DESC LIMIT %arg-2%" execute unsafe {_requete} in {sql} and store the result in {_output::*} # {_output::*} contiens maintenant les messages du joueur- # - ainsi que plusieurs fois son pseudo et les différentes dates des différents messages. loop {_output::message::*}: send "Le %{_output::date::%loop-index%}% %arg-1% à dit:" send "%loop-value%" L'exemple vous paraît compliqué ? - Si vous n'avez pas compris le 'insert into', je vous conseille d'apprendre le SQL. - Si vous n'avez pas compris le {_output::*}, je vais vous l'expliquer. Le {_output::*} généré par la requête est classé en fonction des colonnes de votre base. Si on reprend l'exemple, il y a (`joueur`, `message`, `date`) dans notre base. J'ai écrit pour récupérer les messages "loop {_output::message::*}". La variable ce répartie donc en 3 parties. 1) "_output", ça, tout le monde le sait, c'est le nom de la variable. 2) "message", ici, c'est le nom de la colonne qu'on souhaite lire. 3) "*", ici vont défiler les variable que la requête à "SELECT". Un 2ème exemple? Aller: J'ai ensuite utilisé send .. %{_output::date::%loop-index%}% .. -> {_output::date::%loop-index%} 2) "date" le nom de la colonne qu'on souhaite lire, pour pouvoir afficher la date. 3) "%loop-index%", si on suit l'exemple, on a loop les index des messages, Donc nous allons avoir les dates qui correspondent, puisqu'ils ont le même index de variable. Voilà, j'espère avoir suffisamment détaillé le fonctionnement de l'addon, il est assez simple à comprendre et utilisé, vous pourrez le trouver sur le git-hub de btk5h ou sur mon post avec la liste des addons (Maj. en janvier 2018 !) Tutur1004 !
  18. 2 points
    Introduction Je vous présente une potentielle évolution du plugin Skript et qui a pour but de compiler les skripts en byte code utilisable par la JVM. USkript (Universal Skript) permettra de pouvoir avoir un skript aussi rapide que Java, et il ne sera plus dépendant d'Addons, vos scripts ne seront plus limités à Spigot/Bukkit, vous pourrez les utiliser pour BungeeCord, Forge, crée des applications sur ordinateur ou sur téléphone. En résumé vous pourrez tous faire comme Java. Différence USkript reprend le fonctionnement de Skript en grande partie, mais à quelques différences prêt: Les éléments de syntaxe enregistrés ne serviront plus à l'exécution, mais à indiquer les instructions que le programme doit faire une fois compiler. Les addons existeront toujours mais ne seront plus requis pour l'exécution seulement pour la compilation. Vous n'aurez plus besoin de vous passer les addons pour compiler, USkript se chargera d'aller les trouver sur les différents répertoires en ligne enregistrée et de les télécharger. USkript ajoute aussi la notion de préprocesseur, qui sont des syntaxes optionnelles qui ont pour but d'indiquer au compilateur des actions à faire. USkript ne sera pas un plugin comme son prédécesseur Skript, mais un logiciel à pars entiers sous forme de commande qui aura pour but de compiler et d'analyser vos skripts. Pour plus d'informations SiteWeb: link Discord: link
  19. 2 points
    Si ton codes fonctionne, tant mieux, j'aimerais juste t'informer d'un truc : Au lieu d'utiliser une variable pour contenir ton GUI, tu peux créer un gui avec un ID et tu pourras le réutiliser dans n'importe quel autre Skript sur ton serveur. Pour ce faire, c'est très simple : < create a new chest inventory with id "MyGUI" with 6 row named "Vendeur" > Et pour l'ouvrir : < open gui with id "MyGui" to player > Et pour l'edit : < edit gui with id "MyGui": > (Après le ":", tu as juste à ajouter ce que tu veux, comme un < set slot .... >, ...)
  20. 2 points
    Le sujet à été réglé sur discord, le message a été mis à jour. Ce sujet est résolu
  21. 2 points
    Je t'ai distribué toutes les cartes pour que tu réussisses Même étant débutant, le but est de s'améliorer... Si tu n'essaies pas de toi-même, tu n'évolueras certainement pas ! J'ignore comment tu as appris à développer mais l'avantage avec Skript c'est que c'est un "langage" très haut niveau, c'est un "langage" interprété. De simples connaissances en anglais te suffiront à faire à peu près ce que tu souhaites... Bien que d'amples connaissances techniques et mathématiques sont requises pour faire des choses plus complexes. L'essentiel c'est de comprendre les concepts de base qui sont quasi communs à tous les langages de programmation, entre autre : comprendre ce qu'est une variable, assimiler les conditions, savoir créer une boucle et comprendre l'intérêt des fonctions. Pour comprendre et assimiler ces concepts, il faut t'entraîner. Ces 4 concepts-là, tu les retrouveras partout et en ayant compris ça, ça te débloquera pleins de choses. Voici quelques conseils / ressources qui pourront t'aider à l'avenir : Toujours faire plusieurs recherches Google : généralement, si tu te poses une question, elle a déjà été posée quelque part par une autre personne ayant rencontré le même problème. Si ta recherche n'aboutie pas, change de mots clés, tourne ta question différemment... Il ne faut surtout pas se contenter d'une seule source, confronte-les et teste tous les bouts de code que tu pourras voir. Attention : le copier / coller ne sert à rien, il faut que tu comprennes ce que tu es en train de faire, sinon ça n'a pas d'intérêt. Te servir des documentations officielles (celle de Skript-MC par exemple, celle de SkriptHub.net que je trouve plus complète, celle de SkUnity etc..) : l'avantage avec les documentations, c'est qu'il y a généralement des exemples pouvant t'aider à la résolution de ton problème. Lien vers la documentation officielle (toujours la plus complète) de Skript : [Contenu masqué] Dans le cas où tes recherches ne t'aident pas du tout, demander de l'aide sur les forums peut constituer une très bonne solution Si je pouvais te donner un dernier conseil, ça serait de ne jamais abandonner face à une quelconque difficulté. Ce que tu trouveras compliqué aujourd'hui, tu le trouveras plus ou moins facile demain. Mais pour s'en rendre compte, il faut pratiquer et tester massivement.
  22. 2 points
    ❑ Pourquoi créer sa propre coloration syntaxique ? Créer sa propre coloration syntaxique rend votre code plus lisible. Cela facilite donc sa compréhension (Pour vous et pour les autres). Cela permet de différencier différentes parties de votre code (Textes, chiffres, conditions...), et pour finir, c'est je pense bien plus jolie qu'un code seulement en blanc. ❑ Sommaire Introduction Préparation Paramétrage thème/syntaxe Thème: Créer une règle Syntaxe: Basique Syntaxe: Complexe Fin ❑ 1 - Introduction C'est mon premier tutoriel donc soyez indulgents si des explications manquent. Conseillez-moi en répondant a ce sujet ! Quelques pré-requis pour suivre ce tutoriel: Sublime Text 3 (Sans blagues) - (Télécharger) Une connaissance de base des syntaxes de JSON Une connaissance de base des syntaxes du YML/YAML Une connaissance des Regex Liens pratiques: Générateur de couleurs (Accéder) Test de Regex (Accéder) De quoi sera constitué notre coloration syntaxique ? Un Thème, constitué de règles qui appliqueront des propriétés (Couleurs du texte, de l'arrière plan) à des identifiants (Voir ci-dessous) Une Syntaxe, permet l'envoie d'identifiant pour coloré le texte (Utilise des Regexs) En JSON, quelque soit son type, la valeur d'une propriété devra être mit en chaîne de caractère (Exemple: "valeur", "5", "#eeeeee"...). ❑ 2 - Préparation Pour commencer, nous allons créer nos fichiers nécessaires. Sur Windows [%appdata%.\Sublime Text 3\Packages] (Si vous utilisez un répertoire personnalisé, accéder à ce répertoire) Sur MacOS [~/Library/Application Support/Sublime Text 3/Packages] Sur Linux [~/.config/sublime-text-3/Packages] Créez-y un dossier nommé [User] et accédez-y. Vous choisirez un nom pour votre thème (Remplacez tout les [<nom>] dans ce tutoriel par le votre) Créez-y un fichier nommé [<nom>.sublime-color-scheme] (Le thème) Créez-y un fichier nommé [<nom>.sublime-syntax] (La syntaxe) Ouvrez ces deux fichiers ❑ 3 - Paramétrage thème/syntaxe Commençons par le thème ! (<nom>.sublime-color-scheme). Utilisation de: JSON // Ceci est un commentaire, retirez les commentaires avant de commencer { "name": "<nom>", // Donnons lui un nom "globals": { "parametre_1": "valeur_1", // Voici le format à respecter "parametre_2": "valeur_2", // Vous trouverez la liste des propriétés plus bas dans le tutoriel :) "background": "#14151F", // Exemple d'utilisation (Hexadecimal) "foreground": "white", // Exemple d'utilisation (Nom de la couleur) "selection": "rgb(187, 188, 199)" // Exemple d'utilisation (RGB) }, } Liste des propriétés (Page Officiel) Liste des propriétés traduites : (Incomplet) La configuration du thème est maintenant terminé ! Configurons la syntaxe ! (<nom>.sublime-syntax). Utilisation de: YAML # Ceci est un commentaire, retirez-les avant de faire le tuto # Laissez tout ce qui est ici (Sauf les commentaires), c'est important ! %YAML 1.2 --- name: Skript # Mettez le nom du language de programmation (Donc Skript) file_extensions: - sk # Listez les extensions scope: default.text # Identifiant par défault du code La configuration du thème est maintenant terminé ! Pour activer le thème, il vous suffit d'aller dans [Preferences > Color Sheme... > <nom>] Pour utiliser la syntaxe, il vous suffit d'ouvrir un fichier avec une des extensions indiquées dans file_extensions ❑ 4 - Thème: Créer une règle Créons maintenant notre première règle de notre thème (<nom>.sublime-color-scheme) { "name": "<nom>", "globals": { // Configuration }, "rules": // C'est ici que c'est important [ { "name": "THE_NAME_I_WANT", // Mettez le nom de votre choix "scope": "id", // Mettez un identifiant UNIQUE (exemple: skript.number, skript.green...) // Propriétés (Liste en dessous) }, { // Exemple 1 "name": "True", "scope": "boolean.true", "foreground": "#3EE709", "font_style": "bold" }, { // Exemple 2 "name": "Effects", "scope": "skript.effects", "foreground": "darkblue" } ] } Liste des propriétés traduites: (Incomplet) foreground - Couleur - Couleur du texte background - Couleur - Couleur de l'arrière plan foreground_adjust - ??? A rechercher ??? selection_foreground - ??? A rechercher ??? font_style - Style - bold et/ou italic (Si vous souhaitez mettre les deux, indiquez "bold italic") ❑ 5 - Syntaxe: Basique Pour créer une syntaxe, suivez le modèle ci-dessous: %YAML 1.2 --- name: Skript file_extensions: - sk scope: default.text contexts: main: - match: "REGEX" # Regex scope: "IDENTIFIANT" # Identifiant (Relié à celui du thème) - match: "REGEX_2" # Regex scope: "IDENTIFIANT_2" # Identifiant (Relié à celui du thème) # Exemples - match: "true" scope: "boolean.true" - match: "([0-9]*)" scope: "skript.numbers" ❑ 6 - Syntaxe: Complexe Vous vous posez peut-être la question de comment faire pour faire des sortes de "balises de texte". Voici la réponse: %YAML 1.2 --- name: Skript file_extensions: - sk scope: default.text contexts: main: - match: "\"" push: # Cela s'apparente à une boucle infini (Ou presque) - meta_scope: "text" # Identifiant - match: "\"" # Si le caractère est " pop: true # Sortir de la boucle - match: "test" # Attention: Ce qui est en dehors de la boucle ne pourra pas être "match" si celle si est toujours active. Vous pouvez donc les mettre dans cette boucle scope: "id.test" # Si un résultat est "test" utiliser l'identifiant "id.test" sur "test" Plus d'informations sur les syntaxes sur le site officiel. ❑ 7 - Conclusion Vous pouvez trouver l'exemple que j'ai réalisé: (En développement) Si vous avez des suggestions pour améliorer ce tutoriel, faites m'en part ! N'hésitez pas à partagez vos créations ! Citations: [Contenu masqué], [Contenu masqué], [Contenu masqué]. Si vous avez besoin d'aide suite à ce tutoriel, créer un nouveau sujet et mentionner ce tutoriel.
  23. 2 points
    Ah ! Si tu passes sur du full-skript ca devient directement beaucoup plus accessible ! La solution que je te donnes ci-dessous est celle que j'ai trouvé grâce au serveur Discord de Skript-MC, notamment une partie de code qui vient de @Ultracube command /loop-riches: permission: sk.loop-riches trigger: loop {money::*}: add loop-index to {_inverted::%loop-value%::*} set {_position} to 1 loop reversed sorted {money::*}: {_previous_value} is not loop-value set {_previous_value} to loop-value loop {_inverted::%loop-value%::*}: set {_sorted::%{_position}%} to loop-value-2 add 1 to {_position} loop {_sorted::*}: send "&b&l%loop-index% >>> &f%loop-value% (&b%{money::%loop-value%}%&f)" Voici le rendu ingame Bonne soirée
  24. 2 points
    Bonjour, pour le coup tu ne fait pas vraiment un tutorial, c'est plutôt du code que tu donnes x) Il faut expliquer certianes lignes qui sont peut être compliqué à comprendre pour les débutants en skript Cordialement Yghore
  25. 2 points
    Bonjour / Bonsoir aujourd'hui je cherchait dans les dossiers infinie { presque me juger pas x) } du Web et je suis tomber sur une petite merveille :) Je suis tomber sur un convertisseur de script en java ! Voici le lien : [Contenu masqué] Merci de me mettre un like sa m'aiderais :)
  26. 2 points
    Bonjour! Dans Skript, il y a quelques chose qui plutôt pratique, c'est de pouvoir attribuer une variable à un joueur, un uuid, un monde etc... Par exemple la variable {test.%player%} change à chaque joueur. Ou alors {test.%event-block%} change en fonction du bloc Et bien en Java c'est possible ? Dans ce tuto, je ne traiterai pas d'enregistrer ces variables dans des fichiers, ça je ferais peut-être plus tard dans un autre tuto. Ces variables s'appellent des HashMap. Un HashMap est constitué d'une clé (key) et d'une valeur (value). A chaque clé est associée une valeur. Une clé est une variable de n'importe quel type, mais c'est bien souvent un String. Si vous recherchez une variable dans le HashMap qui est identique à la clé, alors vous récupérerez la valeur associé. Les HashMaps permettent aussi d'enregistrer des variables temporairement, sans charger le fichier de sauvegarde à chaque fois car ça bouffe ÉNORMÉMENT de ressources de faire ça. Bon maintenant passons à la pratique! Pour retrouver l'utilité des variables de Skript, les HashMap doivent être déclaré juste après le "public class", avant toute fonction. Les HashMap contiennent deux type de variable, un pour la clé et un pour la valeur. Ces types de variables peuvent être différents ou les même, ce sera déterminé en fonction de ce que vous en ferez. Voila à quoi ressemble un HashMap: HashMap<String, Double> variable; Le String est donc le type de clé et le double est le type de la valeur associée. Voilà maintenant comment déclarer cette variable: public class Exemple extends JavaPlugin implements Listener { static HashMap<String, Double> missions = new HashMap<String, Double>(); @Override public void onEnable() { //CODE } } Vous pouvez changer le "static" en "public static" si vous voulez que cette variable puisse être lu par d'autres classe ou même enlever le "static" si vous n'utilisez pas de fonctions static. Maintenant on va apprendre à mettre et récupérer des infos de cette variable. Dans les exemples suivant, ma variable sera nommé "exemple". Si vous voulez mettre des joueurs ou d'autre choses en clé, je vous conseille de mettre un String, souvent avec le nom. Ça évite de charger des grosses variables comme les Player et les noms ne bougent pas. Voilà comment mettre une clé et une valeur: exemple.put(key, value); Et voici comment récupérer une valeur: exemple.get(key); Pour tester si le HashMap contient une clé: exemple.containsKey(key); Pour tester si le HashMap contient une valeur: exemple.containsValue(value); Pour finir un petit exemple. On enregistre ici une variable contenant un nombre de point d'un joueur. La clé est donc le nom du joueur et la valeur son nombre de points. public class Exemple extends JavaPlugin implements Listener { static HashMap<String, Integer> points = new HashMap<String, Integer>(); @Override public void onEnable() { } @EventHandler public void onJoin(PlayerJoinEvent e) { Integer pts = 1; //Normalement je charge de mon fichier de config mais là c'est un exemple points.put(e.getPlayer().getName(), pts); } } Maintenant imaginons qu'à sa déconnexion je sauvegarde ses points. J'utilise donc: public class Exemple extends JavaPlugin implements Listener { static HashMap<String, Integer> points = new HashMap<String, Integer>(); @Override public void onEnable() { } @EventHandler public void onLeave(PlayerQuitEvent e) { Player p = e.getPlayer(); //Je crée une variable pour raccourcir le code if(points.containsKey(p.getName())) { Integer pts = points.get(p.getName()); //Là j'utilise ma fonction pour sauvegarder les points } } } Voilà! Encore une fois j'espère avoir été assez clair et que ce tuto vous sera utile ? (un p'tit like ça fait toujours plaisir aussi :D) Et je vous invite à me demander sur quel thème voulez vous que mon prochain tuto soit ?
  27. 2 points
    Bonjour, Dans ce tutoriel, nous allons étudier les Loops. Celles-ci permettent par exemple de viser une variable ou un groupe de choses (de joueurs pas exemples). Nous allons voir ça de plus près. I/Loop avec un groupe: A)Les joueurs Grâce aux loop, vous pouvez sélectionner un groupe entier, par exemple tout les joueurs, exemple: command /sendall: trigger: loop all players: send "Tu a reçu ce message" to loop-player Là, ma commande prend en compte tout les joueurs présents sur le serveur et leur montre le message. Tout les joueurs présents reçoivent donc ce message. Il est aussi possible de faire une sélection, par exemple, sélectionner tout les joueurs, et trier ceux qui ont les permissions, exemple: command /checkperm: trigger: loop all players: if loop-player has permission "skript.test": send "Tu a la permission" to loop-player stop else: send "Tu ne possède pas la permission :(" to loop-player Là, ma commande sélectionne tout les joueurs du serveur et fait un tri, entre ceux qui ont la permission "skript.test" et ceux qui n'ont pas la permission. Avec ce tri, la commande montrera le message "Tu a la permission" aux joueurs ayant la permission, et montrera le message "Tu ne possède pas la permission :(" aux autres. B)Entitées Il est possible de sélectionner les entités par exemple, pour comme les joueurs, faire un tri ou autre, exemple: command /checkmob: trigger: loop all entities in world "test": if loop-entity is a creeper: add 1 to {creeper.variable} Là, la commande sélectionne tout les mobs dans le monde "test", ensuite il fait un tri entre ceux qui sont des creepers et ceux qui ne sont pas des creepers. Après avoir sélectionne tout les mobs, il ajoute 1 dans la variable {creeper.variable} pour chaque creeper. C)Les inventaires Il y a encore beaucoup de possibilités que je ne pourrais pas vous lister, mais, il est aussi possible de sélectionner les items dans les inventaires des joueurs, comme ici: command /checkmob: trigger: loop all players: loop all items in loop-player's inventory: if loop item is diamond: add 1 to {diamond.variable} Tout d'abord, vous devez sélectionner tout les joueurs à l'aide de "loop all players". Après avoir sélectionné tout les joueurs, grâce à "loop all items in loop-player's inventory", vous sélectionnez tout les diamants dans les inventaires, avec "if loop item is diamond", et si oui, cela ajoute 1 dans la variable {diamond.variable}. Il existe encore beaucoup de possibilités, mais nous allons nous arrêter là pour l'instant. II/Loop les listes: A)C'est quoi une liste ?: Une liste, ça marche comme une variable, sauf que seules les listes peuvent marchent avec les Loops. Et les listes peuvent stocker des entités, des joueurs, et bien d'autres choses par rapport aux variables. Une liste s'écrit comme ça: {liste.test::*}, par rapport à une variable qui s'écrit comme cela: {liste.test}. B)Ca sert à quoi ?: Grâce à cela, vous pouvez stocker des entités, des joueurs (pratique pour les groupes) et même des coordonées, des endroits précis. Nous allons voir de plus près l'utilité des loops. C)Utiliser des loops: Imaginons, vous voulez garder la position d'un bloc, à l'aide de ce skript: command /addpos: trigger: add location of targeted block to {blocs.liste::*} send "&eVous avez ajouté la position du bloc dans la liste" Là, en utilisant la commande /addpos, vous ajoutez la position du bloc que vous regardez dans la liste {blocs.liste::*}. Ajouter une position par exemple est une chose possible que avec les listes. Ensuite, nous allons faire un skript pour remplacer TOUT les blocks ajoutés dans la liste en bloc de diamant: command /replall: trigger: loop {blocs.liste::*}: set {_loc} to loop-value set block at {_loc} to diamond block Avec cette commande, vous sélectionnez tout les blocks enregistrés dans la variable {blocs.liste::*}. Ensuite, vous placez {_loc} à l'endroit de chaque bloc enregistré (loop-value correspond aux blocs enregistrés). Et ensuite le bloc qui est à {_loc} est transformé en bloc de diamant. Vous allez me dire qu'il est possible de faire la même chose sans les listes, mais l'avantage des listes, c'est que vous pouvez sélectionner tout les blocs enregistrés d'un coup ! Voilà, mon troisième tutoriel est terminé, j'espère qu'il vous aura aidé et n'hésitez pas à me poser des questions, surtout que la partie ci-dessus est assez compliqué à comprendre.
  28. 2 points
    Hey ! Si tu es toujours intéresser je plusieurs choix pour toi ( + de 350 fichiers skript)
  29. 2 points
    GUI Manager Bonjour ! Aujourd'hui, je vais vous expliquer les GUI de TuSKe, qui sont pour moi la meilleure manière de créer des GUIs avec Skript. Quelques clarifications : Ce tutoriel n'est qu'une traduction du wiki du créateur, Tuke-Nuke, disponible ici Je suis conscient qu'il y a déjà un tutoriel sur les GUIs avec TuSKe, mais il ne comprend pas la V2 du GUI Manager, et n'est pas très avancé (ce qui n'est pas toujours mal) La V2 du GUI Manager n'est disponible qu'à partir de la version 1.7.7 de TuSKe Pour le moment, il n'est pas possible de formatter le slot d'un inventaire d'un joueur. À propos: Le GUI Manager est une API simple qui permet de facilement créer des guis avec la meilleure performance possible. Il y a deux types disponibles: gui simple et gui avancé. Si vous êtes un débutant ou que vous voulez simplement un gui simple, choisissez la première option. Sinon, vous pouvez essayer le gui avancé. [spoiler=GUI simple - Les fonctionnalités les plus basiques, mais assez pour créer vos propres guis facilement] Syntaxe: [spoiler=Ouvrir l'inventaire] #Effet open {virtual %inventory type% inventory [with size %integer%] [(named|with (name|title)) %string%]} to %players% #Seulement l'expression entre accolades, qui retourne un inventaire vide, est de TuSKe #Le reste est juste l'effet de Skript vanilla [spoiler=Créer un GUI] #Effets (format|create|make) [a] gui slot %integers% of %players% with %item stack% [to [do] nothing] (format|create|make) [a] gui slot %integers% of %players% with %item stack% to close [(using|with) %click action% [(button|click|action)]] (format|create|make) [a] gui slot %integers% of %players% with %item stack% to [close then] (run|exe[cute]) %sender% command %string% [with permission %string%] [(using|with) %click action% [(button|click|action)]] [(using|with) cursor [item] %item stack%] (format|create|make) [a] gui slot %integers% of %players% with %item stack% to [close then] (run|exe[cute]) function %function% [(using|with) %click action% [(button|click|action)]] [(using|with) cursor [item] %item stack%] #Déprécié : explication ci-dessous (format|create|make) [a] gui slot %integers% of %players% with %item stack% to (run|exe[cute]) [gui [click]] event #Nouveauté de la 1.7.5 (voir ci-dessous) (format|create|make) [a] gui slot %numbers% of %players% with %itemstack% to (run|exe[cute]) [(using|with) %click action% [(button|click|action)]] [spoiler=Enlever un GUI] #Effets (unformat|remove) [the] gui slot %integers% of %players% (unformat|remove) [all] [the] gui slots of %players% [spoiler=Conditions] %player% has [a] gui %player% does(n't| not) have [a] gui slot %number% of %player% is [a] gui slot %number% of %player% is(n't| not) [a] gui Ce que les effets font: Il y a 4 types d'actions : "do nothing" (alias "unstealable" de SkQuery), "run command", "run function" and "run code". Les 3 premiers types ont une option pour fermer le GUI lors d'un clic ; pour faire ça, incluez simplement "to close". Il est également possible de n'exécuter l'action que si l'on clique d'une certaine façon ; pour faire ça, incluez juste "using %clicktype%". Types de clic possibles: [spoiler=Types de clic] left [mouse button] right [mouse button] (shift left|left mouse button with shift) (shift right|right mouse button with shift) double click [using mouse] middle [mouse button] number key drop [key] (control drop|drop key with control) "run command" et "run function" ont une possibilité de ne s'exécuter que si le joueur clique avec un certain item dans son curseur. Pour ça, incluez "(using|with) cursor [item] %itemstack%". "Run command" vous permet d'exécuter une commande quand on cliquee ; on peut choisir entre "console" et "player" pour le "sender" (celui qui exécute la commande). On peut également ajouter "with permission %string%" (qui n'a d'effet que quand le "sender" est "player"), ce qui fera exécuter la commande par le joueur avec une certaine permission, qui disparaîtra immédiatement après l'exécution de la commande. NOTE : Utiliser une permission est plus sûr que le "as op" pouvant avoir été utilisé avec skQuery. Astuce : Pour répliquer l'effet de ce dernier, utilisez "with permission "*"", "*" étant la permission d'avoir toutes les permissions "Run function" permet d’exécuter une fonction quand on clique. Le format est exactement le même que celui pour appeler une fonction dans Skript : "<nom de la fonction>(<paramètres s'il y en a>)". Le "run code" est beaucoup plus simple :il exécute le code à l'intérieur d'un effet "format gui slot", ce qui supprime le besoin de créer un fonction ou une commande. Pour cette raison, l'utilisation de "to run gui click event" est découragée. Vous pouvez utiliser les event-values de l'event "on inventory click" provenant de n'importe quel addon ou utiliser les expressions intégrées à TuSKe pour ça (voir "Expressions de GUI" dans "GUI avancé"). Elles requièrent la version "1.7.5" ou plus. [spoiler=Exemple] open virtual chest to player format gui slot 0 of player with stone to run: send "Ce message sera envoyé quand le joueur clique" format gui slot 1 of player with arrow to close with middle click: send "Ce message sera envoyé après avoir été fermé si le joueur clique avec sa molette" format gui slot 2 of player with diamond to run using left click: if gui-cursor-item is a stone: # si le curseur est de la stone set gui-clicked-item to gui-cursor-item # l'item cliqué devient l'item du curseur set gui-cursor-item to air # et ce dernier est supprimé Structure basique: Pour créer un gui, vous devez suivre deux étapes simples: * Utiliser n'importe quel effet pour ouvrir un inventaire * Utiliser n'importe quel effet parmi ceux ci-dessus pour formatter un gui Voici un exemple type de code Exemples: [spoiler=Test de tous les effets] command /gui: trigger: if sender is console: broadcast "Exécuté par la console!" stop if player has permission "*": send "Le joueur a exécuté cette commande avec la permission ""*""" wait a tick if player doesn't have permission "*": send "Le joueur n'a plus la permission." else: send "Le joueur a toujours la permission, c'est sans doute un OP" else: send "Le joueur a exécuté la commande sans permission" command /guiExample: trigger: open virtual chest inventory to player format gui slot 0 of player with stone named "Ne fera rien" format gui slot 1 of player with stone named "Ne fera que se fermer" to close format gui slot 2 of player with stone named "Se fermera que si on clique avec une touche de nombre" to close using number key format gui slot 3 of player with stone named "Cela va exécuter une commande par le joueur, mais il n'aura peut-être pas la permission" to run player command "/gui" format gui slot 4 of player with stone named "Cela va exécuter une commande avec la permission ""*"" par le joueur" to run player command "/gui" with permission "*" format gui slot 5 of player with stone named "Cela va exécuter la commande par la console" to run console command "/gui" format gui slot 6 of player with stone named "Va exécuter la fonction faireQuelqueChose()" to run function faireQuelqueChose() format gui slot 7 of player with stone named "Va fermer le gui et exécuter faireQuelqueChose()" to close then run function faireQuelqueChose() format gui slot 8 of player with stone named "Va exécuter faireQuelqueChose() si on clique avec une pierre" to run function faireQuelqueChose() with cursor stone format gui slot 9 of player with stone named "Va exécuter l'event de GUI" to run gui event # Déprécié format gui slot 10 of player with stone named "Va exécuter la code ci-dessous": send "Salut." to player give a stone to player heal player function faireQuelqueChose(i: int = 0): #TuSKe pourra exécuter la fonction même si elle a été chargée après broadcast "Et ça l'a fait" on gui click: # Déprécié send "Exécuté via un event séparé" [spoiler=Exemple d'actions multiples] L'exemple ci-dessous montre comment exécuter différentes actions dépendamment du type de clic function changerNom(p: Player, clicktype: String): set {_number} to name of slot 4 of {_p}'s current inventory parsed as number #Requiert SkQuery ou les versions de Bensku if {_clicktype} is "gauche": remove 1 from {_number} else if {_clicktype} is "shift gauche": remove 100 from {_number} else if {_clicktype} is "droit": add 1 to {_number} else if {_clicktype} is "shift droit": add 100 to {_number} set name of slot 4 of {_p}'s current inventory to "%{_number}%" command /multiactionExample: trigger: open virtual dispenser inventory named "Multi-action example" to player set {_item} to diamond named "1" set line 1 of lore of {_item} to "&7Clic gauche : enlève 1" set line 2 of lore of {_item} to "&7Shift clic gauche: enlève 100" set line 3 of lore of {_item} to "&7Clic droit : ajoute 1" set line 4 of lore of {_item} to "&7Shift clic droit : ajoute 100" format gui slot 4 of player with {_item} to run function changerNom(player, "gauche") with "left" click format gui slot 4 of player with {_item} to run function changerNom(player, "shift gauche") with "shift left" click format gui slot 4 of player with {_item} to run function changerNom(player, "droit") with "right" click format gui slot 4 of player with {_item} to run function changerNom(player, "shift droit") with "shift right" click [spoiler=GUI à plusieurs pages] function ouvrirMenu(p: Player, type: String): if {_type} is "page 1": open virtual chest inventory with size 1 named "Page 1" to {_p} make a gui slot 0 of {_p} with stone named "Aller à la page 2" to run function ouvrirMenu({_p}, "page 2") else if {_type} is "page 2": open virtual chest inventory with size 1 named "Page 2" to {_p} make a gui slot 0 of {_p} with stone named "Aller à la page 3" to run function ouvrirMenu({_p}, "page 3") #Et pareil jusqu'à la dernière page else if {_type} is "page 3": open virtual chest inventory with size 1 named "Page 3" to {_p} make a gui slot 0 of {_p} with stone named "Revenir à la page 1" to run function ouvrirMenu({_p}, "page 1") Choses à savoir: * Si vous voulez changer un item après qu'il ai déjà été formatté, pas besoin de le re-formatter, utilisez juste n'importe quel effet pour changer un item dans un inventaire. Par exemple, "set slot 0 of player's current inventory to {_nouvelItem}". * Si vous formattez un slot avec de l'air, un slot vide et verouillé sera créé. Le joueur ne peut pas non plus y placer un item * Vous pouvez formatter le même slot avec le même item mais une différente action ; une commande avec un clic droit et une fonction avec un clic gauche, par exemple. * Dans l'event "on gui click", vous devrez utiliser la condition "the name of event-inventory is the gui name that you want", car plusieurs scripts peuvent utiliser à la fois. * utiliser "uncancel event" dans l'event "on gui click" permettra au joueur d'enlever l'item et de verrouiller le slot après pour la raison ci-dessus. Si vous ne voulez pas que le slot soit verrouillé, utilisez "unformat gui slot event-number of player" * À partir de la version 1.7.2 de TuSKe, les fonctions utilisées dans "to run function" n'ont pas nécessairement à être déclarées au dessus. * À partir de la version 1.7.5 de TuSKe, vous pouvez exécuter du code directement sous l'effet. Voir exemples ci-dessus [spoiler=GUI avancé - Plus de ressources, qui permettent de faire des guis plus rapidement et proprement] Syntaxes: Se familiariser avec les syntaxes [spoiler=Créer/éditer un GUI] #Expression pour créer un inventaire #Elles font toutes la même chose, il y en a plusieurs pour mettre à disposition tous les usages possible de la syntaxe virtual %inventorytype% [inventory] [with size %-number%] [(named|with (name|title)) %-string%] virtual %inventorytype% [inventory] [with %-number% row[s]] [(named|with (name|title)) %-string%] virtual %inventorytype% [inventory] [(named|with (name|title)) %-string%] with size %-number% virtual %inventorytype% [inventory] [(named|with (name|title)) %-string%] with %-number% row[s] #Effets create [a] [new] gui [[with id] %-string%] with %inventory% [and shape %-strings%] (change|edit) %guiinventory% [spoiler=Formatter un GUI] (make|format) next gui [slot] (with|to) %itemstack% (make|format) gui [slot] %strings/numbers% (with|to) %itemstack% [spoiler=Fermer un GUI] #C'est un effet qui va exécuter du code quand le gui est fermé run (when|while) clos(e|ing) [gui] [spoiler=Changer les propriétés du GUI] #Change les propriétés d'un gui, comme le nom et la taille de l'inventaire ou l'arrangement des items change gui inventory to name %string% and size %number% change gui shape [of (items|actions)] to %strings% change gui properties of inventory to name %string% [with %-number% row[s]] and shape [of (items|actions)] to %strings% [spoiler=GUI Expressions] #Expressions générales last[ly] [created] gui #Retourne le gui le plus récemment créé. Est dépendant de l'event, comme une variable locale gui [with id] %string% #Retourne un gui à partir d'un identifiant #GUI expressions (voir plus loin) # Retourne le numéro du slot cliqué gui-slot # Retourne le slot cliqué "cru" # Un nombre de 0 à la taille de l'inventaire du haut veut dire un slot de l'inventaire du haut # Un nombre supérieur ou égal à la taille de l'inventaire du haut + 1 veut dire un sloot de l'inventaire du joueur. # Pas encore utilisé, simplement une option qui pourra devenir utile dans le futur gui-raw-slot # Le numéro correspondant si le type de clic est "number key" gui-hotbar-slot # L'inventaire impliqué dans l'action gui-inventory # L'action d'inventaire (valeurs listées ci-dessous) gui-inventory-action # Le type de clic gui-click-(type|action) # L'item dans le curseur et l'item cliqué. Ces deux expressions sont modifiables (add/remove/set/clear/delete) gui-cursor gui-[(clicked|current)-]item # Le type de slot (pas de grande utilité) gui-slot-type # Le joueur qui a cliqué gui-player # La liste de tous les joueurs pour qui le gui actuel est ouvert gui-players # Le nom de l'inventaire (pareil que "name of event-inventory") gui-inventory-name # L'identifiant texte du slot, voir ci-dessous gui-slot-id # L'objet du gui lui-même, permettant de le modifier gui [spoiler=Types] gui inventory: Représente un inventaire de gui, ce type est seulement utilisé quand on édite un gui déjà créé click (type|action): Représente un type de clic dans un event de "on inventory click". À partir de la 1.7.4-beta/1.7.5, il utilise les valeurs de Bensku pour compatibilité. Valeurs: left [mouse button], (shift left|left mouse button with shift), right [mouse button], (shift right|right mouse button with shift), middle [mouse button], number key, double click [using mouse], drop [key], (control drop|drop key with control) inventory action: Représente une action d'inventaire (=/= type de clic). À partir de la 1.7.4-beta/1.7.5, il utilise les valeurs de Bensku pour compatibilité. Valeurs: nothing, pickup all, pickup some, pickup half, pickup one [item], place all, place some, place one, swap with cursor, drop all [from] cursor, drop one [from] cursor, drop all [from] slot, drop one [from] slot, (move to other inventory|instant move), hotbar move and read, (hotbar swap|swap with hotbar), clone stack, collect to cursor, unknown slot type: Représent le type d'un slot dans un event de "on inventory click" Valeurs: armor, container, crafting, fuel, outside, quickbar, result Si vous utilisez les versions de Bensku, référez vous aux valeurs de click action et inventory action dans sa documentation. TuSKe n'utilise les mêmes valeurs que si vous utilisez une version ancienne. Comment créer un gui D'abord, ce système de guis utilise un nouveau format pour en créer un : au lieu d'ouvrir l'inventaire puis de formatter les slots, on crée un gui puis on l'ouvre au joueur. Il faut d'abord la base pour le créer: create [a] [new] gui ) [[with id] %-string%] with %inventory% [and shape %-strings%] create a gui with virtual chest with 6 rows named "&4Select the server" Maintenant, quelque chose de nouveau : des effets dans des effets. NDLR : Ceci étant une traduction, vous entendrez l'avis de Tuke-Nuke. Personnellement, je pense que c'est des éléments à part, comme Tlatoani (développeur de MundoSK) En utilisant ce concept, vous devez y utiliser l'effet "Make GUI" *à l'intérieur*. Exemple : create a gui with virtual chest with 6 rows named "&4Select the server": #Syntaxes: # (make|format) next gui [slot] (with|to) %itemstack% # (make|format) gui [slot] %strings/numbers% (with|to) %itemstack% make next gui with diamond sword named "&4PvP server" # It will format the next free slot that is not formatted yet. make next gui with grass named "&aSkyBlock" Pour le moment, c'est juste un item verrouillé (comme le "to do nothing" de la v1). Au lieu d'utiliser des commandes ou des fonctions, vous pouvez maintenant utiliser du code Skript directment (des effets dans des effets dans des effets ? Effet-ception !). NDLR : Idem, c'est toujours l'avis de Tuke-Nuke Pour faire ça, mettez simplement la code à l'intérieur de l'effet, comme si c'était une boucle ou une condition : create a gui with virtual chest with 6 rows named "&4Select the server": make next gui with diamond sword named "&4PvP server": send "You will be teleported to the Pvp server" execute player command "/server pvp" make next gui with grass named "&aSkyBlock": send "You will be teleported to the Skyblock server" execute player command "/server skyblock" Maintenant, vous n'avez qu'à ouvrir le gui déjà créé au joueur en utilisant l'expression "last[ly] [created] gui" + l'effet "open inventory" to player: open last gui to player Et voilà, le gui le plus basique se résume à ça. Voici ce à quoi votre code devrait ressembler : command /servers: trigger: create a gui with virtual chest with 6 rows named "&4Choix de serveur": make next gui with diamond sword named "&4Serveur PvP": send "Vous allez être tp au serveur PvP" execute player command "/server pvp" # exemple make next gui with grass named "&aSkyBlock": send "Vous allez être tp au serveur SkyBlock" execute player command "/server skyblock" #exemple open last gui to player Il y a aussi un effet pour exécuter du code quand le gui est fermé create new gui with virtual chest named "Sac à dos": run when close the gui: # Ce code va être exécuté AVANT d'enlever les items set {Variable::%gui-player%::*} to all items of gui-inventory Les event-values de "on inventory click" Maintenant, vous pouvez utiliser les event-values de l'event "on inventory click" même hors de l'event, au cas où vous avez un addon qui a ces event-values. create a gui with virtual chest with 6 rows named "&4Choix de serveur": make next gui with diamond sword named "&4Serveur PvP": send "%clicked item%" #Umbaska Mais pour ne pas vous en rendre dépendant, TuSKe apporte ses propres expressions (voir "GUI Expressions" ci-dessus). Exemple : create a gui with virtual chest with 6 rows: make next gui with glass: if gui-click-action is left mouse buttom or right mouse buttom: set gui-clicked-item to gui-cursor-item set gui-cursor-item to air # Seuls ces deux expressions peuvent être changées GUIs globaux Maintenant vous pouvez créer des guis globaux grâce à un identifiant texte on skript load: create a gui with virtual chest with 6 rows named "&4Choix de serveur": make next gui with diamond sword named "&4Serveur PvP": send "Vous allez être tp au serveur PvP" execute player command "/server pvp" # exemple make next gui with grass named "&aSkyBlock": send "Vous allez être tp au serveur SkyBlock" execute player command "/server skyblock" #exemple command /servers: trigger: open gui "HUB" to player NOTE: Tous les guis (globaux ou locaux) partagent le même inventaire. Cela veut dire que si vous changez un item pour un joueur, alors il changera pour tous les joueurs. Le meilleur usage pour les guis globaux sont des guis "statiques" (un sélecteur de serveur ou un gui pour montrer les stats d'une faction, par exemple), où les valeurs ne dépendent pas du joueur. Vous pouvez aussi créer des guis globaux par joueur pour ne pas avoir à les recréer à chaque fois, mais n'oubliez pas de supprimer un gui quand il n'est plus utilisé (quand un joueur dee déconnecte par exemple): on quit: delete gui "PlayerStats.%player%" # Va supprimer le gui et le fermer s'il est ouvert pour un joueur Editer un GUI Si vous voulez éditer un gui, en reformattant un slot ou changer les propriétés du gui (plus d'infos dessous), vous pouvez juste utiliser l'effet "edit" au lieu de "create". command /edit: trigger: edit gui "HUB": # L'item va automatiquement se changer si le GUI est ouvert pour un joueur make gui 0 with diamond sword named "Le serveur PvP est en maintenance." GUIs avec forme Pour rendre vos guis simples et modulable, vous pouvez utiliser des formes. Ces formes utilisent le même concept que les formes des recettes de craft : un caractère représente un slot d'un inventaire. Avec ça, il devient plus simple de faire des guis dynamiques personnalisés. #syntax: create [a] [new] gui [[with id] %string%] with %inventory% [and shape %strings%] add "xxxxxxxxx" to {_forme::*} add "x--------x" to {_forme::*} add "xxxxxxxxx" to {_forme::*} create a gui with virtual chest and shape {_forme::*} Imaginez que les textes ci-dessus représentent un inventaire. Chaque slot qui est représenté par le même caractère sera le même, donc quand ils seront formattés et que le joueur clique, alors ils auront le même item et la même action. add "xxxxxxxxx" to {_forme::*} add "x--------x" to {_forme::*} add "xxxxxxxxx" to {_forme::*} create a gui with virtual chest and shape {_forme::*}: make gui slot "x" with iron ingot make gui slot "-" with diamond Regardez les exemples dessous pour en voir l'utilité. Changer les propriétés d'un GUI Ces effets vous aideront à changer l'inventaire du GUI proprement. Vous devez les utiliser dans "(edit|change) %gui inventory%" (Il n'est pas nécessaire de changer lors de la création). NDLR : la phrase entre parenthèses est possiblement incorrecte, la phrase originale en anglais n'ayant pas trop de sens #Syntaxes: change gui inventory to name %string% and size %number% change gui shape [of (items|actions)] to %strings% change gui properties of inventory to name %string% [with %-number% row[s]] and shape [of (items|actions)] to %strings% La **première* permet simplement de changer le nom et la taille si c'est un coffre d'un gui. Pas grand chose d'autre à dire. La deuxième est plus complexe : elle permet de changer l'arrangement des items, leur action, ou les deux. Prenons ce gui pour exemple: create new gui with id "Exemple" with virtual hopper and shape "ABCDE": # vous pouvez créer la forme en une ligne loop 9 times: make next gui with a random item of all items open last gui to player /!\\ ATTENTION /!\\ : cette forme n'est pas la même que celle dont nous avons parlé au dessus. En utilisant "change gui shape of items <...>", vous devez utiliser une forme où on bouge un slot X vers un autre slot Y. En utilisant la forme "EABCD", notez que "E" a été déplacé vers le premier slot et que les autres ont été décalés vers la droite. Donc : edit last gui: loop 10 times: wait 1 second change gui shape of items to "EABCD" va décaler tous les items vers le slot de "droite". En utilisant "change gui shape of actions <...>", on va uniquement changer les actions des items, donc : - si on a un gui avec deux slots et la forme "AB" et qu'on change la forme des actions à "BA", l'action exécutée dans le slot 0 précédemment sera exécutée dans le slot 1 maintenant. En utilisant "change gui shape to <...>" on va changer les items et les actions à la fois. C'est comme utiliser les deux syntaxes précédentes à la fois. Choses à savoir: * On ne peut pas utiliser des event-values dans le code à exécuter en cas de click * Pour éviter ça, utilisez une variable temporaire command /example <text>: trigger: set {_arg} to arg # peut être une event-value create new gui with virtual chest: make gui slot 0 with diamond: send "%{_arg}%" * Les variables à l'intérieur du code de click se comporteront comme des "variables de slot". Cela veut dire qu'elle garderont la même valeur à chaque fois que le joueur clique : create gui with virtual chest: make gui slot 0 with diamond: add 1 to {_count} send "%{_count}%" # Va augmenter à chaque fois qu'on clique * Ces variables ne sont pas partagées entre slots, excepté si on utilise les gui "formés" (avec une forme) command /example2: trigger: set {_var} to 1 create new gui with virtual chest: loop integers from 0 to 35: make gui slot loop-integer with diamond: add 1 to {_var} send "%{_var}%" # tous les slots débuteront avec une valeur de 1, mais les valeurs augmenteront indépendemment entre chaque slot Examples de code : [spoiler=À faire] Si vous avez des exemples, n'hésitez pas à me les proposer sur Discord et peut-être que je les posterais ici ! Mon identifiant discord est Syst3ms#9959 et je suis présent sur les serveurs de skUnity et de Skript-MC, pour ne nommer qu'eux
  30. 2 points
    Car tu pense que c'est une bonne mentalité de ne pas répondre par-ce qu'il ne respecte pas spécialement la règle ? Pour ce genre de demandes, surtout qu'il n'y à rien de plus simple, et que c'est pareil pour toutes les versions, c'est plutôt débile de ne pas répondre.
  31. 2 points
    La prochaine fois merci de faire des recherches (tutoriel sur les GUI dans la section "Tutoriels" merci d'y jeter un coup d'oeil). Sinon tu fais : format slot 0 of player with 1 stick named "Test" with lore "Ceci est||un test" to be unstealable/to close/to close then run... Pour cela tu mets "with lore" et pour sauter des lignes tu mets "||".
  32. 2 points
    Je sais ;) Tien , et le like :P on damage of player: repair victim's boots repair victim's helmet repair victim's leggings repair victim's chestplate repair attacker's tool
  33. 2 points
    On Hunger meter Change: cancel event En principe ça devrait marcher. Je n'ai pas test ^^"
  34. 2 points
    BanInfo - Casier des sanctions Comme un casier judiciaire mais pour les bans V.2 Salut tout le monde ! Voici un Skript demandé par @Izychiel ! Ce Skript contient un Système de: - Bans (ban, ban-ip, tempban, unban, unbanip) tempban repris du Skript de @SaladeNuggets pour cause de bugs. - Mute (mute, unmute) - kick - BanInfo (Voir plus bas) par moi même [spoiler=Commandes/Permissions] [spoiler=Commandes/Permissions] Commandes: /banhelp: Voir toutes les Commandes [spoiler=Commandes/Permissions] - Ban: /ban <player> <raison> Permet de bannir un joueur. (Permission: mod.ban) - unban: /unban <player> Permet de debannir un joueur. (Permission: mod.unban) - Tempban: /tempban <player> <temps> Permet de bannir un joueur pendant un certain temps. (Permission: mod.tempban) /INFO/ ! Pour le temps mettre: [NOMBRE] minutes exemple: /tempban Im_PasteK 2 minutes - Banip: /banip <player> <raison> Permet de bannir l'adresse IP d'un joueur. (Permission: mod.banip) - unbanip: /unbanip <IP> Permet de débannir l'adresse IP d'un joueur. (Permission: mod.unbanip) - kick: /kick <player> <raison> Permet d'éjecter un joueur du serveur. (Permission: mod.kick) - mute: /mute <player> <raison> Permet de rendre muet un joueur (Permission: mod.mute) - unmute: /unmute <player> Permet de refaire parler le joueur (Permission: mod.unmute) - baninfo: /baninfo <player> Permet de voir toutes les sanctions de types bans avec des informations comme la raison ou le temps (Permission: mod.baninfo) Permission pour avoir toutes le commandes: mod.* Qu'est-ce que le BanInfo ? Le Ban info sert à voir des informations sur les sanctions de types bans sur le joueur. Comme combien de fois a-t-il été banni, temban et ban-ip. Et quelles sont les raisons pour qu'il à été banni. Voici un screen pour montrer comme ce présente ceci: Merci à @Izychiel qui m'a donné l'idée du Skript. Merci a @ExtraCreep pour m'avoir filé un autre code de mute/unmute ! Download:
  35. 2 points
    Essentials Information : Bonjour à tous , J ai remarqué que pleins de skript Essentials existaient mais n étaient pas complet ou n étaient pas super , c est pour cela que j en ai réalisé un ! Je tiens à préciser qu il y a des commandes figurantes dans le plugin que vous ne trouverez pas pour le moment dans ce skript /!\ ATTENTION : Pour faire fonctionner ce skript , désactivez ou enlever le plugin Essentials /!\ Des mises à jours seront mise régulièrement ! Vous avez un fichier "plugin/Essentials" à votre disposition ! Commandes : /ping /sudo /sethome /delhome /home /setwarp /warp /tpa /tpaccept /tpadeny /tpall /heal /kick /ban /pardon /invsee /essentials ( help / reload ) /kill /speed /gm /broadcast /me /time /day /night /clearinventory /mute /unmute /fireblast /whois /feed /endersee /jump /tree Le skript Essentials est mit à disposition par NelGossem_ selon les termes de la licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Pas de Modification 4.0 International.
  36. 2 points
    Bonjour/bonsoir je fait cette demande de skript pour avoir la command du celébre plugin essentials /nick pouvez vous me le faire gratuitement ? merci skriptement RoRo29
  37. 2 points
    Bonjour, En réponse à votre demande, je vous présente Beautiful Tab List, un petit script permettant d'afficher un message personnalisé dans la liste des joueurs (TAB). Configuration: Tous les messages sont éditables, il suffit de modifier la catégorie "options". Commandes et Permissions: /beautifultablist refresh ou /btl refresh Permet de rafraichir la liste de tous les joueurs. permission: skript.beautifultablist Droits: Vous êtes autorisés à utiliser et modifier ce script comme bon vous semble, mais s'il vous plait, ne le republiez pas, donnez plutôt le lien vers ce sujet. De plus, je vous demanderai de bien vouloir me laisser le crédit de la création de ce script. [spoiler=Beautiful Tab List] # SKRIPT - BeautifulTabList # # # # Description: Permet d''afficher un message personnalisé # # dans la liste des joueurs (TAB). # # Auteur: The__V # # Dependances: Skript, WildSkript, SkRayFall # options: tabHeader: "&5Bienvenue sur %server name% %loop-player%" tabFooter: "&7&oEn ligne: &d%amount of players%&7/&5%max players%" refreshLog: "[beautifulTabList] Raffraichissement des tabLists terminé avec succès." refreshNotif: "&7[&b&lBeautifulTabList&r&7] &bRaffraichissement des tabLists terminé avec succès." On Skript Start: execute console command "/beautifultablist refresh" On Join: execute console command "/beautifultablist refresh" On Quit: execute console command "/beautifultablist refresh" command /beautifultablist refresh: aliases: btl description: Permet de rafraichir les tabLists de tous les joueurs. Requis en cas modification des messages. permission: skript.beautifultablist executable by: console and players trigger: loop all players: set tab header to {@tabHeader} and footer to {@tabFooter} for loop-player wait 1 tick log {@refreshLog} if command sender is not console: message {@refreshNotif} to the command sender
  38. 2 points
    Bonjour j'ai codé votre demande, mais je ne sais pas comment faire pour que quand il est l'item en main donc j'ai fait en sort que le joueur fasse un clique droit ou gauche. Cordialement, Le code: ################################################### Plugin créer par la chaine D'utile & Inutile Chaine: [Contenu masqué] Plugin servant a donner un effect de potion avec l'item en main ################################################### on join: clear inventory of player give player a blaze rod named "&9SpeedII" on respawn: clear inventory of player give player a blaze rod named "&9SpeedII" on leftclick with a blaze rod: cancel event apply speed 2 to the player on rightclick with a blaze rod: cancel event apply speed 2 to the player
  39. 1 point
    Version de Minecraft : 1.16.5 Version de Skript : 2.6.4 Type du skript : Commande pour changer de grade lorsqu'on accomplie des objectifs Description du script : Bonsoir, J'aimerais beaucoup un skript qui permettrons de /rankup de grade en fonction de certains objectifs à accomplir Grade par défaut lorsque nous arrivons sur le serveur : Joueur Si nous souhaitons monter en grade nous aurions besoin de faire la commande /rankup pour passer au grade Aventurier Pour passer au grade aventurier il faut accomplir quelques objectifs Objectifs (Joueur -> Aventurier) Miner 250 roches Tuer 64 zombie Planter 128 pommes de terres Récolter 128 blés Etre level jobs 20 (Jobs Reborn) Voter 10 fois pour le serveur Avoir 300 000$ en argent Lorsque nous avions toutes les objectifs remplie nous pouvons faire /rankup et cela nous passe au grade Aventurier, une fois qu'on passe au grade aventurier, toutes les objectifs sont remise à zéro sauf level jobs et vote (cela s'accumule pour passer au grade suivant) Il faudrait une commande pour voir l'avancer des objectifs pour passer au grade suivant (ce qui est accomplie et ce qu'il manque) Il y a une totalité de 8 grades (/rankup) Merci beaucoup pour votre aide, si vous aviez quelques questions, je répondrais immédiatement Cordialement
  40. 1 point
    Salut, on death: loop all items in player's inventory: if loop-item = #ton item: clear loop-item from drops wait 2 ticks give #ton item to player
  41. 1 point
    C'est la première fois que je répond à une demande de script. J'ai aussi rajouter un système de cooldown, j'ai aussi rajouter des explications afin que tu t'améliore dans le script ^^. Orbe PVP.sk
  42. 1 point
    J'ai pas trop compris ce que tu veux faire mais je vais essayer de t'aider avec ce que j'ai compris tu peux utiliser on command "/a start": et ensuite mettre ton code pour t'es variable si t'as besoin de plus t'aide n'hésite pas ^^
  43. 1 point
    Jarod t'es mon Héros xD C'était ... si simple. je fais des scripts de 800 Lignes avec des dizaines de conditions et sub-conditions, et je trouvais pas un élément aussi basique que ça. You're the hero of the day
  44. 1 point
    SoziePvP submitted a new resource: [plain]WARDEN - PROTECTION CHAT - AUTOMUTE[/plain] - [plain]Un skript qui vous permet de bien gérer votre chat. Bientôt les cheats ![/plain] Read more about this resource...
  45. 1 point
    Dans ton dossier "server.properties", s'il n'y est pas, met "broadcast-console-to-ops=false" voilà ! :)
  46. 1 point
    Bonjour, Voici pour vous :) #<-- Récupére une liste de joueurs --> set {_listPlyer::*} to all players loop 5 times: #<-- Séléctionne un joueur aléatoirement dans la liste --> set {_player} to a random object out of {_listPlyer::*} #<-- Utilise les chiffres paire et impaire pour faire une fois sur deux if loop-number mod 2 = 1: add {_player} to {_Green::*} else: add {_player} to {_Yellow::*} #<-- Retire le joueur de l'ancinne liste --> remove {_player} from {_listPlyer::*} Si je vous ai aidez merci de lâcher un petit j'aime et de passer votre sujet en résolue ;)
  47. 1 point
    Bonjour à tous et aujourd'hui on se retrouve pour ce tuto qui te permettra, et oui Jamy, tu l'as vu dans le titre, de traduire Skript. Alors commençons sans plus attendre ce tutoriel. PS : Je vais bien sûr te mettre le fichier french.lang en téléchargement ! Pour commencer, tu auras besoin de Skript 2.2 à télécharger ici : [Contenu masqué] Et d'un extracteur zip : En l'occurrence, j'utilise 7zip : [Contenu masqué] mais tu peux utiliser WinRar ou d'autres logiciels de ce style. Maintenant que tu as le matériel requis, tu commences par extraire skript2.2 de son fichier .zip et le placer sur votre bureau (tu peux le placer autre part mais c'est plus pratique de l'avoir sur le bureau). Un fois ceci fait, tu vas cliquer droit sur le fichier skript2.2.jar et faire Ouvrir avec... et sélectionner ton logiciel d'extraction. Une fois fait, tu obtiens ceci : Tu dois maintenant cliquer sur dossier lang. Dès que tu as fait cette étape, tu obtiens 3 fichiers : readme.txt , english.lang et german.lang. Il va falloir que nous créions un fichier french.lang mais ne ferme pas l'extracteur. Va dans le bureau et clique droit puis sélectionne Nouveau document texte. N'ouvre pas ton document texte, fais clique droit, renommer et nomme-le french.lang. Reviens dans l'extracteur et double-clique sur english.lang le fichier va s'ouvrir et tu peux voir tous ce qui est mis dans le chat (en anglais) quand tu fais /sk. Nous, nous voulons que ça soit en français. Alors toujours dans l'éditeur de texte, fais CTRL + A pour sélectionner tout le contenu de english.lang et ouvre ensuite ton fichier french.lang tu copies et tout simplement, tu traduis ! Au lieu de te casser la tête, je t'ai déjà fait le fichier french.lang, il est en ici. Le travail n'est cependant pas terminé ! Tu vas mettre le fichier french.lang dans l'archive (doisser lang de skript2.2.jar) et tu vas pouvoir fermer l'archive ! Ettt, non c'est toujours pas terminé ! Tu vas remplacer/mettre le skript2.2.jar dans le dossier plugins de ton serveur. Tu vas le redémarrer car /reload, c'est du caca. Et là : surprise, aucun changement... Et oui ! forcément il va maintenant falloir qui tu ailles dans le fichier config.sk de Skript : # ==== General Options ==== language: english → tu remplaces par french # Which language to use. Currently english and german are included in the download, but custom languages can be created as well. # Please note that not everything can be translated yet, i.e. parts of Skript will still be english if you use another language. # If you want to translate Skript to your language please read the readme.txt located in the /lang/ folder in the jar # (open the jar as zip or rename it to Skript.zip to access it) Tu remplaces english par french. Là tu redémarres le serveur et... ça marche ! /sk reload fonctionne en français ! Toutes les commandes Skript fonctionnent en français ! Dis moi si tu veux que je te file skript2.2.jar modifié avec sa configuration ! En espérant que ça te plaise !
  48. 1 point
    Alors 3 choses : 1) J'essaye de t'aider, la moindre des choses serait d'être sympa 2) Tu as mal vue car le cooldown était déjà présent dans le skript 3) J'ai modifier le skript en ajoutant tes options. J'ai tester et il fonctionne comme tu l'as demander. Espérant avoir pu t'aider PS : Tu peux t'excuser en me mettant un like, ca fait toujours plaisir PS 2 : Si j'ai résolu ta demande, pense à la passer en résolu
  49. 1 point
    Note : Le Skript School sera une série de tutoriel pour tout le monde. Le début pourra paraître "bof" pour les plus avancés d'entre vous, mais la suite le sera moins. Skripteurs Skripteuses bonjour et bonsoir. Si vous vous trouez sur ce post, c'est que vous voulez débuter en Skript, ce langage large et facile d'utilisation pour coder des plugins Minecraft. Ce tutoriel à pour but de vous aider à débuter, de vous apprendre Skript, mais sachez tout de même que pour se perfectionné, il n'y a rien de mieux que d'étudier des Skript et que lire la documentations. Des TP, plus couramment connus sous le nom de "Travaux Pratiques" (Oui vous savez, ces expériences en SVT, hein), seront présents pour vous faire progresser suite à notre apprentissage. 1. INSTALLATION Figure toi que non ! Skript peut être codé de partout, Notepad++, Sublime Text, et tout autre logiciel d'écriture. Créer donc un nouveau fichier et enregistrez le la racine plugins\skript\script avec un nom de votre choix terminé par .sk Désormais, nous allons voir the command, celle qui permettra de "rafraichir" vos Skripts pour pouvoir les exectuer : sk reload all. Vous pouvez taper cette commande dans la console comme sur le serveur. 2. PREMIER PAS : COMMANDES Premièrement, nous allons nous attaquer aux commandes. Avant toutes choses, les ":" et les tabulations sont obligatoires et doivent être disposés exactement comme je le fais. Pour appeller une commande, il faut d'abord donner à Skript le nom de la commande. command /test: /test sera donc notre commande. A vous de modifier la commande comme vous le désirez. Ensuite, pour ajouter une action lorsque le joueur exécute la commande, il faut écrire ce dernier sous un trigger. Voici un exemple. trigger: send "Ca marche ! :D" Le trigger est obligatoire, ne cherchez pas à comprendre, toute commande doit le comporter, et Send est un effect qui enverra le message désigné au joueur. En résumer, vous devez obtenir quelque chose comme cela. command /test: trigger: send "Ca marche ! :D" Aller hop, un Ctrl+S pour sauvegarder et un sk reload all dans la console pour tester le Skript. 3. ALLER PLUS LOIN AVEC LES COMMANDES Les arguments, c'est le nom que l'on attribue à une récupération de valeur dans la commande. Premièrement, il faut savoir qu'il y a plusieurs types d'arguments. Les textes : Des chaines de caractères Les integer ou les number : Des nombres, simplement. Les player et offlineplayer : Des joueurs Les items : Des blocs ou items. Il en existe plusieurs autres, je vous invite donc à chercher pour les découvrir. Pour en invoquer ? Très simple. command /broadcast <text> [<text>] Les crochets que j'ai mis sur l'argument 2, celui positionné en deuxième, signifie que c'est facultatif. Donc le joueur n'est pas obligé d'entrer une valeur ici. Hors, sur le première argument, je n'ai pas mis de crochets, ce qui explique que la valeur doit être entrée. C'est bien beau d'avoir des arguments, mais on les utilise comment ? La magie. Nous allons faire une commande qui envoie à tous les joueurs deux ou un texte. Essayez de faire le début, c'est assez simple après la lecture de la partie 2. command /broadcast <text>: permission: skript.broadcast trigger: broadcast "%arg1%" En effet j'ai retiré l'argument facultatif. J'ai donc utilisé l'effect broadcast pour envoyer un message à tous les joueurs, mais au lieu de mettre directement un texte j'ai mis des pourcentages et j'ai mis "arg1". C'est ainsi que l'on utilise les arguments. Ce "truc" comme tu l'appelles, c'est la permission nécessaire pour éxecuter la commande. Nous verrons les permissions plus tard, mais je souhaitais vous filer ce petit tuyaux maintenant. Dring, les cours sont finis ! J'espere que ce tutoriel vous aura fais découvrir et apprendre le fonctionnement des commandes. La prochaine fois, nous étudierons quelque chose qui, je pense, vous intéressera davantage. RAPPEL Voici quelques liens qui pourront vous intéresser. Documentation officielle de Skript : ICI skUnity, pour découvrir des addons Skript ainsi que leurs documentations : ICI
  50. 1 point
    Je te conseille plûtot on right click on a player with stick: #Change stick par item que tu veux make player execute command "/invsee %clicked entity%" send "&3[Fouille]&cUne personne te fouilles" to event-entity #Change le message de fouille[/Code]
×
×
  • 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.