Aller au contenu

Classement


Contenu populaire

Affichage du contenu avec la meilleure réputation depuis le 06/16/15 dans toutes les zones

  1. 17 points
    Bonjour, bonsoir, aujourd’hui, le staff de Skript-MC se décide à ré-écrire de manière propre et structurée les règles du forum. Règlement du forum Skript-MC Ces règles sont à respecter et à appliquer à partir du moment où vous vous inscrivez sur le forum. Les posts et topics Restez calme et respectueux envers l’équipe du staff et les utilisateurs. Le partage de contenu à caractère illégal, menaçant, discriminatoire (xénophobe, racisme, etc.), pornographique, vulgaire ou harcelant est fortement interdit. Ecrivez dans un français correct, vous avez le temps avant de poster un message. L’abus de langage SMS peut être réprimé. Les pratiques comme le flood, le spam, ou l’envoi de messages sans utilité sont interdites. Les messages trop courts (smileys par exemple) seront effacés. Veuillez respecter les règles de la section dans laquelle vous postez. Évitez le hors-sujet au possible. Les ups (action de faire remonter un topic dans une catégorie en postant un message dans celui-ci) sont autorisés à intervalle de 24 heures. Les titres doivent coller au plus possible au topic. Les titres “aguicheurs” ou mensongers ne sont pas tolérés et seront supprimés. Il est fortement interdit de poster un message qui a pour but de nuire au forum ou à une personne, un utilisateur. La promotion de logiciels de triche (cheats) est interdite. Le forum est un forum francophone. Les posts doivent donc être en français et non pas dans une langue étrangère. Les sections “Aide” et “Demandes de skript” Les topics avec des titres comme “aidez moi!!!”, “probleme svp aide” sont prohibés et seront fermés voire supprimés. Veuillez effectuer des recherches avant de poster, sur le forum ou sur Google. Votre souci a très sûrement déjà été résolu autre part. Détaillez au plus possible vos demandes d’aides et ne vous contentez pas seulement de 5 lignes. Précisez la version de votre plugin Skript et la version de votre serveur. Ne créez pas des tonnes de posts pour le même souci. Si personne ne répond, faites preuve de patience et faites un “up” toutes les 24 heures, sans en abuser. N’attendez pas que l’on vous donne un code tout prêt uniquement car vous n’avez pas compris. Demandez des explications si nécessaire. Les personnes s'étant inscrites dans les dernières 24h et qui ne respectent pas les règlements de catégorie se verront bannies définitivement. Les demande d'aide et de skript doivent figurer de la demande jusqu'à la finalisation de la demande sur le forum. Les réponses du type "viens mp discord pour t'aider" ne sont plus tolérées car les demandes d'aide sur le forum ne sont jamais finalisées ni répondues. La section “Ressources” Faites une présentation soignée, et non pas bâclée. Évitez les couleurs trop vives comme le jaune. Il est très important d’inscrire dans votre présentation : les dépendances du skript (skQuery, WildSkript, etc.), les versions de Minecraft compatibles, les versions de Skript compatibles, des screenshots / captures d’écran de votre création, la liste des commandes détaillées. Ne spammez pas les membres du staff pour que votre ressource soit acceptée rapidement. Les ressources sont vérifiées assez rapidement et dans les plus brefs délais. Ne partagez pas une ressource qui ne vous appartient pas sans l'avis du créateur original. Une lourde sanction sera appliquée à ceux qui copient / collent des skripts qui ne sont pas d’eux. La documentation Nous avons développé une documentation pour que nous puissions vous partager un maximum de connaissance via le site de Skript-MC. Nous exigeons donc qu'un maximum de liens où les syntaxes sont disponibles sur le site de Skript-MC soient utilisés dans vos topics. Pour les Membres Actifs, nous vous demandons de nous aider à compléter la documentation. Il ne sera pas toléré de votre part, le partage d'une autre documentation, si les syntaxes qui sont demandées par un membre, existe déjà sur la documentation de Skript-MC (A savoir qu'on a fait ça par votre demande (la refonte de la doc) alors complétez là avec nous). Les publicités Les personnes s’inscrivant uniquement pour faire de la publicité, même dans une catégorie où cela est toléré seront bannies. Les liens rémunérés (adf.ly, etc.) ne sont pas tolérés sur le forum et seront supprimés. Votre profil Les signatures ne doivent pas être trop grandes ou trop présentes. Veillez à avoir une image de profil qui n’est pas trop “choquante”. Les informations que vous entrez lors de votre inscription restent et resteront confidentielles et protégées. Faites la demande auprès d’un membre du staff si vous voulez les faires retirer de votre profil. Les doubles comptes sont interdits. Si un membre banni se réinscrit sous un autre pseudo, il sera supprimé sans préavis, et le compte précédent sera banni définitivement (si la sanction était temporaire). De même, si vous êtes en situation de double compte, tous les comptes possédés hormis le plus ancien seront supprimés. Autre Ce forum est modéré à priori, les ressources ou certains messages que vous postez dans le forum ne seront pas mis en ligne directement mais lu préalablement par les modérateurs de Skript-Mc. Ceux-ci sont seuls habilités à décider de l’opportunité de publier votre ressource ou votre message. La publication d’un message ou d'une ressource posté ne vous exonère en rien de votre responsabilité concernant son contenu. Les modérateurs du forum se réservent le droit de supprimer les messages à tout moment. Ce forum est modéré à posteriori, les messages que vous postez sont directement publiés sans aucun contrôle préalable. Il est de votre responsabilité de veiller à ce que vos contributions ne portent pas préjudice à autrui et soient conforment à la réglementation du forum en vigueur. Les modérateurs se réservent le droit de retirer toute contribution qu’ils estiment déplacée, inappropriée, contraire aux règlements de catégories, à ce règlement ou susceptible de porter préjudice directement ou non à des tiers ou à un groupe de personnes. Les messages qui ne sont pas en relation avec les thèmes de discussion ou avec l’objet du forum peuvent être supprimés sans préavis par les modérateurs. Les modérateurs du forum se réservent le droit d’exclure du forum, de façon temporaire ou définitive, toute personne dont les contributions sont en contradiction avec les règles mentionnées. N’hésitez pas à contacter le staff en cas de problème avec le forum ou avec un utilisateur en question. Un Discord officiel est disponible à cette adresse. Respecter les règles de celui-ci comme le respect de ce dernier. N’hésitez pas à signaler un message ou une ressource que vous pensez “hors-règles”. Nous la réprimanderons voire la supprimerons dans les plus brefs délais. La liste des sanctions est disponible à cette adresse. En tant que modérateur de ce forum, nous nous réservons le droit de supprimer tout message qui nous semble inapproprié, sans justification. De même, le fait de participer à ce forum implique l'acceptation de ces règles, ainsi que des conditions générales d'utilisations de Skript-Mc. Si vous avez une question sur le fonctionnement du forum, une proposition d'amélioration ou autre chose, n'hésitez pas à laisser un message à l'équipe de Skript-Mc. Nous nous ferons un plaisir de les lire. Cordialement, l'équipe de modération et d'administration de Skript-Mc.
  2. 14 points

    Version 2.2.4 Dernier patch

    2679 downloads

    --------------------------------------------------------------------------------------------- Le lg uhc est finit, il n'a pas de bug (à ma connaissance) Je ne le dev plus sauf peut-être pour l'update ou le corriger Message Update le 05/05/2020 -------------------------------------------------------------------------------------------- /. INTRODUCTION Bonjour, voici un script fait pour la 1.12.2 et ayant pour but de permettre à n'importe quel joueur ayant un serveur de faire une partie de Lg-UHC grandement personnalisable. Le script fait 3600 lignes et contient environ 156 000 caractères. Merci à Faywyrr pour son aide pour tester le plugin ainsi que ses nombreuses bonne idées ^^ Merci à ItsFytz pour m'avoir prêté son compte lors de tests ainsi que pour l'écritures de certains messages Merci à Cormorax pour ses idées I. INSTALLATION Ne marche pas pour avant 1.12.2 Certain hébergeur ont banni des plugins instables si mal utilisés (Skellett pour boxtoplay ), merci de renommer les fichiers bannis pour un bon fonctionnement Ceci n'est pas un plugin en .jar mais un script ! il utilise donc Skript, cette section montre comment l'installer ainsi que tout les plugins (addons) nécessaires. Ce plugin nécessite spigot ou paper-spigot ou Sponge (version compatible avec spigot) ou Atom (cauldron pour 1.12.2) etc... tout ce qui utilise l'API spigot. Donc surtout pas BUKKIT Il vous suffit de juste télécharger l'installer(le .jar) dans le bouton de téléchargement à droite, le mettre dans votre dossier plugins, lancer votre serveur, attendre que celui-ci soit totalement démarré. L'éteindre puis le rallumer et voilà ^^ Vous pouvez ensuite enlever l'installer de votre dossier plugins ALTERNATIVES En premier télécharger tout ces plugins (dans les versions demandés) et mettez les dans le dossier /plugins/ Skript Tuske Skquery-Lime MundoSK Skellett Une fois tout les fichiers .jar dans le dossier, démarrez votre serveur et une fois que celui-ci est totalement charger; éteignez-le. Allez maintenant dans le dossier dans le chemin : /plugins/Skript/scripts/ Vous pouvez supprimer tout les fichiers dedans et mettre à la place le fichier nommé "Lg-UHC.sk" téléchargeable sur cette page. Relancez votre serveur, faite la commande /lg setup et tout est prêt ^^ Vous pouvez maintenant configurer une partie (/lg config), démarrer une partie (/lg start) ou autres (voir /lg help) II. Commandes et permissions : "/lg" ou "/lg help" -> Voir la liste des commandes : lgu.admin pour voir toutes les commandes "/lg setup" -> Lors de l'installation du plugin, initialise les variables : lgu.admin.setup "/lg config" -> Configurer la partie : lgu.admin.config "/lg start" -> démarrer la partie : lgu.admin.start "/lg stop" -> Arrêter la partie : lgu.admin.stop "/lg spectateur" -> Gérer les joueurs ne participant pas : lgu.admin.spec "/lg respawn" -> Faire respawn un joueur sans stuff (Voir dans IV. OPTIONS pour une autre solution) : lgu.admin.respawn "/lg force (mur|pvp|rôles)" -> Forcer un événement "/lg reset" -> Remettre à zéro toutes les variables (ne faire qu'en cas de bug) : lgu.admin.reset Commandes pour joueur : "/lg lg" -> permet aux loups-garous de connaitre les autres loups-garous "/lg roles" permet de voir tout les rôles encore existant dans la partie "/lg info" -> voir les infos de la partie "/lg p" -> Voir son rôle ainsi que sa description III. Vidéo explicative IV. OPTIONS En faisant /lg config dans la partie vous pouvez configurer : - Les rôles - La durée d'un jour - Le chat - Le temps avant la bordure - taille de la bordure de départ - taille de la bordure à la fin - temps avant le pvp - temps avant la révélation des rôles - items de départ - items drop à la mort - la durée d'un jour (le visuel bug pour "extrème") - Paramètre de mort à la déconnexion - Règles - Scénarios Dans le script (Lg-UHC.sk) il existe une option à la ligne 7 (debug) qui si activer (remplacer "false" par "true") permet lors de la mort d'un joueur de pouvoir ressuciter un joueur sans dévoiler son rôle et en gardant le même stuff, très utile si vous jouez avec des joueurs mauvais en survie. V. Règles Les règles sont globalement similaire aux Lg-UHC fait sur youtube, bien que certain rôle ont été nerfs ou créer... VI. Remercient : - ItsFytz pour les messages des rôles - uiytt pour avoir créer le script - Les créateurs des addons VII. Me contacter Je suis disponible sur discord : uiytt#7002 SI VOUS AVEZ DES PROBLÈMES, MERCI DE ME CONTACTER SUR DISCORD pas sur skript-mc, Merci
  3. 10 points
    Bonjour à tous, Skript n'étant plus disponible en 1.8 depuis au moins 1 an (avec les versions dev25 ou dev36), j'ai donc cherché à le faire fonctionner en 1.8. Voyant pas mal de gens travaillant encore sur de très anciennes versions, j'ai décidé de rendre mon travail public sur GitHub : [Contenu masqué] Vous pouvez télécharger les dernières versions de Skript-1.8 ici : [Contenu masqué]/releases Je mets à jour régulièrement mon travail par rapport à la version officielle en local et j'envoie tout ça une fois la version suivante de Skript sortie. Lien vers la ressource Skript-MC : [Contenu masqué] (tout est indiqué là-bas) Merci pour votre lecture, enjoy !
  4. 9 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 :)
  5. 9 points
    Hey, souvent on voit des demandes d'aide qui consistent en un "ça marche pas, voici mon code". @PsYZiiK avait proposé un formulaire, mais chaque cas étant ce qu'il est, il est difficile d'en avoir un qui couvre vraiment tous ces cas. Aujourd'hui, je vous propose donc de trouver les problèmes de vos plugins pour vous en débarrasser vous-même et ainsi désengorger la section Aide et vous permettre de dire précisément où se situe votre problème aux gens qui vous aident. 1. Les messages d'erreur de Skript Ce qui est génial avec ces messages qui s'affichent quand on recharge un plugin Skript, c'est qu'ils sont (souvent) courts et simples à comprendre. Ils se présentent comme ceci : Explication de l'erreur (Plugin.sk, line X: 'Instruction mise en cause') La ligne C'est le plus important en fait et y'a plein de gens qui passent à côté en lisant leur message d'erreur. Et le principe est tout simple, évident même : c'est la ligne où Skript a trouvé une erreur en chargeant le plugin. Alors pas la peine de désespérer en cherchant d'où peut venir le problème quand vous avez un message d'erreur, c'est écrit exactement où vous devez regarder. Instruction mise en cause C'est juste un copier/coller de la ligne d'où vient le problème. Pour le coup, c'est une partie un peu inutile. Si vous avez le numéro de la ligne -ce qui est toujours le cas-, cette partie du message risque de vous servir rarement. Par contre, si la ligne en question est très longue, cette partie risque de prendre beaucoup de place et rendre le message un peu plus difficile à lire. Le plugin.sk C'est juste au cas où vous rechargez plusieurs plugins en même temps et que du coup, vous ne savez pas si l'erreur vient du premier, du deuxième ou du douzième. L'explication de l'erreur Ici, c'est ce qui va vous permettre, après avoir localisé le problème, de savoir ce qu'il est. Je vais développer un peu chacun d'eux plus loin. indentation error: expected X tabs, but found Y tabs Ce message est un peu particulier, parce qu'en général, il est présent plusieurs fois pour une seule erreur, mais il est très fréquent quand on débute. Il apparaît quand Skript trouve une incohérence dans les tabulations (tabs). Le cas le plus répandu, c'est quand on oublie de mettre deux points ":" à la fin d'une condition ou d'un événement. Dans ce cas, Skript considère la ligne de l'oubli comme une condition sans if ou un effet, deux cas où les lignes suivantes doivent être au même niveau que l'instruction en cause. Du coup, le fait que toutes les lignes suivantes soient décalées d'une tabulation fait que Skript les voit comme mal placées et signale une erreur pour chacune d'elles alors que la ligne où se situe le vrai problème n'est pas signalée par ce message. En revanche, la bonne ligne est souvent signalée par le message d'erreur suivant. Can't understand this condition/effect : Instruction Cette explication, c'est celle qui apparaît quand Skript ne reconnaît pas la syntaxe que vous avez utilisée dans une instruction sans deux points ":" à la fin. Le problème : - comme je disais au dessus, peut venir du fait qu'il manque les deux points ":", puisque Skript lit très différemment les instructions avec et sans. - mais le plus souvent, le problème est que la syntaxe n'est pas reconnue parce qu'elle est ajoutée par un add-on que vous n'avez pas installé ou qui n'est pas à la bonne version (ou de Skript qui n'est pas à la bonne version). Si vous ne savez pas de quel add-on vient une instruction, cherchez-la sur internet. - une autre cause récurrente. c'est que vous vous êtes juste trompé en écrivant l'instruction et que Skript ne comprend pas si c'est juste à peu près la bonne instruction. Dans ce cas, vérifiez la syntaxe là aussi en cherchant l'instruction sur internet. Le mot syntaxe comprend aussi les types d'arguments que vous utilisez. Si vous tentez de mettre potato là où Skript attendait un nombre, vous aurez le même message. Vous pouvez trouver la grande majorité des instructions et les add-ons dont elles dépendent sur SkUnity, ainsi que leur syntaxe, simplement en tapant le début dans le moteur de recherche en haut à droite. Empty configuration section! You might want to indent one or more of the subsequent lines to make them belong to this section or remove the colon at the end of the line if you don't want this line to start a section. Bon je sais, c'est long comme message, mais c'est très simple. Si vous avez une instruction qui finit par deux points ":", mais que la ligne en dessous n'a pas une tabulation en plus, le message apparaît pour dire qu'il faut soit retirer les deux points ":" soit ajouter la tabulation qui manque pour les instructions qui dépendent de celle qui pose problème. En général, on est tête en l'air et il fallait ajouter la tabulation. Beaucoup d'autres messages d'erreurs Il existe beaucoup d'autres erreurs, mais elles sont pour la plupart très simples à comprendre et ne nécessitent pas spécialement d'être développées. Si vous ne comprenez pas, un traducteur en ligne devrait faire l'affaire. Et si vous ne trouvez pas votre bonheur, vous avez toujours la possibilité de chercher votre erreur sur internet au cas où quelqu'un aurait eu le même problème et si vous êtes désespérés, vous pouvez poster un topic dans les demandes d'aide, où vous devrez donner l'erreur qui vous bloque, la partie du code liée, voire le code entier si vous n'êtes pas sûr d'avoir tous les éléments dans une partie réduite et dire ce que vous essayez de faire, puis tout ce que vous avez tenté pour résoudre le problème. 2. Les messages d'erreur Java Hors des messages d'erreur de Skript, on croise parfois d'autres messages qui proviennent des add-on ou de Skript directement. Les messages dans le tchat qui commencent par "An error occured while..." signalent qu'il y a un message d'erreur de ce type à lire dans la console, même si pas toujours. La difficulté de ces messages, c'est qu'ils sont longs et moins explicites. Dans cette partie, on va prendre un exemple très courant : [spoiler=An internal error occurred while checking for the latest version of Skript] [16:11:49] [skript update thread/INFO]: [0;37;22m[[0;33;22mSkript[0;37;22m][m [0;31;22mAn internal error occurred while checking for the latest version of Skript. Please refer to the server log for details.[m [16:11:49] [skript update thread/ERROR]: #!#! [16:11:49] [skript update thread/ERROR]: #!#! [skript] Severe Error: [16:11:49] [skript update thread/ERROR]: #!#! Unexpected error while checking for a new version of Skript [16:11:49] [skript update thread/ERROR]: #!#! [16:11:49] [skript update thread/ERROR]: #!#! If you're developing an add-on for Skript this likely means that you have done something wrong. [16:11:49] [skript update thread/ERROR]: #!#! If you're a server admin however please go to [Contenu masqué] [16:11:49] [skript update thread/ERROR]: #!#! and check whether this error has already been reported. [16:11:49] [skript update thread/ERROR]: #!#! If not please reply with meaningful content, copy & paste this whole error into a pastebin ([Contenu masqué]), [16:11:49] [skript update thread/ERROR]: #!#! and describe what you did before it happened and/or what you think caused the error. [16:11:49] [skript update thread/ERROR]: #!#! If you think that it's a trigger that's causing the error please post the trigger as well. [16:11:49] [skript update thread/ERROR]: #!#! By following this guide fixing the error should be easy and done fast. IF YOU DON'T FOLLOW IT, WE'LL HUNT YOU DOWN. [16:11:49] [skript update thread/ERROR]: #!#! [16:11:49] [skript update thread/ERROR]: #!#! Stack trace: [16:11:49] [skript update thread/ERROR]: #!#! javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1] Message: Fin prématurée du fichier. [16:11:49] [skript update thread/ERROR]: #!#! at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(Unknown Source) [16:11:49] [skript update thread/ERROR]: #!#! at com.sun.xml.internal.stream.XMLEventReaderImpl.nextEvent(Unknown Source) [16:11:49] [skript update thread/ERROR]: #!#! at ch.njol.skript.Updater.getChangelogs(Updater.java:286) [16:11:49] [skript update thread/ERROR]: #!#! at ch.njol.skript.Updater$2.run(Updater.java:210) [16:11:49] [skript update thread/ERROR]: #!#! at java.lang.Thread.run(Unknown Source) [16:11:49] [skript update thread/ERROR]: #!#! [16:11:49] [skript update thread/ERROR]: #!#! Version Information: [16:11:49] [skript update thread/ERROR]: #!#! Skript: 2.2-Fixes-V9b [16:11:49] [skript update thread/ERROR]: #!#! Bukkit: 1.10-R0.1-SNAPSHOT [16:11:49] [skript update thread/ERROR]: #!#! Minecraft: 1.10 [16:11:49] [skript update thread/ERROR]: #!#! Java: 1.8.0_101 (Java HotSpot(TM) Client VM 25.101-b13) [16:11:49] [skript update thread/ERROR]: #!#! OS: Windows 10 x86 10.0 [16:11:49] [skript update thread/ERROR]: #!#! [16:11:49] [skript update thread/ERROR]: #!#! Running CraftBukkit: false [16:11:49] [skript update thread/ERROR]: #!#! [16:11:49] [skript update thread/ERROR]: #!#! Current node: set {_Ligne} to line 2 of lore of player's tool (Entraînement au tir.sk, line 36) [16:11:49] [skript update thread/ERROR]: #!#! Current item: null [16:11:49] [skript update thread/ERROR]: #!#! [16:11:49] [skript update thread/ERROR]: #!#! Thread: Skript update thread [16:11:49] [skript update thread/ERROR]: #!#! [16:11:49] [skript update thread/ERROR]: #!#! End of Error. [16:11:49] [skript update thread/ERROR]: #!#! A noter que la plupart des informations sont présentes dans le début de l'erreur. On a donc ça (étalé sur deux lignes) : [skript] Severe Error: Unexpected error while checking for a new version of Skript Le premier mot, c'est Skript, mais ça veut pas dire que le problème vient forcément du plugin Skript lui-même, donc on n'apprend pas grand chose. C'est la ligne qui suit les deux points qui est plus intéressante. Elle indique ce que le plugin cherchait à faire quand l'erreur est arrivée. Dans notre cas, Skript cherchait à vérifier si une nouvelle version n'était pas disponible. Dans ce cas-ci, puisque normalement, vous ne tournez pas sur la dernière version de Skript, cette erreur est sans importance et dans ce cas-ci, il vaut mieux désactiver le checking de nouvelle version dans la config' du plugin. Après, je suis pas forcément bien calé en java donc je vais pas trop insister sur cette partie, ça pourrait être cool que quelqu'un la fasse. Le mieux, si l'erreur est incompréhensible pour vous aussi, c'est de chercher le début sur Google avec des guillemets ("votre erreur"). 3. Ça marche pas, mais y'a pas de message d'erreur Agent 007, voici votre équipement pour cette mission : broadcast "Le joueur est dans le bon monde" broadcast "%{Variable}%" send "Il a bien un bâton dans la main" to console Ces outils, les plus élémentaires qui soient, permettent de localiser à peu près n'importe quel problème par logique. Une fois le problème repéré, on peut, au mieux le résoudre soi-même, au pire en donner tous les éléments dans une demande d'aide au lieu d'un "ça marche pas svp". L'intérêt donc des instructions énoncées au dessus, c'est qu'en les disposant un peu partout dans son code, on peut savoir ce qui se passe exactement lorsqu'on exécute son plugin, en regardant quels messages se sont affichés ou non.
  6. 9 points
    Bonjour à vous tous ! Bon, après la petite réunion du 10/08/2018, nous avons évoqué avec le staff de faire des petits changements sur les rôles et les rangs pour donner de la diversité et du renouveau sur cette V2 et de petit à petit se détacher de l'ancien système de la V1. Je pense que vous avez pu voir ces nouveautés procéder hier avec des tests mais c'est maintenant mis en place ! Nous avons refait notre système de rang. C'est à dire que maintenant, vous n'avez plus des petits points banals ou même un Chuck Norris dégueulassement incorporé à votre profil mais bien des bannières pour démarquer votre rang. Voici la liste des rangs disponibles et quand ils s'appliqueront: - Touriste (Bannière Noire) : de 0 à 4 Élément de contenus - Nouveau (Bannière Grise) : de 5 à 14 Élément de contenus - Intéressé (Bannière Bleu Claire) : de 15 à 29 Élément de contenus - Apprenti (Bannière Bleu) : de 30 à 59 Élément de contenus - Membre (Bannière Bleu Foncé) : de 60 à 249 Élément de contenus - Habitué (Bannière Verte) : de 250 à 499 Élément de contenus - Impliqué (Bannière Orange) : supérieur à 500 Élément de contenus Nous nous sommes aussi intéressé à la reconstitution des grades. En effet , Nous avons implémenté des grades supplémentaires pour donner une sorte de fonction pour chacun et pour récompenser les plus impliqués sur le forum. Vous avez maintenant beaucoup de choix. Les grades seront donnés quand le staff remarquera une bonne participation de votre part dans l’enceinte du forum. Voici les grades implémentés et modifiés avec leur description et comment les avoir: - Développeur d'add-ons: C'est un grade qui permettra de vous démarquer par le fait que vous développez des add-ons skript pour la communauté. Comment avoir le rôle ? Rien de plus simple que de poster des add-ons ? - Érudit: Ce rôle est donné aux gens qui permettent à la communauté de se développer en fournissant des tutoriels de qualité ! Il vous permettra de poster des tutoriels sans passer par une vérification du staff lors de l'envoi de votre poste sur la catégorie dédiée. Postez encore et toujours plus de tutoriels ! - Membre Actif: Voila un grade qui a fait polémique et dont nous avons décidé de changer sa manière de l'avoir. Pas de panique pour les anciens MA, vous avez été transférés dans Ancien où vous allez pouvoir garder vos anciens privilèges. Cependant maintenant pour avoir ce rôle, vous allez devoir montrer votre activité parmi la communauté ! Nous ne demandons pas une connexion 7J-H24 mais une participation régulière. Dans les jeux avec des rangs vous devez montrer que vous êtes celui qui est à la hauteur pour avoir ce rôle ! Ce rôle à vu ces permissions changer notamment dans ces permissions qui vous permettront d'avoir une image de profil animé et d'autres options supplémentaires que les membres n'ont pas ? . Fini les gens qui viennent se plaindre en disant "Ouai mais lui il est MA mais on le voit plus !". Montrez vous présent et vous mériterez votre gain ? ! - Helpeur: Quel est ce rôle voyons ?! Contrairement à ce que vous pouvez penser mais helpeur ne fait aucunement partie du staff et ne possède pas de permissions de modération. Ce rôle sera attribué aux personnes impliquées dans l'aide des membres dans la communauté. C'est une forme de remerciement de notre part pour aider au développement des membres afin d'en apprendre plus et de maîtriser ce langage pour le faire grandir. Pour compléter le tout, nous avons caché un rang et un grade. Ceux qui réussiront les avoirs font partie de l'élite de Skript-Mc et prendra une grande place dans cette communauté en plus d'avoir beaucoup de privilèges ! (Attention aux abus vous n'êtes pas immunisé contre les sanctions ? ) Aurez vous la force de les avoir et de savoir comment les avoir ? Ce n'est pas très bien caché mais possible à avoir (Un est moins hardcore à avoir que l'autre). Quelques problèmes ont été corrigés. L'embed de partage est maintenant bien détouré, vous bénéficiez tous d'une boîte à messages infinis, le problème de mise en évidence des messages du staff sans demander, des petits problèmes de permission et j'en passe. Des choses dites ici risque de changer ou d'être peaufinées donc pas de panique ! Nous comptons sur vous pour faire prospérer Skript-Mc et faire grandir cette communauté ! Cordialement, Le staff de Skript-Mc. PS: Nous recommandons de laisser des notes sur les ressources afin de mieux les faire référencer. Ça peut jouer sur le gain de certains rôles ?.
  7. 9 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.
  8. 8 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
  9. 8 points
    Salut à tous ! J’espère que tout se passe bien pour vous durant le confinement et que vous et votre entourage allez bien. Rassurez-vous je ne suis pas là pour parler de ça, aujourd’hui et jusqu’à la fin du confinement (enfin jusqu’au 15 avril je vous propose un évènement qui vous fera coder un peu chaque jour). I. Présentation Contrairement aux autres concours Skript, ce ne sera pas un seul script qui fera 1000 lignes, mais plutôt un script par jour. En effet, tous les jours entre 20h et 21h un thème vous sera proposé avec des explications. Ces explications seront décomposés en 3 sections qui correspondront aux 3 niveaux différents. La difficulté étant croissante à chaque niveau. Votre rôle ? Les réaliser en n’utilisant aucun add-on, seulement avec Skript (Tout est dans la Documentation) et tout ça avant que le prochain défi ne soit lancé. L’intérêt de ce concours étant pour vous, que vous soyez débutant ou expérimenté, de pouvoir prendre quelques minutes par jour pour répondre à ces défis. II. Notation Chaque jour, vous devrez nous rendre vos productions, soit à moi sur le forum, soit à Romain (Romitou#9685) sur le Discord. Grâce à cela, nous pourrons vous attribuer une note quotidienne, mettre à jour le tableau des scores (visibles sur le forum) et vous proposer de nouveaux défis. Voici le barème commun à chaque défi : - Optimisé : 5 points - Méthode(s) pouvant être améliorée(s) : 3 points - Script fonctionnel, idée présente : 2 points - Script non fonctionnel : 1 point + 1 point si série de participation + 1 point par niveau Exemple : Je réalise mon premier défi de niveau 1, mais pouvant être amélioré, je reçois donc 3 points (1 pour le niveau et 2 pour la qualité). Le lendemain, je réalise le défi niveau 3 parfaitement, je reçois 9 points (5 pour la qualité, 3 pour la difficulté et 1 pour la série de participation) et ainsi de suite. Le but de cet événement est aussi de vous apprendre à utiliser des moyens optimisés ou de vous proposer une autre façon de faire (car il n’y en a pas qu’une), c’est pour cela que nous enverrons une correction de chaque niveau tous les jours ! III. Tableau des scores Sur ce, bonne chance à tous !
  10. 8 points
    Bonjour à vous tous ! Quoi de neuf cette fois ci après une longue période sans mise à jour et de renouveau ? Et bien on vous a pondu du lourd ! je vous détaille tout ce qu'on a fait I - Nouveau Thème: Après une multitude de demande pour avoir un dark thème et bien le voici. On a trouvé un thème qui nous plaisent bien on l'a adapté pour garder les couleurs de Skript-MC. On y a passé une bonne soirée à le configurer et on espère qui vous plaira ! Il se peut que le thème soit quelques problèmes d'affichage, si tel est le cas alors n'hésitez pas à nous le dire sur le discord (Vengelis ou Uneo) et on adaptera en conséquence. De plus, ce thème va nous permettre de faire encore plus de chose que le précédent mais vous verrez cela en temps voulu ! II - Mise à jour du forum: Nous avons fait une update de version. Cela nous a donc permis de régler de nombreux problèmes présents anciennement. III - Update Ressources: Cette mise à jour sur les ressources elle consiste à quoi ? Eh bien il y a maintenant une partie support et une amélioration de la visualisation des reviews. Voici quelques images: Le principe est presque le même que sur GitHub et on l'a intégré au forum. Il y a encore quelques bugs de couleur par endroits mais ça sera vite corrigé. N'hésitez pas à vous en servir pour vos nouvelles ressources. Vous allez maintenant pouvoir aider les créateurs de contenu ou gérer vos bugs directement sur la plateforme sans passer par discord ou autres. IV - Continuité de traduction J'avais un peu de temps alors j'en ai profité pour continuer à traduire le forum. Toute la partie ressource est normalement traduite avec le nouveau module. V - Système de report Je suis actuellement en train de chercher un nouveau module pour améliorer le système de report du forum. On ne va pas se le cacher c'est relativement rudimentaire. Voilà pour la nouvelle maj du forum. Il y a plein d'autres trucs qui devraient être mis en place dans les jours à venir. N'hésitez pas à envoyer des retours Cordialement, l'équipe de Skript-MC.
  11. 8 points
    Désormais, pour vos demandes de skript, vous devrez respecter les règles suivantes : Le titre : Doit être un résumé de la demande et contenir le type de skript en préfixe. Par exemple vous voulez un skript de pet et bien le titre sera : "[Cosmétique] Skript de pet pour un lobby." La demande doit être formulée comme suit : Version de Minecraft : Version de Skript : Type du skript : Description du script en détails (3 lignes ce n'est pas assez détaillé) : Commandes éventuelles avec les permissions : Autres précisions (bout de skript déjà fait, systèmes actuellement utilisés, etc) : Une attention particulière sera portée quant à la rédaction de la demande. Elle doit être bien écrite, sans trop de fautes, bien détaillée et respectueuse des autres membres (un petit bonjour, un merci, etc.) Sanctions : Tout sujet créé ne respectant pas ces règles sera supprimé sans possibilité de recours ou de récupération. À noter que vous serez aussi sanctionné de 21 points d'avertissements. Dérogations : Vous pouvez passer outrepasser les règles de mise en forme uniquement si votre sujet est impeccablement écrit et bien présenté. Voici un exemple de présentation avec ce modèle : Titre du sujet : [Cosmétique] Skript de pet pour un lobby. Sujet : Version de Minecraft : 1.12.2 Version de Skript : 2.3.6 Type du skript : Skript de cosmétique Description du script : Bonjour je souhaiterais un skript qui permettrait aux joueurs sur mon lobby de choisir un pet. En effet, je voudrais qu'à l'aide d'un compas placé dans le 1er slot de la barre d'inventaire, l'utilisateur puisse choisir au travers d'un gui le familier qu'il désire. Il faudrait que les familiers en question soient configurables dans un fichier de configuration. Je voudrais aussi que certains pets soient accessibles uniquement aux vips+ (voir permission) là aussi, la liste de ces familiers devra être configurable dans un fichier yml. Commandes éventuelles avec les permissions : Je n'ai pas besoin de commandes particulières, mais j'ai besoin des permissions suivantes : Une permission lobby.vip donnant accès au choix d'un familier ; Une permission lobby.vip.plus. Autres précisions (bout de skript déjà fait, systèmes actuellement utilisés, etc.) : J'utilise actuellement SkQuery et Umbaska et ça serait top si le skript pouvait marcher avec une base de donnée configurable dans la config. Structure de la table pets : id unique ; uuid du joueur ; son pet actuel ; les pets autorisés (dans ce cas-là, pas besoin de permissions, il suffit d'aller voir dans la base si il a le droit de l'utiliser). Merci de votre aide et bonne journée.
  12. 8 points
    j'aimerais tellement qu'il y ais un bouton DisLike rien que pour cliquer dessus quand quelqu'un le mendie !
  13. 8 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
  14. 7 points

    Version 1.2.4

    523 downloads

    Hammer Possibilité de créer un outil qui casse une zone de 3x3x1, comparable aux marteaux de mods. Informations et dépendances : Version minecraft d'élaboration : 1.15.2 Version skript d'élaboration : 2.5-alpha3 Le script fonctionne sur toutes les versions à priori, à condition que votre version de Skript soit supérieure à la 2.4 Attention, il y a deux versions, une si vous avez un plugin de protection supporté par Skript (Worldguard principalement) et une autre si vous n'en n'utilisez pas ! Si vous utilisez la version nécessitant un plugin de protection sans en avoir, vous aurez une erreur. Fonctionnalités : - L'outil perd autant de durabilité qu'il y a de blocs cassés (Remerciements à @Romitou pour l'idée) - L'outil n'est utilisable qu'en survie et les enchantements de ce dernier sont pris en compte. (Mise à part l'enchantement unbreaking/solidité qui est inutile, je réglerai ça dans une prochaine mise à jour) - Si vous avez un plugin de protection, les joueurs ne pourront pas casser dans les zones protégées. (Merci à @Hordoss) Remarque : Ce script n'est qu'une base. C'est à vous ensuite de modifier à votre souhait les caractéristiques de l'objet auquel vous souhaitez donner ce pouvoir, il est par défaut donner à toutes les pioches en diamant. Droits et auteur : Ce script a été réalisé par @Lou'. Pour tout support ou suggestions, merci de vous diriger vers moi via mon discord (Louiiis#8078). J'ajoute que l'espace pour donner son avis n'est pas là pour demander de l'aide et que votre avis sera ignoré si vous n'utilisez pas le script comme indiqué ci-dessus. Vous avez le droit de modifier et utiliser ce script comme vous le souhaitez. Merci de ne pas vous l'approprier.
  15. 7 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 ?
  16. 7 points

    Version 2.07

    241 downloads

    Enhanced error output: Read the file and find the mistake ingame! Autocomplete for Skript: Autocomplete for scripts even in subdirectories! Better colors: Can be partially disabled! Backup System: Create a backup of all scripts withhin milliseconds! Update System: Check for Updates of SkriptEnhanced or Addons (not automatically!) Commands: - /skriptenhanced update > Check for Updates - /skriptenhanced backup > Create a backup of all scripts - /skriptenhanced addons > Check for Updates of Addons (Supports over 120 Addons) Permissions: - skript.admin (or OP) Dependencies: - Skript 2.2-dev37c - skript-mirror 0.19.1 - MundoSK 1.8.6-BETA.55 - PrococolLib If there are any bugs: Contact me on Discord Duetro#3513! This does only work with the english language of Skript!
  17. 7 points
    Bonjour, aujourd'hui je vous partage ma dernière création en Skript : un algorithme Soundex Merci de laisser le commentaire avec mon nom avant la fonction si vous l'utiliser dans votre code. Vous pouvez aussi me citer sur le post si vous êtes quelqu'un de gentil Il est très important d'avoir SkUtilities et skQuery pour que la fonction marche ! Qu'est ce que l'algorithme Soundex ? L'algorithme Soundex est un algorithme phonétique d'indexation de noms par prononciations (merci Wikipedia). En gros, il va transformer les mots en chiffres selon certains critères, et permettra ainsi de reconnaitre deux mots proches, deux mots qui ont une correspondance entre eux malgré des différences dans l'écriture. Il est utilisé par beaucoup de sites, du moins est repris par beaucoup de sites (moteurs de recherches, etc.). Je prefère vous le partager plutôt que le voir copier coller depuis mes futurs skripts qui l'utiliseront. L'algorithme L'algorithme Soundex est plutôt simple à comprendre. Je vais le décrire grossièrement, si vous voulez le voir en détail, rendez-vous ici. (le wikipedia anglais indique les exceptions et les règles, alors que la page française non) On retire les espaces, les voyelles (dont celles anglaises), et les lettres doublées puis on met le mot en majuscule On garde la première lettre On attribue un numéro à chaque lettre que l'on a encore sauf la première On garde seulement 3 chiffres, ou bien on ajoute des 0 pour avoir 3 chiffres On met la première lettre suivi des trois chiffres, voilà. Prenons par exemple le mot "Comment" COMMENT CMMNT CMNT M = 5, N = 5, T = 3 C553 La personne écrit mal le mot, et écrit "Cament" CAMENT CMNT M = 5, N = 5, T = 3 C553 Même code, donc mot proche Exceptions Il y a néanmoins quelques exceptions. L'algorithme les respecte parfaitement ! Si 3 chiffres sont les même de suite dans le code final, on en garde qu'un seul. C'est à dire que si 3 lettres avec le même chiffre se suivent, on en garde qu'une. Par exemple, "Jackson" ne donne pas pas "A222" mais "A250" Si deux lettres avec le même chiffre sont séparés d'un H ou d'un W, il n'y a qu'un chiffre et pas deux. Par exemple, "Ashcraft" n'est pas "A226" mais "A261" Le code, la fonction, l'algorithme donc pour l'utiliser, il suffit de faire soundex("text") et cela retournera un code. Par exemple "set {var} to soundex("salut")" Le code expliqué Utilisation théorique Vous allez sûrement vous dire "ok mais je fais quoi de cette fonction". Exemple théorique Il suffit de comparer ce que retourne la fonction pour un terme, et pour l'autre. On peut comparer 'soundex("salut")' et 'soundex("solut")', on aura le même code. Exemple command /money <text>:[/size][/size] [size=5][size=4] trigger: if arg 1 is not "remove": if soundex("remove") is soundex(arg 1): send "The command is /money remove and not /remove %arg 1% :)" Corrige la commande /money remove Il y a des tonnes de choses à faire avec cela ! Des corrections, des anti-spam développés, pleins de trucs ! A vous de voir maintenant... Si vous avez besoin d'aide n'hésitez pas à me demander, et n'hésitez pas non plus à lâcher un petit j'aime et un commentaire si vous aimez l'algorithme. Polymeth.
  18. 7 points
  19. 7 points
  20. 7 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
  21. 7 points
    @MrBboyIce , avant de parler tu pourrais réfléchir. Mais le truc c'est que plein de gens demande des skripts, mais eux ils n'aident jamais.. Et pour te prouver qu'on n'est pas flemmard: on place: world is "ton monde" add location of block to {placed.blocks::*} set {ignore.locations::%location of event-block%} to true on break: world is "ton monde" add location of block to {broken.blocks::*} add type of block to {broken.type::*} set {ignore.locations::%location of event-block%} to true command /regen: permission: regen.use permission message: &4&oVous n'avez pas la permission d'utiliser cette commande ! trigger: broadcast "&7[&7&oUHC&7] &eRégénération de la map en cour.." loop {broken.blocks::*}: set {_loc} to loop-value set block at {_loc} to {broken.type::%loop-index%} loop {placed.blocks::*}: set {_loc} to loop-value set block at {_loc} to air delete {broken.blocks::*} broadcast "&7[&7&oUHC&7] &eRégénération terminée !" every 180 seconds: make console execute command "/regen" Si je t'ai aidé met un like ;) La prochaine fois réflechie avant de parler.
  22. 7 points
    Attention, le titre signifie les profondeurs de Skript. Si vous n'avez pas les bases en Skript, vous pouvez oublier le tutoriel qui va suivre. Il utilise des connaissances un minimum approfondis. Hello ! Bienvenue dans le LPS #1. Aujourd'hui, on commence sur les functions. Un aspect très intéressant de Skript 2.2. Pourquoi ? Car une function peut-être utilisée de manière à optimiser un Skript. La base On va commencer par la base, comment définir une function. Une function doit être défini tout en haut d'un Skript. On va faire une function qui permettra de faire un Whisper (Message privé). Commençons par faire la base de la function. function Whisper(player: player, msg: text) Pour faire simple, Whisper correspond au nom de la function. Player, à la variable local que l'on va utiliser indiquant un joueur et msg à la variable local pour un text. Notre base étant créée, utilisons la ! Le code On va faire en sorte que {_msg} soit envoyé à {_player} Rien de plus simple ! Finissons donc la function function Whisper(player: player, msg: text): send "%{_player}% : %{_msg}%" to {_player} # #! La variable player correspond au joueur et la variable msg au text :D stop Maintenant, il nous faut utiliser cette function. L'utilisation de la function Pour utiliser la function, nous allons indiquer le joueur et le message dans un commande /w. command /w [<player>] [<text>]: trigger: if arg 1 is set: if arg 2 is set: Whisper(arg-1, "%arg-2%") # #! Les textes sont toujours entre guillemets. Le reste on s'en fou un peu :D else: "Syntax incorrecte. &e/w <Joueur> <Texte>" else: "Syntax incorrecte. &e/w <Joueur> <Texte>" [spoiler=Le code en entier que j'ai fait] function Whisper(player: player, msg: text): send "%{_player}% : %{_msg}%" to {_player} # #! La variable player correspond au joueur et la variable msg au text :D stop # #! Comment l'utiliser ? command /w [<player>] [<text>]: trigger: if arg 1 is set: if arg 2 is set: Whisper(arg-1, "%arg-2%") # #! Les textes sont toujours entre guillemets. Le reste on s'en fou un peu :D else: "Syntax incorrecte. &e/w <Joueur> <Texte>" else: "Syntax incorrecte. &e/w <Joueur> <Texte>" Success, votre function est bonne et vous pouvez désormais l'utiliser partout :D Ps : Pour utiliser un uuid, on set une variable
  23. 7 points
    Un tournoi ? Concours, lutte où l'on rivalise de talent avec d'autres dans un domaine quelconque. ;D Bref, revenons a nos moutons. Ces derniers jours j'ai beaucoup été critiqué. J'ai posté il y a longtemps une vidéo assez péjorative sur les tutoriels de skripts, et je m'en excuse. ces pour cela qu'elle vient être supprimer... 1-Téléchargé le fichier ;) 2-Installer Skript et SkQuery et WildSkript 3-Mettez le fichier bracket.sk dans /plugins/Skript/scripts/ 4-Configuré le 5-Redémarré le serveur bracket.admin.commande - Permet de voir la liste des commandes admin bracket.admin.reload - Permet de reload bracket.admin.add - Permet ajouter un joueur au bracket bracket.admin.remove - Permet de retirer un joueur au bracket bracket.admin.clear - Permet de clear la liste des joueurs bracket.joueur.menu - Permet au joueur de faire /br menu bracket.admin.start - Permet de start le bracket bracket.admin.set-tp - Permet De set les points de spawn bracket.admin.setinv - Permet de set l'inventaire pour le bracket Il faut être un nombre pair pour commencé logique ;) /Bracket join Permet de vous inscrire /Bracket leave Permet de vous désinscrire /Bracket list Permet de voir les inscrits /Bracket menu Permet d'ouvrire le menu bracket /Bracket add <joueur> Permet d'add un joueur /Bracket remove <joueur> Permet de retirer un joueur /Bracket clear Permet de vider les joueurs inscrits /Bracket open Permet d'ouvrire les insciptions au bracket /Bracket set-tp <texte/chiffre> Permet de set une position /Bracket start Permet de commencer un bracket /Bracket set-inv Mettez votre inv pour le bracket /Bracket reload Reload le skript #.______ .______ ___ ______ __ ___ _______ .___________. #| _ \ | _ \ / \ / || |/ / | ____|| | #| |_) | | |_) | / ^ \ | ,----'| ' / | |__ `---| |----` #| _ < | / / /_\ \ | | | < | __| | | #| |_) | | |\ \----./ _____ \ | `----.| . \ | |____ | | #|______/ | _| `._____/__/ \__\ \______||__|\__\ |_______| |__| # #Auteur: MinePlugins #Version: 1.0 #Depend de: Skript,SkQuery,WildSkript #============= # Les options #============= options: Monde_Bracket: world #Monde dans lequel ce déroule le tournoi Prefix: &8[&3&lBracket&8] #Prefix Il faut aussi mettre les différents points de spawn: /br set-tp Joueur1 #A l'emplacement du joueur 1 /br set-tp Joueur2 #A l'emplacement du joueur 2 /br set-tp lobby #A l'emplacement du respawn /br set-tp Holo1/2 #A l'emplacement au seront les hologrames {Bracket::*} = Liste des joueurs inscrit {Bracket-%player%-Inscrit} = Si un joueur est inscrit = true ou false = désinscrit {Bracket-Start} = Bracket a commencé = true sinon false {p1} = Joueur 1 entrain de passer {p2} = Joueur 2 entrain de passer {Win-Bracket-%player%} = Nombre de bracket gagné [spoiler=Screen]
  24. 6 points

    Version 2.2

    214 downloads

    Layrah est un Skript réalisé par Kar0tix#6668 qui est actuellement en version 2.0 ! Layrah est actuellement fonctionnel en version 1.12.2 et les add-ons nécessaires sont fournis pour cette version. Cependant, il est compatible avec les versions supérieures si vous mettez à jour vos add-ons avec vos propres versions. Si vous veniez à rencontrer quelconque problèmes relatifs à ce Skript, contactez directement Kar0tix#6668 plutôt que de passer par les commentaires afin d'avoir une assistance plus rapide et certainement plus efficace ! Fonctionnalités (V2) Sanctions appliquées via UUID pour éviter les contournements via changement de pseudonymes (serveurs crackés fortement déconseillé). Customisation de 90% des messages via fichiers de configuration .yml, et commande de rechargement et d'application en jeu (chemin : /plugins/Layrah). [Nouveauté 2.0] Les sanctions peuvent être appliquées correctement sur les joueurs déconnectés. Les sanctions dans le casier d'historique de modération des joueurs peuvent être retirées en une commande, afin de purger un casier d'un utilisateur. Une confirmation est demandée à chaque application de sanction, et suppression de casier, afin d'éviter les erreurs. Les sanctions peuvent être appliquées de manières silencieuses dans le menu de confirmation de votre sanction. Seul vous verrez l'annonce ! [Nouveauté 2.0] Animation activable et désactivable pour les bannissements, avec feux d'artifices, éclair(s) et notification sonore dans les fichiers de configuration .yml. [Nouveauté 2.0] Système de protection de l'espace de discussion, avec censure modifiable (les mots censurés peuvent être ajoutés/retirés en jeu via une commande). Système de désactivation de commandes en étant réduit au silence modifiables (les commandes bloqués peuvent être ajoutées/retirées en jeu via une commande). [Nouveauté 2.0] Messages cliquables et interactifs, pour faciliter les commandes et rendre vos modérateurs plus rapides et efficaces. Affichage des informations des utilisateurs (UUID, IP, position, statut de bannissement, bâillon, etc...). Personnalisation des informations que vous souhaitez voir dans le /whois (fonctionnalité citée juste au dessus), via fichiers de configuration .yml ! [Nouveauté 2.0] Les sanctions (hormis avertissements) ne peuvent être additionnées. Vous ne pouvez pas bannir quelqu'un de banni par exemple. Les sanctions sont enregistrées par numéros, pour être facilement traçables, et avoir les détails. Système de signalements avec délai entre chaque signalement. Les messages reçus par les modérateurs sont interactifs et téléportent ! [Nouveauté 2.0] Système de gestion de l'espace de discussion via la commande /chat. Vous pouvez vider votre t'chat et le bâillonner pour éviter les débordements ! [Nouveauté 2.0] L'intégralité des commandes peuvent être activées/désactivées si vous ne souhaitez pas les utiliser via le fichier de configuration .yml ! [Nouveauté 2.0] Les actions de modération sont enregistrées dans les fichiers de log accessibles au chemin /plugins/Skript/logs/Layrah ! [Nouveauté 2.0] Les sanctions temporelles (bannissement et bâillons) peuvent être définitifs, mais aussi temporaire, et en une seule commande (cf. Commandes) ! [Nouveauté 2.0] Commandes (V2) Recharger les fichiers .yml (/layrah) Information(s) utilisateur(s) - Visualisez les informations en jeu de vos utilisateurs. Syntaxe : /whois <utilisateur>. Signaler un utilisateur - Signaler les comportements inappropriés aux modérateurs du serveur. [Nouveauté 2.0] Syntaxe : /report <utilisateur> <raison>. Bloquer les commandes - Interdisez l'accès à certaines commande lorsque l'utilisateur est réduit au silence. [Nouveauté 2.0] Syntaxe : /command_mute <add / remove / list> [entrée]. Censure de l'espace de discussion (/protection) - Gérer la censure de différents mots dans le t'chat. Syntaxe : /protection <add / remove / list> [entrée]. Bannissement (/ban) - Suspendez un utilisateur de votre serveur et interdisez-lui l'accès à celui-ci, pour la durée que vous souhaitez. Syntaxe : /ban <utilisateur> <durée> <raison> - La durée s'exprime de cette façon : nombre durée (exemple: 1d) - s, m, h, d ou PERMANENT [Nouveauté 2.0] Bâillon (/mute) - Bâillonnez un utilisateur de votre serveur et interdisez-lui l'accès à l'espace de discussion. Syntaxe : /mute <utilisateur> <durée> <raison> - La durée s'exprime de cette façon : nombre durée (exemple: 1d) - s, m, h, d ou PERMANENT [Nouveauté 2.0] Éjection (/kick) - Éjectez les utilisateurs du serveur. Ils pourront se reconnecter juste après. Syntaxe : /kick <utilisateur> <raison>. Avertissement (/warn) - Attribuez des avertissements à vos utilisateurs. Syntaxe : /warn <utilisateur> <raison>. Retrait de suspension (/unban) - Retirer la suspension d'un utilisateur. Syntaxe : /unban <utilisateur> <raison>. Retrait de bâillon (/unmute) - Retirer le bâillon d'un utilisateur. Syntaxe : /unmute <utilisateur> <raison>. Afficher une sanction précise (/sanction) - Afficher les différents détails d'une sanction via le numéro associé à la sanction. Syntaxe : /sanction <numéro de sanction>. Casier (/casier) - Gérer les différentes sanctions du casier d'un utilisateur. Syntaxe : /casier <utilisateur> [numéro de l'entrée à retirer du casier]. Discussion privatisée pour l'équipe (@) - Discutez de façon privée entre les membres de votre équipe. Syntaxe : Entrez votre message dans le t'chat, en commençant celui-ci par le symbole @. Permissions (V2) layrah.* ➟ Accès à l'intégralité des commandes de Layrah. [Nouveauté 2.0] layrah.admin ➟ Accès aux commandes d'administration & de gestion du Skript. layrah.chat ➟ Accès à la commande gestion du t'chat (/chat). [Nouveauté 2.0] layrah.ban ➟ Accès à la commande de bannissement (/ban). layrah.ban.permanent ➟ Accès à la caractéristique "PERMANENT" pour la durée des bannissements. [Nouveauté 2.0] layrah.unban ➟ Accès à la commande de dé-bannissement (/unban). layrah.mute ➟ Accès à la commande d'application de bâillon (/mute). layrah.mute.permanent ➟ Accès à la caractéristique "PERMANENT" pour la durée des bâillons. [Nouveauté 2.0] layrah.unmute ➟ Accès à la commande de retrait de bâillon (/unmute). layrah.kick ➟ Accès à la commande d'éjection (/kick). layrah.warn ➟ Accès à la commande d'avertissement (/warn). layrah.bypass ➟ Permission permettant de ne pas pouvoir recevoir de sanction. layrah.chat.bypass ➟ Permission permettant de pouvoir ignorer la restriction de bâillon global de t'chat. [Nouveauté 2.0] layrah.sanction ➟ Afficher les détails précis d'une sanction (/sanction). layrah.casier.view ➟ Afficher visuellement le casier d'un utilisateur. layrah.casier.purge ➟ Supprimer une sanction d'un casier d'un utilisateur. layrah.notify ➟ Visualiser les notifications de modération (exemple: notifications de censure). layrah.reports.view ➟ Visualiser les notifications relatives aux signalements. [Nouveauté 2.0] layrah.whois ➟ Visualiser les informations d'un utilisateur (/whois). layrah.staffchat ➟ Visualiser l'espace de discussion de l'équipe. Add-ons nécessaires au bon fonctionnement du Skript Skript 2.4.1 (1.12.2) SkQuery 3.6.4 (1.12.2) TuSKe 1.8.2-PikachuPatchv3 (1.12.2) skript-yaml 1.3.2 (1.12.2) Il est conseillé de mettre le dateFormat dans config.sk de Skript de base à dd/MM/yyyy HH:mm ! Quelques images La suite est a découvrir par vous même... Droits d'auteur & formalités Étant donné que les droits d'auteurs de contenus si facilement modifiables sont difficiles à gérer, Layrah peut être utilisé et modifié si vous le souhaitez, vous ne serez en aucun cas inquiété. Néanmoins, il est strictement interdit de s'approprier le Skript, bien que vous pouvez le modifier à votre guise. Il est également interdit de le proposer au téléchargement, même modifié. Aucune aide ne sera fournie en cas de modification du code lui-même (hormis les messages personnalisables) et si le Skript est utilisé hors de la version 1.12.2 et qu'il rencontre un problème majeur. Si vous rencontrez cependant quelconque problème avec ce Skript, vous pouvez me contacter sur Discord Kar0tix#6668. Si vous trouvez mon Skript utile, fonctionnel, et qu'il vous est pratique, n'hésitez pas à laisser un commentaire après votre téléchargement, avec une note (PS: Merci à noftaly qui m'a passé une fonction d'un de ses anciens code qui m'a fait avancé et optimisé une commande, et merci à @DKSM pour avoir participé à la recherche des problèmes qui ont été corrigés lors de la mise à jour 2.2 de Layrah.)
  25. 6 points

    Version 1.0

    371 downloads

    Rentabilisez votre serveur ★ PRÉSENTATION ★ MinePay est un système de micro-paiement en jeu totalement automatisé. Il fonctionne grâce au service de SMS surtaxés proposé par DediPass (https://dedipass.com). Il vous suffit de créer un compte DediPass, puis d'ajouter une offre de micro-paiement et de la relier au Skript MinePay. Les joueurs pourront ensuite utiliser ce service en envoyant un SMS surtaxé et en entrant le code reçu directement en jeu pour confirmer le paiement et recevoir une récompense. Une fois l'argent crédité sur votre compte DediPass, vous pouvez l'envoyer sur un compte en banque ou un compte PayPal. ★ FONCTIONNALITÉS ★ ✔ Paiements instantanés & 100% Automatiques ✔ Simple d'utilisation ✔ Fichier logs avec historique des achats ✔ Récompense configurable ✔ Design clair & élégant ✔ Fonctionnement détaillé pour les joueurs ★ COMMANDES ★ ★ /Pay : Afficher l'offre ● /Pay <code> : Valider un code ● /Minepay : Afficher la page d'aide ● /Minepay history : Voir le nombre de codes que l'on a validés ● /Minepay history <player> : Voir le nombre de codes qu'un joueur a validés ● /Minepay info : Voir les informations concernant MinePay et le système de paiement ★ INSTALLATION ★ Pour commencer, vous devez créer un compte DediPass (https://dedipass.com/fr/signup) Dans "URL du site" mettez par exemple "https://google.fr" 1. Création du service ETAPE 1 : Une fois connecté, cliquez sur "ajouter un service" Sélectionnez "Produit Unique" ETAPE 2 : Site » Sélectionnez "ajouter un site" et mettez ce que bon vous semble (Aucune importance). Nom » Aucune importance, mettez ce que vous voulez. URL d'installation » Aucune importance, vous pouvez mettre "https://google.fr". Code » Entrez un code à 8 caractères. Il vous permettra de tester le service, notez le bien. Paiement » Sélectionnez "redirection" URL de redirection » Aucune importance, vous pouvez mettre "https://google.fr". ETAPE 3 : Cherchez la section "SMS" des pays voulus et choisissez l'offre que vous souhaitez. Le "mot-clé" correspond au mot que les joueurs devront envoyer par SMS au numéro surtaxé pour payer ("HELLO","CODE"...). Notez bien ce code, il vous servira plus tard. ETAPE 4 : Cliquez sur l'onglet "SMS" à droite et notez le numéro de téléphone (il vous servira plus tard) puis passer directement à l'étape suivante. ETAPE FINALE : Allez à "3. Valider la transaction" puis copier une partie du code de droite comme indiqué sur cette image : Collez ensuite ce bout de code dans un document texte quelconque et récupérez les valeurs "private_key" et "public_key" comme indiqué sur cette image : REMARQUE : Comme vous pouvez le voir, les "&" ne font pas parti des clefs. REMARQUE : Gardez bien ces valeurs à portée de mains, elles sont nécessaires pour faire fonctionner MinePay. 2. Installation du service Félicitations ! Vous y êtes presque Il vous suffit maintenant d'installer le skript sur votre serveur et de rentrer les valeurs précédentes dans celui-ci (Clef publique, clef privée, prix du sms, numéro de téléphone surtaxé et code du SMS) Une fois que vous avez configuré le paiement et la récompense, relancez le script (/sk reload minepay) et utilisez le code de test crée précédemment pour vérifier que le service fonctionne bien. Et voilà ! MinePay est installé ★ ADDON ★ SkQuery ★ NOTE ★ Je ne suis en aucun cas responsable de l'utilisation que vous faites de MinePay. Si vous souhaitez vendre autre chose que des cosmétiques, vous devez indiquer que votre serveur n'est pas affilié à Mojang. Vous devez également faire attention au droit de rétraction de 7 jours prévus par la Loi Française. J'ai ajouté à MinePay une condition de non-valabilité de ce droit lors du paiement (ligne n°120) et une impossibilité de remboursement (ligne n°122) pour vous éviter d'éventuels problèmes liés aux paiements. MENTIONS LÉGALES En utilisant MinePay, vous n'avez pas le droit de : ✖ Vendre le script ✖ Vous approprier le script ✖ Décréditer mon pseudo du script Si vous aimez mon travail, merci de le noter et de me faire part de votre avis dans les commentaires
  26. 6 points
    Alors salut tout le monde, on se retrouve pour un nouveau petit tutoriel sur les équipes. J'ai décidé de le faire vu que la création d'équipes en skript avait été souvent demandé et qu'aucun tutoriel n'avait été fait sur le sujet! Donc, voilà nous allons en avoir un maintenant. Les variables: Bon avant toute chose, nous devons commencer par la base et faire une petite révision des variables pour ceux qui sont un peu moins avancés en skript, pour leur permettre de comprendre. Sur Skript, nous avons 3 types de variables, les variables locales, les listes et les variables normales. - Une variable normale est nommé entre les { }. Elle permet de stocker une donnée ex: Un nombre, un joueur, un mot, etc. -Une variable locale se nomme comme la variable normale, mais elle débute par un _ comme ceci {_variable}. Cette variable fait le même travaille qu'une variable normale, sauf qu'elle est est supprimé à la fin de notre code. -Une liste se nomme comme la variable normale, mais elle est suivie de ::* comme ceci {variable::*}. Elle permet de stocker plusieurs données sous forme d'une liste. Le code: Bon, il est temps d'entrer dans le vif du sujet. pour commencer, nous allons exécuter une commande qui permettra aux joueurs de rejoindre le lobby et de leur voir attribuer une équipe automatiquement. Nous commençons par créer une commande: command /tutoteam: # On créer la commande trigger: #Ce que la commande va faire if {team::color::%player%} is not set: # Si le joueur n'est pas dans une équipe teleport player to {lobby} #N'oubliez pas de set {lobby} à une certaine coordonée if size of {team::red::*} is more than size of {team::blue::*}: # Si il y a plus de joueurs dans la team red que la team blue add player to {team::blue::*} # Ajouter le joueur à la team blue set {team::color::%player%} to blue # Mettre le joueur dans la team blue else: # Sinon add player to {team::red::*} # Ajouter le joueur à la team red set {team::color::%player%} to red # Mettre le joueur dans la team red add player to {team::*} # Ajoute le player à la variable qui contient tout les joueurs loop {team::*}: # On loop tout les joueurs qui jouent send message "%player% a rejoint l'équipe %{team::color::%player%}%" to loop-value # On envoie un message à tout les joueurs qui jouent invoke "timertest" # Fonction pour commencer le timer (remplace une commande) Donc avec ce code, lorsqu'un joueur exécute la commande /tutoteam, il sera automatiquement attribué à l'équipe rouge ou bleu. Nous devons par la suite, enlever le joueur de son équipe s'il quitte la partie. on quit: if {team::color::%player%} is set: # Si le joueur est dans une équipe remove player from {team::%{team::color::%player%}%::*} # Enlève le joueur de l'équipe delete {team::color::%player%} # Supprime l'équipe du joueur remove player from {team::*} # Enlève le joueur de la variable qui contient tout les joueurs set {tptospawn::%player%} to true # Set une variable pour dire qu'il doit être tp au spawn lorsqu'il va rejoindre on join: if {tptospawn::%player%} is true: # S'il doit se faire tp au spawn teleport player to spawn # Téléporter au spawn delete {tptospawn::%player%} # Supprime la variable Par la suite, nous devons faire que la partie commence automatiquement à 20 joueurs, donc: sub "timertest": #Notre fonction if size of {team::red::*} + size of {team::blue::*} is more than 19: # Si le nombre de joueurs = 20 et + set {_s} to 11 # Nombres de secondes avant le début du match loop 10 times: # 10 secondes remove 1 from {_s} # On enlève 1 seconde loop {team::*}: # On prend tout les joueurs qui jouent send message "La partie commence dans %{_s}% secondes" to loop-value-2 # On envoie une message à chaque joueur personellement wait 1 second # attendre une seconde en chaque seconde loop {team::red::*}: # Tout les joeurs de l'équipe rouge teleport loop-value to {team::spawn::red} #Teleport au spawn rouge loop {team::blue::*}: # Tout les joueurs de l'équipe bleu teleport loop-value to {team::spawn::blue} # Teleport au spawn bleu Manipuler nos variables: Bon, nous venons tout juste de créer un système d'équipe et de lobby, il ne nous manque plus qu'à voir les variables servent à quoi pour s'assurer que tout est clair pour tout le monde {team::color::%player%} contient la couleur de l'équipe du joueur {team::red::*} contient tout les joueurs de l'équipe rouge {team::blue::*} contient tout les joueurs de l'équipe bleu {team::*} contient tout les joueurs qui jouent J'espère que j'ai été assez clair :) Si jamais vous avez des questions, vous pouvez les mettre dans les commentaires et je vous répondrai dans un cours délai Code final: command /tutoteam: # On créer la commande trigger: #Ce que la commande va faire if {team::color::%player%} is not set: # Si le joueur n'est pas dans une équipe teleport player to {lobby} #N'oubliez pas de set {lobby} à une certaine coordonée if size of {team::red::*} is more than size of {team::blue::*}: # Si il y a plus de joueurs dans la team red que la team blue add player to {team::blue::*} # Ajouter le joueur à la team blue set {team::color::%player%} to blue # Mettre le joueur dans la team blue else: # Sinon add player to {team::red::*} # Ajouter le joueur à la team red set {team::color::%player%} to red # Mettre le joueur dans la team red add player to {team::*} # Ajoute le player à la variable qui contient tout les joueurs loop {team::*}: # On loop tout les joueurs qui jouent send message "%player% a rejoint l'équipe %{team::color::%player%}%" to loop-value # On envoie un message à tout les joueurs qui jouent invoke "timertest" # Fonction pour commencer le timer (remplace une commande) on quit: if {team::color::%player%} is set: # Si le joueur est dans une équipe remove player from {team::%{team::color::%player%}%::*} # Enlève le joueur de l'équipe delete {team::color::%player%} # Supprime l'équipe du joueur remove player from {team::*} # Enlève le joueur de la variable qui contient tout les joueurs set {tptospawn::%player%} to true # Set une variable pour dire qu'il doit être tp au spawn lorsqu'il va rejoindre on join: if {tptospawn::%player%} is true: # S'il doit se faire tp au spawn teleport player to spawn # Téléporter au spawn delete {tptospawn::%player%} # Supprime la variable sub "timertest": #Notre fonction if size of {team::red::*} + size of {team::blue::*} is more than 19: # Si le nombre de joueurs = 20 et + set {_s} to 11 # Nombres de secondes avant le début du match loop 10 times: # 10 secondes remove 1 from {_s} # On enlève 1 seconde loop {team::*}: # On prend tout les joueurs qui jouent send message "La partie commence dans %{_s}% secondes" to loop-value-2 # On envoie une message à chaque joueur personellement wait 1 second # attendre une seconde en chaque seconde loop {team::red::*}: # Tout les joeurs de l'équipe rouge teleport loop-value to {team::spawn::red} #Teleport au spawn rouge loop {team::blue::*}: # Tout les joueurs de l'équipe bleu teleport loop-value to {team::spawn::blue} # Teleport au spawn bleu
  27. 6 points

    Version 2.0.0

    235 downloads

    Introduction Ce skript permet à des joueurs qui ont envie de faire une survie de charger les chunks dans laquelle se trouve le joueur afin d'avoir moins de latence en jeu. J'ai fait ce skript pour mon serveur car j'avais besoin de générer une map de 10000 par 10000, or les manœuvres vanilla ne marchait presque pas et/ou ne m'intéressais pas. C'est pour cela que j'ai crée ce skript. Commandes /chunk start: Le skript commencera à faire le chargement des chunks progressivement jusqu'à atteindre le cycle souhaité. /chunk stop: Si vous avez lancé le chargement involontairement, vous pouvez l'arrêter avec cette commande. Depuis la v2: /chunk whitelist list: Liste toutes les personnes whitelistés lors d'un chargement. /chunk whitelist add <joueur>: Ajoute le joueur ciblé dans la whitelist. /chunk whitelist remove <joueur>: Enlève le joueur ciblé de la whitelist. /chunk debug: Supprime toute les variables/listes du skript (à exécuter en cas de gros soucis) Permissions Toutes les permissions sont changeables dans les options du skript. V1: chunk.use : Permet d'utiliser l'intégralité du skript V2: chunk.use: Permet d'utiliser le skript et de lancer un chargement. chunk.stop: Permet de stopper un chargement. chunk.whitelist: Permet de modifer tout les paramètres de la whitelist (list, add et remove). chunk.debug: Permet d'utiliser le debug qui supprime toutes les données (variables et listes) du skript. chunk.allperms: Permet d'utiliser l'intégralité des fonctions présent sur ce skript. Fonctionnement Le fonctionnement est basé sur des calculs numériques. Le joueur se fait téléporter de point en point tout en ayant un paterne prédéfini. Au début, le joueur sera téléporté tant de block en z et commencera à faire la procédure de départ: - Step 1 : 1 chunk vers le bas (+1 à chaque cycle) - Step 2 : 2 chunks vers la gauche (+2 à chaque cycle) - Step 3 : 2 chunks vers le haut (+2 à chaque cycle) - Step 4 : 2 chunks vers la droite (+2 à chaque cycle) - Step 5 : 1 chunks vers le bas (+1 à chaque cycle) Le tout de ces 5 étapes forme un carré qui s'étendra grâce à une boucle en fonction du rayon choisis. Options Prefix: &e&lChunk&6&lLoader &f» &e Pas: 200 Y_coordinate: 120 Postion_native: true Temps_attente: 2 Permission: chunk.use Le préfix est tout simplement les messages relatifs à ce skript. Le pas indique la distance entre chaque tp: - Un gros pas permettra de charger plus de chunks mais lentement. - Un petit pas permettra de charger moins de chunks mais rapidement. (Recommendé: Mettre un temps d'attente plus réduit) La position native est le point où le chargement commencera: - Si vous utilisez Essentials pour la téléportation, il est recommandé de le mettre sur false. - Si il est mis sur true, il prendra votre position où la commande a été exécuté. - Si il est mis sur false, il commencera en x=0 y=120 z=0. Le temps d'attente est la pause qu'il y a entre chaque téléportation en seconde. Mettre une permission est recommandé pour éviter d'avoir des confilts entre d'autres joueurs. V1: *Tout ce qui est dit ici est rappelé dans les options du skript. V2: *Les options sont directement ajustables In-Game (sauf pour le prefix et les permissions). Tutoriel Si vous êtes un petit peu perdu, voici un tutoriel comment utiliser mon skript. ^^ Installation & Configuration Placer le fichier ChunkLoader.sk dans votre dossier Skript et le répertoire scripts. Pour configurer le skript, vous avez juste à ouvrir le skript et de configurer les options déjà présentes. V2: Glisser les addons du dossier compressé dans le répertoire plugins (si vous avez déjà les addons ainsi que les bonnes versions, vous n'êtes pas obligés de le faire ) Dépendance et version V1: *Testé sous la version de Minecraft 1.8.9 et de Skript 2.2-dev25. Ce skript ne nécessite d'aucun addon. Vous avez besoin juste de Skript pour le faire fonctionner. V2: *Testé sous la version de Minecraft 1.12.2 et de Skript 2.3.7. Vous aurez besoin comme addons de: TuSke : 1.8.2-Pikachu-Patch-3 (-> principalement utilisé pour les menus) SkQuery: 3.6.4, voir 3.6.5 (-> principalement utilisé pour les fonctions) Tout les addons sont disponibles dans le dossier compressé. Choses à faire - Faire une sécurité en cas de déconnexion du joueur Milestone 10 téléchargements 25 téléchargements 50 téléchargements 100 téléchargements 250 téléchargements Informations complémentaires Si vous voyez des bugs en utilisant ce skript, merci de ne pas mettre de review mais de le partager dans la section commentaire. Si vous avez des idées pour l'améliorer, n'hésitez pas à m'envoyer un message privé sur discord (ToxykAuBleu#7951 ) je suis disponible dès que possible mais éviter de me spammer tout de même. Ou encore je suis disponible sur mon serveur discord https://discordapp.com/invite/FjturpF Mentions: Il est 100% interdit d'upload ce skript, ce skript n'est pas soumis au partage opensource ! Si vous souhaitez apporter une modification / amélioration, vous pouvez uniquement pour votre propre serveur.
  28. 6 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.
  29. 6 points
    Beaucoup d'entre vous demandent un pack d'addon, alors voici les addons qu'il vous faut au minimum. Les packs peuvent être changé à votre sauce, et tout les addons ne sont que recommandé et non obligatoire. Les packs d'addons pré-fait sont mauvais, donc les packs ci-dessous seront mis à jour au besoin en cas d'addon abandonné ou autre changement. Voici la liste des addons abandonnés (sur à 100%) et donc à ne pas utiliser: Umbaska WildSkript MundoSk (Devient Kosmos, WebSKT et Tablisknu) J-NBT (Devient Sk-NBeeT) Sk-NBeeT (Devient SkBee) Skuared Skraper QuarSk SkStuff Sketch Skematic SkUtilities (Devient Skent) Voici une liste des spécificités de chaque addons qui ne sont pas recommandés: SkQuery: Les guis SkUtilities: Tout ce qui est gestion de fichiers Voici les packs que je vous propose. Il n'y a aucun ordre de préférence. Je vous invite à directement vous renseigner sur l'addon en question en lisant sa description anglaise, en vous renseignant sur le discord de skript-mc ou le forum directement: Le pack basic: SkQuery ([Contenu masqué]) Skript-yaml ([Contenu masqué]) Skent ([Contenu masqué]) Skester ([Contenu masqué]) Le pack plus de syntaxes: Le pack basic Tablisknu ([Contenu masqué]) SkQuery ([Contenu masqué]) Skellett ([Contenu masqué]) ExpressionsPlus ([Contenu masqué]) QuarSk ([Contenu masqué]) Le pack gestion de monde: Le pack basic Kosmos ([Contenu masqué]) Skematic ([Contenu masqué]) FaweSk ([Contenu masqué]) Khoryl ([Contenu masqué]) Le pack jeux: Le pack basic GameAPI ([Contenu masqué]) Le pack web: Le pack basic WebAddon ([Contenu masqué]) Skript-json ([Contenu masqué]) Reqn ([Contenu masqué]) WebSKT ([Contenu masqué]) SkLib ([Contenu masqué]) TwitterSk ([Contenu masqué]) SkEmail ([Contenu masqué]) Vixio ([Contenu masqué]) Le pack bungeecord: Le pack basic Skungee ([Contenu masqué]) BungeeMaster ([Contenu masqué]) BungeeAddon ([Contenu masqué]) Le pack multi plugins: Le pack basic SkUniversal ([Contenu masqué]) SkWaze ([Contenu masqué]) WolvSk ([Contenu masqué]) LiteBanSk ([Contenu masqué]) SkriptNPC ([Contenu masqué]) NpcAddon ([Contenu masqué]) SharpSk ([Contenu masqué]) Skellett ([Contenu masqué]) SkVault ([Contenu masqué]) SKPermissionsEx ([Contenu masqué]) Sky ([Contenu masqué]) Le pack geometrie et constructions: Le pack basic Biosphere ([Contenu masqué]) FaweSk ([Contenu masqué]) Netrozor ([Contenu masqué]) Le pack particules: Le pack basic SkDragon ([Contenu masqué]) Beamer ([Contenu masqué]) HolographicDisplaysAddon ([Contenu masqué]) Le pack scoreboard: Le pack basic SkBee ([Contenu masqué]) SkRayFall ([Contenu masqué]) Skore ([Contenu masqué]) Skellett ([Contenu masqué]) Le pack NBT: Le pack basic SkBee ([Contenu masqué]) Le pack GUIS: Le pack basic SkQuery ([Contenu masqué]) TuSke ([Contenu masqué]) Skript dev34+ ([Contenu masqué]) Le pack permissions: Le pack basic Sk-Perm ([Contenu masqué]) SkPermissionsEx ([Contenu masqué]) Le pack REGEX: Le pack basic TuSke ([Contenu masqué]) Le pack modification de server: Le pack basic skript-mirror ([Contenu masqué]) skript-log ([Contenu masqué]) SkUtilities ([Contenu masqué]) Skent ([Contenu masqué]) ThatPacketAddon ([Contenu masqué]) Le pack holographic: Le pack basic skript-holo ([Contenu masqué]) HolographicDisplayAddon ([Contenu masqué]) skRayFall ([Contenu masqué]) Le pack inclassable: Le pack basic TranSKator ([Contenu masqué]) Skester ([Contenu masqué]) Tout les addons sont trouvable sur skunity partie "addons" ([Contenu masqué])
  30. 6 points
    Salut tous le monde ! Je vais vous montrer comment récupérer le grade d'un joueur avec PermissionEX et GroupManager ! Récupérer un grade : [spoiler=PermissionsEx] D'abord, il faut créer une fonction : Function RecupGrade(p: player) #On créer une fonction, si vous ne savez pas comment faire, je vous invite à lire le tutoriel de Gauvain : [Contenu masqué] set {_uuid} to {_p}'s uuid #On récupère l'UUID du joueur set {_Grade} to single value "users.%{_uuid}%.group" get of "plugins/PermissionsEx/permissions.yml" # On récupère le grade du joueur replace all "[" with "" in {_Grade} #On enlève les crochets du grade replace all "]" with "" in {_Grade} send "%{_Grade}%" to {_p} #On envoie le résultat au joueur command /RecupGrade <offline player>: #On crée la commande trigger: RecupGrade(arg-1) #On appelle la fonction [spoiler=GroupManager] function RecupGrade(p: player): #On créer une fonction, si vous ne savez pas comment faire, je vous invite à lire le tutoriel de Gauvain : [Contenu masqué] set {_monde} to {_p}'s world #On récupère le monde du joueur set {_a} to value "users.%{_p}%.group" get of "plugins/GroupManager/worlds/%{_monde}%/users.yml" # On récupère le grade du joueur send "%{_a}%" to {_p} #On envoie le message au joueur command /RecupGrade <offline player>: trigger: RecupGrade(arg-1) Récupérer un prefix [spoiler=PermissionsEx] Function RecupPrefix(p: player): set {_uuid} to {_p}'s uuid set {_Grade1} to single value "users.%{_uuid}%.group" get of "plugins/PermissionsEx/permissions.yml" # On récupère le grade du joueur replace all "[" with "" in {_Grade1} replace all "]" with "" in {_Grade1} set {_Grade2} to single value "groups.%{_Grade1}%.options.prefix" get of "plugins/PermissionsEx/permissions.yml" # On récupère le grade du joueur #On récupère le prefix replace all "&" with "§" in {_grade2} #Pour être sur qu'il y ai des couleurs send "%{_Grade2}%" to {_p} J'espère que ce tutoriel vous à été utile et bye ;)
  31. 6 points
    Générer des courbes type f(x)=-x² Difficulté: Partie 1: Difficile | Partie 2: Expert Partie 1 - Les bases mathématiques Une équation du second degrés c'est quoi ? En mathématiques, une équation du second degré est une équation polynomiale de degré 2, c'est-à-dire qu'elle peut s'écrire sous la forme: ax² +bx+c (a,b et c sont des paramètres coefficient dont a différent de 0 et x l'inconnue) Les équations du second degrés sont représentées sur un graphique de la manière suivante: y est appelé "équation de courbe" x1 et x2 représente les deux solution en y=0 de l'équation de courbe. Ces deux solutions nous intéresse pour notre skript en question ainsi que notre équation de courbe. Pour plus d'informations, checkez sur internet ou vos cours de mathématiques de la seconde générale au lycée ^^ Wow trop d'info ! on en fait quoi de l'équation de courbe ? Déjà on va devoir réfléchir à une équation quadratique simple. Pour mon exemple on va prendre y = -0.85x²+100 Version difficile: -0.85x² aura donc les limites suivantes (voir les exemple de la courbe bleu du schéma ci-dessus) - Limx->-inf|x<0 -0.85x² = -infini (quand l'inconnu x ira vers -infini alors -0.85x² ira vers un résultat vers - infini) - Limx->0 -0.85x² = 0 - Limx->+inf|x>0 -0.85x² = -infini En français ça donne ceci: Cette courbe vas donc être croissante pour x allant de -infini à 0 puis décroissante pour x allant de 0 à +infini (cependant l'exemple n'est pas valable pour Lim cos(x) ou Lim sin(x) qui tout deux n'ont pas de limite !) Le +100 nous permet de faire en sorte que f(0)=100 c'est à dire que quand x = 0 (en abscisse) alors y = 100 (en ordonnée) Jusque là ce n'est pas trop difficile de faire de la lecture graphique sur sa calculatrice pour constater de -0.85x²+100 fait une courbe croissante au départ avec une approximation d'un x1 vers -11 puis décroissante à partir de x=0 et la présence d'un x2 vers +11. Version résumé: Si vous êtes paumé, c'est normal xD. Je vous ai expliqué des trucs qui ne sont pas facile à comprendre quand on fait pas des mathématiques plus difficile. Au collège on n'apprend pas ça et au lycée on ne voit que les limites vers la terminal scientifique ou technologique. Pas d'inquiétude, retenez juste le fait que grâce à l'équation -0.85x²+100 on aura une courbe qui monte et qui descend avec des coupure vers des x1 = -11 et x2 =+11. Pour inverser le sens du genre, je veux que la courbe descende puis remonte, il faut juste changer le signe du coefficient a) Partie 2 - L'algorithme Quel repère ? Minecraft étant un jeu 3 dimensions, on va avoir besoin d'un repère 3 dimensions (O,x,y,z) (dont O étant une position absolue) Commençons par le plus simple: positionner notre départ et notre "arrivée". notre point de départ représente le x1 de notre courbe et l'arrivée le x2. On commence par quoi ? Voici 3 commandes: # Supprimer toutes les variables command /reset: trigger: delete {CourbeSk::*} # Poser le départ command /start: trigger: set {CourbeSk::PosStart} to player's location set {CourbeSk::StartX} to x-location of player set {CourbeSk::StartZ} to z-location of player message "&7Position de départ: &aX: %{CourbeSk::StartX}% &7- &aZ: %{CourbeSk::StartZ}%" # Poser la potentielle arrivée command /end: trigger: set {CourbeSk::EndX} to x-location of player set {CourbeSk::EndZ} to z-location of player message "&7Position d'arrivée: &aX: %{CourbeSk::EndX}% &7- &aZ: %{CourbeSk::EndZ}%" On sépare bien les variables X et Z pour pouvoir comparer les distances plus tard. Les 3 commandes ci-dessus sont essentielles pour le reste du skript. Le skript ne va pas deviner la position de départ ni d'arrivée. On va faire ensuite l'algo qui va dire dans quels sens sont le départ et l'arrivée. On va détecter si X-Départ est négatif/positif et plus loin/près que de X-Arrivée par rapport au centre de la map. C'est pas simple à comprendre quand on l'explique en français mais regardez le code vous allez comprendre. command /courbe: trigger: # /// Vérification du sens if {CourbeSk::StartX} > 0: if {CourbeSk::EndX} > 0: if {CourbeSk::EndX} > {CourbeSk::StartX}: set {CourbeSk::SigneX} to 1 message "&cX1 &ax> z> &ee>s &31" if {CourbeSk::EndX} < {CourbeSk::StartX}: set {CourbeSk::SigneX} to -1 message "&cX2 &ax> z> &ee<s &3-1" if {CourbeSk::StartX} < 0: if {CourbeSk::EndX} < 0: if {CourbeSk::EndX} > {CourbeSk::StartX}: set {CourbeSk::SigneX} to 1 message "&cX3 &ax< z< &ee>s &31" if {CourbeSk::EndX} < {CourbeSk::StartX}: set {CourbeSk::SigneX} to -1 message "&cX4 &ax< z< &ee<s &3-1" if {CourbeSk::StartX} > 0: if {CourbeSk::EndX} < 0: if {CourbeSk::EndX} > {CourbeSk::StartX}: set {CourbeSk::SigneX} to 1 message "&cX5 &ax> z< &ee>s &31" if {CourbeSk::EndX} < {CourbeSk::StartX}: set {CourbeSk::SigneX} to -1 message "&cX6 &ax> z< &ee<s &3-1" if {CourbeSk::StartX} < 0: if {CourbeSk::EndX} > 0: if {CourbeSk::EndX} > {CourbeSk::StartX}: set {CourbeSk::SigneX} to 1 message "&cX7 &ax< z> &ee>s &31" if {CourbeSk::EndX} < {CourbeSk::StartX}: set {CourbeSk::SigneX} to -1 message "&cX8 &ax< z> &ee<s &3-1" if {CourbeSk::StartZ} > 0: if {CourbeSk::EndZ} > 0: if {CourbeSk::EndZ} > {CourbeSk::StartZ}: set {CourbeSk::SigneZ} to 1 message "&cZ1 &ax> z> &ee>s &31" if {CourbeSk::EndZ} < {CourbeSk::StartZ}: set {CourbeSk::SigneZ} to -1 message "&cZ2 &ax> z> &ee<s &3-1" if {CourbeSk::StartZ} < 0: if {CourbeSk::EndZ} < 0: if {CourbeSk::EndZ} > {CourbeSk::StartZ}: set {CourbeSk::SigneZ} to 1 message "&cZ3 &ax< z< &ee>s &31" if {CourbeSk::EndZ} < {CourbeSk::StartZ}: set {CourbeSk::SigneZ} to -1 message "&cZ4 &ax< z< &ee>s &3-1" if {CourbeSk::StartZ} > 0: if {CourbeSk::EndZ} < 0: if {CourbeSk::EndZ} > {CourbeSk::StartZ}: set {CourbeSk::SigneZ} to 1 message "&cZ5 &ax> z< &ee>s &31" if {CourbeSk::EndZ} < {CourbeSk::StartZ}: set {CourbeSk::SigneZ} to -1 message "&cZ6 &ax> z> &ee<s &3-1" if {CourbeSk::StartZ} < 0: if {CourbeSk::EndZ} > 0: if {CourbeSk::EndZ} > {CourbeSk::StartZ}: set {CourbeSk::SigneZ} to 1 message "&cZ7 &ax< z> &ee>s &31" if {CourbeSk::EndZ} < {CourbeSk::StartZ}: set {CourbeSk::SigneZ} to -1 message "&cZ8 &ax< z> &ee<s &3-1" L'algo ci-dessus ne sert qu'a savoir la direction d'un vecteur entre deux points. Il peut donc vous servir pour autre chose. Notez que cet algo ne fonctionne que pour des vecteurs horizontaux Quand j'envoie des messages type "Z8 x< z> e<s -1" c'est: - Z8: Huitième paramètres de direction - x< : X négatif - z> : Z positif - e<s : E représente l'arrivée et S le départ. Dans ce cas là le Z-Arrivée est plus petit que Z-Départ - -1 : Représente le signe Grace aux 8 possibilités de X et Z on peut savoir parfaitement le sens d'un vecteurs dans un monde minecraft défini par deux points. Bon, on a fait la moitié ! Le plus difficile reste à faire ^^. On va avoir besoin de calculer les distances entre chaque blocs de la courbe. A noter que la valeur "coefficient réducteur de distance" que je vais citer ne fonctionne que pour cette équation et qu'elle a été trouvée par du bidouillage ! # (P1) /// Définition des distances (P1) set {CourbeSk::CompX} to difference between {CourbeSk::StartX} and {CourbeSk::EndX} set {CourbeSk::CompZ} to difference between {CourbeSk::StartZ} and {CourbeSk::EndZ} # (P2) /// Mise du signe + ou - sur les distances (qui sera reset plus tard) (ce passage est inutile xD) (P2) set {CourbeSk::FianlCompX} to {CourbeSk::SigneX}*{CourbeSk::CompX} set {CourbeSk::FianlCompZ} to {CourbeSk::SigneZ}*{CourbeSk::CompZ} message "&a%{CourbeSk::CompX}% - %{CourbeSk::CompZ}% &7| &6%{CourbeSk::FianlCompX}% - %{CourbeSk::FianlCompZ}%" # (P3) /// Tracage de la courbe (P3) set {_loc} to {CourbeSk::PosStart} set {_y} to 0 set {_x} to 0 # (P4) /// Défintion du coef de distance réducteur (+ la distance sera grande, moins ça sera précis) (P4) set {CourbeSk::LocStartX} to abs({CourbeSk::FianlCompX}/34) set {CourbeSk::LocStartZ} to abs({CourbeSk::FianlCompZ}/34) message "&5%{CourbeSk::LocStartX}% &7 &5%{CourbeSk::LocStartZ}%" (P1): Déjà expliqué, on va prendre la distance des deux points (départ et arrivée) que l'on va diviser plus tard pour avoir une distance relative pour chaque blocs de la courbe. (P2): On défini le signe pour savoir dans quelle direction on va suivant les axes X et Z du monde minecraft. Cette valeur est transmise par l'algorithme de détection de direction. Ce passage est aussi inutile car les signes vont être enlevés par la conversion par valeur absolue (P3): Ce sont les variables temporaires qui vont nous servir pour tracer la courbe (P4): On fait une division pour trouver la valeur qui représentera la distances des blocs en X et Z. 34 est la valeur la plus précise que j'ai trouvé pour être le plus précis. Si vous réduisez cette valeur, la courbe dépassera de plus loin que le point d'arrivé et si vous mettez une trop grande valeur, la courbe s’arrêtera avant le point d'arrivée. On a donc un point d'arrivée qui ne sert que de repère d'arrivée de la courbe. En bidouillant cette valeur, vous pourrez potentiellement tomber sur le point d'arriver. Elle est comprise entre 36 et 33 pour l'équation -0.85x²+100. Une fois ça fait, on attaque l'algo de traçage: loop 300 times: add 1 to {_x} add 0.25 to {_y} set {_result} to ((-0.85)*({_y}*{_y}))+100 if {_result} < 1: if {_result} > -300: #Moitié -100 #message "&7f(&e%{_y}%&7)=&a%{_result}%" # /// Message d'affichage de f(x) = 0.85x²+100 if {_y} <= 30: #Moitée 14.75 # \/ Coeficient de hauteur #(PE) set {_loc} to location {_loc}'s x-coordinate+({CourbeSk::SigneX}*{CourbeSk::LocStartX}), {_loc}'s y-coordinate+({_result}/7)+14, {_loc}'s z-coordinate+({CourbeSk::SigneZ}*{CourbeSk::LocStartZ}) set block at {_loc} to redstone block #message "&7f(&e%{_y}%&7) = &a%{_result}%" # /// Message d'affichage de f(x) = 0.85x²+100 wait 1 tick wait 1 tick Ça c'est notre algo pour tracer la courbe. Pour commencer on loop 300 fois pour avoir une plage de valeur y la plus grande sans trop abuser non plus. Pour une assez bonne précision, on met un pas pour la suite {_y} de 0.25 c'est à dire que que loop de cette variable, on ajouter 0,25. On défini {_result} comme le résultat de l'équation de la courbe à la position de {_y} quand {_x} = nloopé. On check si notre valeur est inférieur à 1 puis supérieur à -200 (c'est environ 32 blocs de check ce qui correspond presque au même Y de départ qu'il y aura à l'arrivée) ou -300 pour être large et aller plus bas que le Y de départ de la courbe. On regarde si {_y} ne dépasse pas une limite de 30 (sachant que 30 représente 120 blocs de checks avec un pas de 0.25) (PE) Si on est bien dans toute les conditions réunies, on pose un bloc en X et Z avec les positions défini précédemment puis on place en Y avec la valeur de notre équation + un coefficient de hauteur (surélever les blocs sinon la courbe ce trace par le bas). {CourbeSk::SigneX} et {CourbeSk::SigneZ} sont soit égale 1 ou -1. C'est le coefficient multiplicateur qui sert à donner le signe du coup il a pour valeur 1 ou -1. Voila, on va donc avoir une jolie courbe comme ceci: J’espère que ce tuto va pouvoir vous aider dans des algorithme complexes ou même basique. Perso je vais m'en servir pour AFR-ICBM (skript à venir très prochainement !) Dans tout les cas n'hésitez pas à le partager et à en faire une bonne grosse utilisation pour prouver à vos potes que Skript c'est pas de la merde si on le met entre de bonne mains . J'ai eu pas mal de mal à le faire même si il m'a demandé qu'une soirée pour le réaliser. J'y ai pensé des heures carrés à le faire et le voila enfin ! J’espère surtout vous avoir débloqué sur des trucs ! Je vais le poster comme ressource sur le forum ^^ Bonne continuation à vous tous !
  32. 6 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
  33. 6 points
    /. INTRODUCTION Bonjour, J'ai remarqué depuis déjà un certain temps que les joueurs on tendance à utiliser SkQuery pour les GUI bien que celui ci possède de nombreux bug, est moins pratique, offre moins de fonctionnalités et que beaucoup de personnes dans la catégorie "aide" poussent les joueurs à utiliser TuSke. J'imagine que c'est probablement du au faire que en cherchant "GUI Skript" les premiers liens montrent le fonctionnement des GUI avec SkQuery (de même avec 95% des vidéos d'apprentissages de GUI fr). J'ai donc décidé d'essayer de changer cela en créant ce poste dans le but de vous montrer le Sacro-Saint-Graal des GUI Skript, j'ai nommé TuSKe. J'ajouterai aussi un sondage afin de savoir avec quoi vous avez appris à utiliser les GUI afin de connaître pourquoi tant de personnes on commencées en utilisant SkQuery. P.S : Je sais que psyziik a déjà crée un poste semblable mais je compte rendre celui ci plus complet ou en tout cas montrer clairement la différence entre les deux plutôt que faire un tuto. ^^ IMPORTANT Il est très important de savoir que pour Gui on peut utiliser SkQuery sans TuSKe mais pas TuSKe sans SkQuery. I. L'OUVERTURE D'INVENTAIRE Dans SkQuery : open chest with 3 row named "&8&l[&6&lTEST&8&l]" to player wait 1 tick Dans Tuske : open chest with 3 row named "&8&l[&6&lTEST&8&l]" to player Comme vous pouvez le voir, pas grand chose ne change et ce n'est certainement pas ça qui va vous faire passez sur TuSKe mais bon c'est déjà un problème car il arrive souvent d'oublier le wait 1 tick pour SkQuery II. L'AJOUT D'ITEMS Dans SkQuery : format slot 0 of player with 1 dirt named "test" with lore "c'est un lore..." to be unstealable Dans Tuske : make a gui slot 0 of player with 1 dirt named "test" with lore "c'est un lore..." Comme vous pouvez le voir les deux non pas vraiment de différence mais font là même chose, toutefois voici une grosse différence : Imaginons que l'on veuille afficher des item qui fassent exactement la même chose dans 5 slots différent : Dans SkQuery : [spoiler=Code SkQuery] format slot 0 of player with 1 dirt named "test" with lore "c'est un lore..." to be unstealable format slot 1 of player with 1 dirt named "test" with lore "c'est un lore..." to be unstealable format slot 2 of player with 1 dirt named "test" with lore "c'est un lore..." to be unstealable format slot 3 of player with 1 dirt named "test" with lore "c'est un lore..." to be unstealable format slot 4 of player with 1 dirt named "test" with lore "c'est un lore..." to be unstealable Dans TuSke : [spoiler=Code TuSKe] make a gui slot 0, 1, 2, 3, 4 and 5 of player with 1 dirt named "test" with lore "c'est un lore..." ça peut vous sembler pas grand chose mais quand on fait ça avec une vingtaine d'items, utiliser SkQuery rend votre code très désagréable et moins performant. III. EXÉCUTER DES EFFETS Sachez avant tout que toute les choses faisables dans SkQuery sont faisables dans TuSKe (close, close then run, etc..) mais pas le contraire : Par exemple pour exécuter un loop ou exécuter plusieurs effet avec SkQuery on est obligé de passer par une fonction ou "on inventory click:" ce qui non seulement est moins optimisé, moins pratique (imaginez vous faire 20 fonction avec un gui où il y a 20 items qui font 20 choses différentes :/) et moins compréhensible pour vous et toutes autre personnes qui essayerait de lire votre script. [spoiler=Code SkQuery] on right click on stone: open chest with 3 row named "&8&l[&6&lTEST&8&l]" to player format slot 0 of player with 1 diamond sword named "a" to close then run [a(player)] function a(p: player): loop 5 times: message "test" to {_p} Alors que Tuske: [spoiler=Code TuSKe] on right click on stone: open chest with 3 row named "&8&l[&6&lTEST&8&l]" to player make a gui slot 0 of player with 1 diamond sword named "a" to run: close player's inventory loop 5 times: message "test" to player IV. LES TYPES DE CLIQUES Pour SkQuery on est obligé de passer par le "on inventory click" [spoiler=Code SkQuery] on right click on stone: open virtual chest inventory with size 4 with name "&6&lTest" to player format slot 0 of player with 1 dirt named "test" with lore "c'est un lore..." to be unstealable on inventory click: if inventory name of player's current inventory is "&6&lTest": cancel event if clicked slot is 0: if clicked type is right mouse button: message "test" to player Pour Tuske par contre non seulement on peut passer directement par le to run: [spoiler=Code TuSKe] on right click on stone: open virtual chest inventory with size 4 with name "&6&lTest" to player make a gui slot 0 of player with 1 dirt named "test" with lore "c'est un lore..." to run: if clicked type is equal to left mouse button: message "a" to player Mais on peut aussi intégrer la condition dans le "make a gui": [spoiler=Code TuSKe] on right click on stone: open virtual chest inventory with size 4 with name "&6&lTest" to player make a gui slot 0 of player with 1 dirt to close then run player command "/gm 1" using left click V. D'AUTRES FONCTIONNALITÉS Voici quelque petit truc en plus dans Tuske: Supprimer les items d'un slot: unformat the gui slot %numbers% of %players% De tout les slots: unformat all gui slots of %players% Condition pour savoir si le joueur a un GUI: %player% has [a] gui Et condition pour savoir si un slot fait partit d'un GUI: slot %numbers% of %players% is a gui Le as op: make a gui slot 0 of player with 1 dirt to close then run player command "/gm 1" as op VI. LES LOOPS Sur SkQuery ce code vous affichera 10 dans tout les cas: [spoiler=Code SkQuery] on right click on stone: open virtual chest inventory with size 4 with name "&6&lTest" to player set {_s} to 0 loop 10 times: format slot {_s} of player with 1 dirt to run [message "%{_s}%"] add 1 to {_s} Alors que le premier aurait du donner 0, le 2eme 1, etc... Mais pour Tuske: [spoiler=Code TuSKe] on right click on stone: open virtual chest inventory with size 4 with name "&6&lTest" to player set {_s} to 0 loop 10 times: make a gui slot {_s} of player with 1 dirt to run: message "%{_s}%" add 1 to {_s} Tout marche ^^ et croyerz moi les loops peuvent être vraiment utile dans les GUI quand on sait les utiliser. VII. LES GUI AVANCES Bon sachez que pour TuSke ce que je vous ais présenté est la partie dite "simple", il existe des GUI bien plus complexes. Ceux-ci vous permettent par exemple de créer un gui définit par une ID puis ouvrir l'inventaire de cette ID, de connaitre le type d'action du joueur(ex: swap with cursor, pickup half et bien d'autres), de connaitre le type de slot (armor, fuel) et bien plus ^^ . Mais surtout ces GUI sont vraiment vraiment biens plus rapident et prennent moins de ressources :D. Voici le tuto officielle en Anglais. VII. LES BUGS Il faut savoir que SkQuery est connu comme possédant des bugs dans ses GUI et que donc dans de gros GUI il n'est pas si rare d'avoir des résultats inexplicables. Tel que : - loop avec des valeurs qui changent qui ne marche pas - si on met unstelable à un slot dans le GUI, le slot situé à la même position dans l'inventaire du joueur aurra le même effet (pareil avec les to run command) - bug visuel quand on spamclick / dans certain cas il est aussi arrivé de vraiment recevoir l'item (en créa en spamcliquant) ------------------------------------------------------------------------------------- Voilà, c'est la fin de ce poste que je tenais beaucoup à faire ^^ Si vous avez aimé n'hésitez pas à donner un like. Si vous avez des arguments soutenant ou contre ce poste n'hésitez pas à le dire (en restant poli svp) Tuske : [Contenu masqué] Documentation GUI TuSke : [Contenu masqué] Merci à psyziik pour son Tuto qui m'a été très utile pour apprendre à utiliser TuSKe : [Contenu masqué] P.S : Je sais parfaitement que ce post comportement de très nombreuses fautes mais sachez que cela n'est clairement pas une raison de juger négativement ce poste. EDIT: J'ai appris qu'il existais déjà un poste semblable mais bon impossible de le trouver sur Google. Mais bon voici ce qu'il a écrit, c'est un peu plus complet que mon poste : [Contenu masqué]
  34. 6 points
    Skript-YAML : le bon YML Me voici à nouveau pour un autre tutoriel ! Et vous savez parfaitement que quand je fais un tutoriel, c'est que quelque chose me tient à coeur. Sans plus tarder, commençons. Si vous ne savez pas ce qu'est le YML, faites une recherche, puis lisez ce tuto. Le YML avant : Le YML est le format de configuration officiel de Bukkit. Skript permettant de faire des pseudo-plugins, il est logique qu'on veuille répliquer le fonctionnement d'un vrai plugin, d'où l'idée du YML. Et le YML dans Skript alors ? Ben, ça puait. Toutes les syntaxes qui offraient la fonctionnalité du YML avaient le même défaut : elles lisaient et interprétaient le fichier en entier à chaque fois. C'est comme si, pour trouver une réplique dans une pièce de théâtre, vous deviez lire la pièce en entier à chaque fois avant de trouver votre réplique (RPZ la seconde). Pas optimisé DU TOUT. Ah, et si vous voulez une preuve, voici un test de performance réalisé par Rezz : Pour les stats : C'est 53 fois plus lent de changer une valeur YML qu'une variable normale et 28 fois plus lent d'en obtenir (get). Changer une valeur YML prend 25,5 ms contre 0.472 ms pour une variable normale. Ça représente en peu plus de la moitié du temps qu'une balle de baseball reste en contact avec la batte (merci WolframAlpha). Obtenir une variable YML prend 17,3 ms contre 0,616 ms pour une variable normale Je vous laisse vérifier ces chiffres par vous-mêmes. Gardez en tête que ce sont des moyennes, et qu'il y a des chances qu'elles soient légèrement éloignées de la réalité. Au passage, les 4 addons (oui, quatre) qui ont cette fonctionnalité sont WildSkript, skQuery, Skellett, skUtilities. Déjà que j'aime pas WildSkript en général, alors si vous utilisez le YML de WildSkript, je vais vous réduire en salade de fruits. Bon, comme vous le voyez, j'ai quelques raisons pour dire que le YML tel que vous le connaissez, c'est de la bonne grosse daube. Bon, vous vous doutez bien que je ne vais pas m'arrêter là, donc continuons. Le YML maintenant : NB : quand je dis "maintenant", je veux dire "ce à quoi c'est censé ressembler maintenant". Récemment, l'addon skript-yaml, développé par Sashie, développeur de skDragon est sorti.... Putain que c'est mieux. Mais bon, il y a un peu d'explications nécessaires pour comprendre pourquoi c'est mieux, et surtout, comment l'utiliser. Le fonctionnement : Avant, on chargeait tout le fichier à chaque fois qu'on essayait de faire quoi que ce soit avec le fichier. Maintenant, ça fonctionne de la façon suivante : On charge le fichier en mémoire. Ça veut dire qu'on ne lit et traverse le fichier qu'une fois. Ensuite, les valeurs récupérées sont stockées quelque part dans la mémoire, prêtes à être utilisées. Là, on fait ce qu'on veut avec nos valeurs. Mais il est crucial de noter que on ne modifie RIEN sur le fichier. Une fois qu'on a fini d'éditer nos valeurs, il n'y a plus qu'à sauvegarder le YML. C'est le seul moment où on modifie le fichier. Bon, c'est bien gentil de savoir le principe, mais c'est encore mieux de pouvoir l'utiliser concrètement, non ? A) L'utilisation : 1. Charger le fichier YML : [re]load [non[(-| )]relative] [y[a]ml] %string% [as %-string%] Cet effet charge un fichier YML en mémoire. Le premier "%string%" est le chemin de votre fichier YML qui va être chargé en mémoire, c'est celui qui vous utiliseriez avec n'importe quelle autre syntaxe YML. Si vous utilisez "[non[(-| )]relative]", alors le chemin commencera à la racine de votre disque dur au lieu du dossier de votre serveur. Le second "%string%", optionnel, représente l'identifiant donné à ce fichier, utilisé dans les syntaxes suivantes. Vous vous doutez bien qu'on va pas taper tout le chemin à chaque fois, ce serait totalement absurde et ce serait signe d'une mauvaise fonctionnalité, non ? Vous voyez où je veux en venir, hein ? Si ce paramètre est omis, alors on prendra le nom du fichier sans ".yml". Donc pour "config.yml", on gardera "config" comme nom. #Racine #Si serveur est sur le disque D:/ (pour Windows), alors la syntaxe ressemblerait à ceci load non-relative yaml "RootFolder/MyAwesomePlugin/config.yml" #Vous pouvez aussi spécifier le disque vous-mêmes load non-relative yaml "C:/RootFolder/MyAwesomePlugin/config.yml" #Si vous êtes vraiment borné et que vous voulez utiliser le chemin à chaque fois, voici comment load yaml "plugins/MyAwesomePlugin/config.yml" as "plugins/MyAwesomePlugin/config.yml" set yaml value "version" from "plugins/MyAwesomePlugin/config.yml" to 1.0 broadcast "%yaml value ""version"" from ""plugins/MyAwesomePlugin/config.yml""%" # Ces deux effets produisent un même identifiant : "config" load yaml "plugins/MyAwesomePlugin/config.yml" load yaml "plugins/MyAwesomePlugin/config.yml" as "config" 2. Modifier les valeurs : [[skript-]y[a]ml] (1¦value|2¦(node|path)[s]|3¦(node|path)[s with] keys|4¦list) %string% (of|in|from) %string% [without string checks] Comme vous pouvez la voir, cette expression ne diffère pas trop des anciennes. Pour éviter tout risque de conflit, je suggère d'utiliser "skript-yaml" au début. Le premier "%string%" simplement votre valeur telle que vous l'utiliseriez avec un YML standard. Pas de changements de ce point de vue-là. Le second est l'identifiant du YML chargé en mémoire. Attention, ce n'est pas le chemin du fichier. En reprenant l'exemple de la syntaxe précédente, on mettrait simplement "config". Enfin, si vous ajoutez "without string checks", l'expression retournera un texte quoi qu'il arrive, sans essayer de le convertir en nombre ou en booléen. Ça peut rendre votre code un tout petit peu plus rapide. Exemple : set skript-yaml value "test1.test2" from "config" to "test3" set skript-yaml list "list.name" from "config" to {_list::*} set {_test} to skript-yaml value "test1.test2" from "config" broadcast "%{_test}%" 3. Sauvegarder votre fichier : save [y[a]ml] %string% Permet de sauvegarder le YML spécifié dans son fichier correspondant. C'est le seul moment où vous modifiez le fichier. Exemple : save yaml "config" B) Autres fonctionnalités: Vous vous en doutez sûrement, mais skript-yaml ne se limite pas à ces trois syntaxes. Les syntaxes suivantes ont leur utilité, mais il est probable que vous ne les utiliserez que dans certains cas. Syntaxe : unload [y[a]ml] %string% Exemple : unload yaml "config" Permet tout simplement de supprimer un YML de la mémoire. À n'utiliser que si vous voulez supprimer les changements non sauvegardés. Syntaxe : [(the|all (of the|the))] [currently] loaded y[a]ml [files] Exemple : set {_list::*} to the currently loaded yaml files broadcast "%{_list::*}%" Retourne la liste de tous les configurations YML chargées par "load yaml" Syntaxe : [all] [[skript-]y[a]ml] (node|path)[s] (of|in|from) %string% Exemple : set yaml value "test1.test2" from "config" to "test3" set yaml value "boop.beep" from "config" to "bop" set {_list::*} to all yaml nodes of "config" broadcast "%{_list::*}%" Retourne tous les noms des entrées d'une config YML. L'exemple au-dessus enverra "test1, test1.test2, boop and boop.beep" dans le chat. Syntaxe : y[a]ml[s] %strings% (is|are) loaded y[a]ml[s] %strings% ((are|is) not|(is|are)n[']t) loaded Même pas besoin d'exemple pour celui-là, retourne vrai si la config YML spécifée a été chargée en mémoire. Syntaxe : [skript-]y[a]ml [(node|path)[s]] %strings% (of|in|from) %string% has value [skript-]y[a]ml [(node|path)[s]] %strings% (of|in|from) %string% does(n't| not) have value Exemple : set skript-yaml value "test.test" from "config" to "test" yaml path "test.test" in "config" has value: # toujours vrai broadcast "has value" Retourne vrai si le chemin spécifié existe/a une valeur. Syntaxe : [the] comment[s] (of|from) [y[a]ml] node[s] %strings% (of|in|from) %string% [the] (comment[s] (at|on) [the] top of |header (of|from)) %string% Exemple : set the comments of yaml node "test" from "config" to "First line" and "Second line" delete the comments of yaml node "test" from "config" set {_header::*} to "First line" and "Second line" set the comments at the top of "config" to {_header::*} delete the comments at the top of "config" set the header of "config" to "First line" and "Second line" delete the header of "config" set the header of "config" to {_header::*} Obtient, édite ou supprime les commentaires ou le header d'une config YML : Les headers ne contiennent pas '#' donc ajoutez-les si vous le voulez Les commentaires doivent se trouver à la racine. Exemple : 'root', et non 'root.something' On peut passer plusieurs valeurs aux commentaires et headers Cette expression ne modifie pas le fichier (ndlr : c'est une traduction) En espérant que ça vous ait aidé, je vous dis à plus tard. Je dirais même plus, à l'année prochaine ! HAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAAAAAAAA !!!! ...elle est nulle je sais. ...vous vous y attendiez hein ? ...c'est bien ce que je pensais. ... ...Qu'est-ce que vous foutez à lire ça ? (c'est ironique je vous rassure)
  35. 6 points
    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
  36. 6 points
    Bonjour, aujourd'hui je vais vous apprendre à faire des barres de progression facilement avec un tout petit peu de mathématique. L'utilité d'une barre de progression ? Montrer la progression de tel ou tel objectif sur son maximum Exemple d'utilisation : Barre d’expérience, Barre de chargement [ATTACH=full]3453[/ATTACH] Donc pour créer un barre de progression il va nous falloir 2 éléments indispensables: La valeur "actuelle" et la valeur maximum. Pour faire un exemple on va dire que j'ai un système d'augmentation de level avec un certain nombre d'xp que l'on gagne en tuant des mobs: Je vais avoir une variable {Xp.%player%} et {Level.%player%}. De plus je vais définir le nombre d'xp nécessaire pour augmenter de level : 80 ici. Pour créer ma barre de progression à partir de ces 3 éléments je vais devoir aussi définir l'échelle de ma barre par exemple 10,20,50,75,100.... on va prendre 20 ici. Donc pour comprendre le petit calcule mathématique: C'est simple on va calculer le pourcentage de la valeur actuelle sur la valeur max : set {_1} to ({Xp.%player%}/80) A partir de ce pourcentage on va calculer la valeur qu'il représente sur notre échelle Je m'explique : On va dire que j'ai 5 xp donc {Xp.%player%} = 5 Le calcule: "set {_1} to (5/80)" va donné "{_1} = environ 0.06" 0.06 veut dire que nous avons atteint 6% de l'objectif (80) On va rapporter cette progression 6% sur notre échelle 20 set {_1} to rounded down ({_1} * 20) Le calcule: "set {_1} to rounded down (0.06/20)" va donné "{_1} = environ 1.2" --> 1.2/20 Après avoir cette donnée il ne reste plus qu'a créer la barre: Il va falloir mettre 1 barre verte (1.2 arrondi) et 19 barres rouge set {_total} to "" loop {_1} times: ----> 1 set {_total} to "%{_total}%&a▋" ----> On ajoute une barre verte loop (20 - {_1}) times: ----> 20 - 1 = 19 set {_total} to "%{_total}%&c▋" ----> On ajoute une barre rouge message "&eVotre progression &7[%{_total}%&7] Résultat pour {Xp.%player%} = 5: [ATTACH=full]3455[/ATTACH] Résultat pour {Xp.%player%} = 57: [ATTACH=full]3456[/ATTACH] Code complet avec des options pour plus de facilité : options: Max: 100 Echelle: 20 Logo: ▋ valeur: {Xp.%player%} command /barre: trigger: set {_1} to ({@valeur}/{@Max}) set {_1} to rounded down ({_1} * {@Echelle}) set {_total} to "" loop {_1} times: set {_total} to "%{_total}%&a{@Logo}" loop ({@Echelle} - {_1}) times: set {_total} to "%{_total}%&c{@Logo}" message "&6>> &a{@valeur}&e/&a{@Max} &4- &7[%{_total}%&7]"
  37. 5 points
    Bonjour, Je suis donc nouveau sur Skript-mc, j'ai un certain niveau et c'est pour ça que je vais vous faire partager une de mes connaissances qui est assez recherché. Comment pourrait-on créer un fichier .yml ? Tout d'abord, il faut savoir skript tout seul ne permet pas l'édition de fichier .yml C'est pour ça que nous allons utiliser WildSkript. WildSkript permet de : créer/éditer/lire des fichiers. On place alors les expressions qui permettent de créer le fichier la première fois, au démarrage. On vérifie en premier si un dossier du nom de votre skript ou autre est créé. S'il ne l'est pas on le créer. On vérifie ensuite si un fichier config.yml ou autre est créé. S'il ne l'est pas on le créer. ( Ne vous inquiétez pas je vous expliquerais plus en détail après la fin des explications texte. ) Nous créons donc ces fameuses lignes du code du .yml juste en dessous. Ensuite nous établissons des variables qui sont les options que vous avez définis dans votre fichier. Et voilà. Le code donne quoi maintenant ? Immaginons-nous, on voudrait par exemple configurer un message : # _______ _ _ _ # |__ __| | | (_) | | # | |_ _| |_ ___ _ __ _ ___| | # | | | | | __/ _ \| '__| |/ _ \ | # | | |_| | || (_) | | | | __/ | # |_|\__,_|\__\___/|_| |_|\___|_| #========================================================================================# on load: if folder "plugins/message" doesn't exists: #Vérification du dossier send "&e&lLe dossier plugins/message n'existe pas ! " to console send "&aCréation du dossier en cours." to console create folder "plugins/message" #Création du dossier send "&2Dossier créée" to console if file "plugins/message/config.yml" doesn't exists: #Vérification du fichier send "&e&lLe fichier n'existe pas !" to console send "&aCréation de : config.yml.." to console create file "plugins/message/config.yml" #Création du fichier wf "Message: Bonjour je suis kwizzy !" to "plugins/message/config.yml" #wf ( qui vient de wildskript ) permet d'éditer le fichier wait 1 tick set {message} to value "Message" get of "plugins/message/config.yml" #Ici on dit que la variable {message} correspond a Message dans le fichier précédant. else: #Dans tous les autres cas il faut set la(les) variable set {message} to value "Message" get of "plugins/message/config.yml" command /message: trigger: send "%{message}%" /!\ Pour l'instant vous ne pouvez pas mettre de variables dans le fichier /!\
  38. 5 points
    Bonjour, aujourd'hui je vais faire un petit poste sur le secret des addons. Bien qu'on est beaucoup d'addon à notre disposition, vous êtes plusieurs à ne pas chercher ou vous renseigner dessus comme moi. Donc je vais être gentils et tout vous dire et conseiller en 1 poste ! Le poste sera mis à jour de temps en temps pour vous tenir au courant de tout ! Commençons ! /!\ Umbaska et RandomSk sont des addons à bannir ! Ils ne sont pas fonctionnel du tout ! Donc à moins que vous soyez un pro de umbaska et RandomSk et que vous arrivez à les remettres sur pied, restez en dehors de leur chemin, ca vaut mieux pour tout le monde, croyez moi /!\ On peut commencer je pense (je rappelle que les addons ont des droits d'auteurs, je vous invite donc à aller découvrir de nouveaux addon au lien suivant : [Contenu masqué])
  39. 5 points
    Voila je partage un skript ou il y a 12 couleurs d'une même particules pour vous !! Un screen: J’aimerais juste que l'on me cite si vous le republiez du genre:
  40. 5 points
    Bonjour bonsoir chers lecteurs ! Il y a pas longtemps, dans la quête d'optimiser mes skript, j'ai cherché comment créer un fichier .csv custom afin d'y mettre mes variables. Qu'est ce qu'un fichier .csv ? Vos variables en skript ne se stockent pas seules, et, afin de les garder en mémoire, skript utilise un fichier .csv, qui est un fichier de type tableur. Il se trouve dans le votre plugins/Skript et vous pouvez même l'ouvrir par vous même et y voir toutes vos variables. Les intérêts de faire un custom .csv ? Il peut y avoir plusieurs choses qui poussent à créer un fichier un de variable personnalisé. Cela peut être par soucis d'optimisation d'un skript, ou pour mieux se retrouver. Quelques informations Attention, avant de commencer, il faut comprendre que si vous faites un skript avec un .csv personnalisé, les autres joueurs ne pourront pas faire fonctionner le skript. Les customs .csv ne sont qu'en local et non pas à partager. Ou bien trouver une manière de bypass cela (c'est possible). Création et configuration Premièrement, ouvrez le fichier "config.sk" situé dans le dossier plugins/Skript. C'est ici que l'on peut configurer notre csv. Ensuite, à la fin du fichier, mais avant le "version: [votre version skript]", rajoutez le code suivant : NOM_A_CHANGER: type: CSV pattern: monitor changes: monitor interval: file: ./plugins/Skript/ backup interval: Désormais, regardons cela. En premier lieu, changez le "NOM_A_CHANGER" par le nom que vous aller donner à votre base de données. Moi je vais l’appeler "TutorielSK". Le nom ne doit évidemment pas contenir d'espaces ou de caractères spéciaux. "type:" définit le type de la base de donnée. On va laisser CSV car le reste touche au MySQL, ce qui n'est notre sujet aujourd'hui. type: CSV "pattern:" définit ce qui va se trouver devant chaque variable qui iront dans votre csv. Toutes les variables que vous voulez voir dedans devra commencer par ce pattern. Ecrivez-le et rajoutez un .* coller à la fin, qui signifie que tout est accepté après ce pattern. Moi je vais mettre "tuto_.*" pattern: tuto_.* "monitor changes:" et "monitor interval:" définit si vos variables doivent être vérifiées pour les sauvegardées en cas de changement à un certain intervalle. Pour activer cela, il suffit de mettre "true" à "monitor changes:" et de mettre votre intervalle en dessous, sous la forme [nombre] [seconds|minutes|heures] Moi je ne veux pas de cela pour éviter les lags et je vais laisser en false (j'ai mis un intervalle mais c'est juste en exemple, en vérité il n'est pas pris en compte du tout) monitor changes: false monitor interval: 20 seconds "file:" définit le chemin d'accès du fichier. Il vous suffit de rajouter le nom du fichier voulu suivi de .csv après le chemin d'accès déjà donné dans le code plus haut. file: ./plugins/Skript/tutorielsk.csv enfin, "backup interval" définit l'intervalle entre les backups du fichier. Pour ma part je vais laisser "2 hours" Configuration terminée ! TutorielSK: type: CSV pattern: tuto_.* monitor changes: false monitor interval: 20 seconds file: ./plugins/Skript/tutorielsk.csv backup interval: 2 hours L'utilisation (Evidemment il faut reload le serveur à la première utilisation) Pour utiliser votre nouveau csv tout beau tout chaud, il faut simplement déclarer vos variables avec le pattern choisis. Par exemple moi mon pattern est "tuto_" (le .* n'est pas pris en compte attention!), donc je définirai la variable par un set {tuto_.var1} to "Salut ça va !" Et là magie, au prochain sk reload votre variable est bien sauvegardée dans le bon fichier ! J'espère que ce petit tutoriel vous aura plus, n'hésitez pas à donner votre avis ou me demander de l'aide, Polymeth.
  41. 5 points
    Bonjours , Bonsoirs, Je vais vous présentez mon premier tutoriel, Celui ci sera utile pour les commandes d'aide ou si vous souhaitez allez plus vite et sans fautes, ainsi qu'avoir un tchat cliquable. I - Les pré-requis : Il vous sera indispensable d'utilisé Skript et son adon skQuery ( lien en bas du tuto ) . Avoir un éditeur de texte skript ( notepad ++ , sublime texte 3 ..ect ) /!\Pour faire apparaitre dans le tchat les messages ci-dessous , la commande de base est /json II - Json Json nous permettra grâce a cet commande de pouvoir avoir plusieurs possibilité dans le tchat Les différente possibilité sont : (1)- Affiché un message dans le tchat (2)- Affiché un message dans le tchat avec une description si notre curseur est positionné dessus (3)- Affiché un message dans le tchat avec plusieur ligne de description si notre curseur est positionné dessus (4)- Affiché une suggestion de commande dans notre barre de tchat si l'on clique dessus ( avec description ) (5)- Executé une commande si l'on clique dessus ( avec description ) (6)- Affiché un texte cliquable pour transmettre vers une page internet ( avec description ) III - Les Skripts : Il faudra toujours commencer par ceci : command json: trigger: (1) : c'est le plus simple sa nous donnera ceci : command json: trigger: send json of "(1) Message afficher" to player (2) : On peut rajouter une petite description tous simplement comme sa : command json: trigger: send json of "(2) Message afficher avec description!" tooltip "Description" to player (3) : et on peut rajouter une petite ligne de description en dessous grâce à new line : command json: trigger: send json of "(3) Message afficher avec description!" tooltip "ligne 1 %new line%This is line 2 ème ligne" to player (4) : On vas passez au chose serieuse , la on a la suggestion en cliquant dessus : command json: trigger: send json of "(4)Message avec la suggestion si tu clic!" suggest "/msg %player% tien par exemple un message" to player Avec description : command json: trigger: send json of "(4)Message avec la suggestion si tu clic avec la description!" tooltip "Ici la description" suggest "/msg %player% tien par exemple un message" to player (5) : Celle-ci est pas si compliquer , sa vas juste lancer un commande déjà préparer : command json: trigger: send json of "(5)Message si on clic ta une commande de lancer!" run "/msg %player% Voila la commande" to player Avec description : command json: trigger: send json of "(5)Message si on clic ta une commande de lancer avec la description!" tooltip "Description" run "/msg %player% Voila la commande" to player (6) : Plus que c'est avec le lien : command json: trigger: send json of "(9)Message avec le lien!" tooltip "Lien vers skript-mc!" open "[Contenu masqué]" to player Maintenant vous savez tous sur les commandes json , a vous de réglez comme bon vous souhaites , comme par exemple au lieu de faire /json changé cet commande par help pour avoir un help cliquable . Code en entier avec chaque ligne et description : #Tutoriel produit fait par Tarradon #Commande pour executer les messages dans le tchat /json command json: trigger: #Message sur le tchat send json of "(1) Message afficher" to player #Message sur le tchat avec description send json of "(2) Message afficher avec description!" tooltip "Description" to player #Message sur le tchat avec plusieurs descriptions send json of "(3) Message afficher avec description!" tooltip "ligne 1 %new line%Voila la 2 ème ligne" to player #Suggestion dans la barre d'écriture send json of "(4)Message avec la suggestion si tu clic!" suggest "/msg %player% tien par exemple un message" to player #Suggestion dans la barre d'écriture avec suggestion send json of "(4)Message avec la suggestion si tu clic avec la description!" tooltip "Ici la description" suggest "/msg %player% tien par exemple un message" to player #Lancé une commande directement en cliquand send json of "(5)Message si on clic ta une commande de lancer!" run "/msg %player% Voila la commande" to player #Lancé une commande directement en cliquand avec suggestion send json of "(5)Message si on clic ta une commande de lancer avec la description!" tooltip "Description" run "/msg %player% Voila la commande" to player #Lancé un lien vers une page internet send json of "(9)Message avec le lien!" tooltip "Lien vers skript-mc!" open "[Contenu masqué]" to player Cordialement, Tarradon
  42. 5 points
    Le titre est plein de méchant mots, mais le but de ce cours est d'apprendre. Bonjour bonsoir chers Skripteurs, aujourd'hui nous allons attaquer la dernière partie des "bases", car après la lecture de celle-ci vous serez dans l'aptitude créer de petits Skript fonctionnels ! 1. LES VARIABLES Les variables sont des valeurs (textes ou nombres) sauvegardés dans l'ordinateur tant que le Skript tourne. Il n'y a pas besoin de les créer, vous pouvez directement les invoquer dans le code. Malgré tout, vous pouvez les enregistrer en haut du Skript. (et uniquement en haut). Variables: {variable.%player%} = true %player% sous-entends que la variable est true (vrai) pour le joueur uniquement. Pour la render globale, donc pour tous les joueurs la même valeur, il suffit d'enlever le player. Nous allons voir leur utilisation plus bas ! :) 2. LES OPTIONS Les options, c'est le même fonctionnement que les variables sauf que ce sont des valeurs qui ne se modifient pas et qui sont globales. Pour l'invoquer, il faut cette fois, en haut du Skript, obligatoirement la déclarer. Options: titre: [Titre] Précisons que les options ne s'utilisent que dans du texte. Pour envoyer un texte avec l'option, voici comment faire. send "{@titre}" Cette fois, pas de pourcentage ! :) 3. LES CONDITIONS Dieu, ce vilain mot ! Les conditions, c'est quoi ce truc ? Pour les plus incultes, ce sont les if. Vous ne comprenez pas ? Laissez ce schéma vous faire comprendre. Voilà, tous les codeurs, quelque soit le langage, passent par cela. Mais alors pourquoi je vous ai parler des Options et des Variables dans le même chapitre ? Car je mange les enfants nous allons les utiliser. J'ajoute également que les conditions ne s'utilisent pas en dehors des commandes et des events. Pour vous apprendre les conditions, quoi de mieux qu'une commande d'aide. command /test <text>: trigger: if arg 1 is "help": send "Voici la premiere page :D" Désormais, expliquons. If arg 1 is "help": invoque la condition qui signifie "si l'argument 1 est help alors:". Alors j'envoie le message "Voici la premiere page :D". Simpliste, non ? A noter que les ":" sont obligatoires, je le souligne, je le mets en gras. Faisons une seconde page d'aide. Je vous laisse experimenter un peu et je reviens ! ... Alors, vous avez trouvé ? Non ? Ne vous en faites pas, vous débutez. command /test <text>: trigger: if arg 1 is "help": send "Voici la premiere page :D" if arg 1 is "help2": send "Voici la deuxieme page :D" if arg 1 is empty: send "Il n'y a rien ici ! :[" Eh bien voilà. Je pense que vous aurez compris le "help2", mais je vais tout de même expliquer pour le empty. Les bons anglophones auront compris, cela veut dire "si l'argument 1 n'est rien". Si la personne ne met rien à la place de l'argument, cela enverra donc ça. Ah, ne sois pas pressé, et vois ce qui vient après. :) Pour conclure ce chapitre, j'ai pensé qu'un TP ne vous ferai pas de mal. A voir dans le prochain Skript School ! J'entends d'ici la sonnerie, je vous souhaite donc une très bonne journée, et je vous remercie de votre lecture. 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
  43. 5 points
    Mise à jour du 09/03/2016 Il est désormais obligatoire d’effectuer des recherches avant de poster une demande d'aide. Les contrevenants s'exposent à un avertissement ou un blâme en cas de récidive (CF Sanctions) Effectuer une recherche sur le forum Documentation skript française Il est obligatoire de préciser l'erreur que vous rencontrez: soit avec un screenshot ou on peut voir toutes les infos ou une copie complète de votre console (Dans un spoiler). Une attention particulière sera porté sur le respect que vous porterez aux membres qui vous aident et la rédaction de vos demandes ; la encore les sanctions tomberons si vous ne respectez pas le règlement. Ceux qui vous aident ne sont soumis à aucune obligation envers vous. Vous n'avez donc aucun droit de leur réclamer un code fonctionnel ou de les forcer à faire le travail à votre place. Si une personne vous donne un bout de code ou des pistes des recherches c'est a vous de creuser pour trouver la solution. Règles précédentes (toujours en vigueurs) Règle d'or : N'attendez pas que l'on vous ponde tout votre code juste parce que vous n'avez pas compris, si vous souhaitez un code plus que de l'aide direction Demande de skripts. Les titres : Les titres du type : "Ça marche pas aidez moi" ou mon "mon skript ne marche plus" sont prohibés vous devez donner des informations claires et précises c'est le but d'un titre. Le code : Utilisez la balise code (insérer code) pour coller les vos codes. Les codes trop long doivent êtres mis entre spoilers. Note : La coloration syntaxique pour Skript est le LUA. Sujets résolus : Les sujet résolus doivent comporter le tag Résolu dans le titre. Les sujets inactifs : À partir de maintenant, les sujets n'ayant eu aucune activité depuis 1 semaine seront supprimés et envoyés vers la section résolus. Et surtout remerciez les skripteurs qui vous ont aidés si vous voulez qu'ils recommencent dans le futur.
  44. 5 points
    La faire disparaitre c'est impossible en skript je pense ^^ Mais pour enlever la faim : on hunger meter change cancel event Qui se traduit par : Quand la barre de faim du joueur perd un "gigot": on annule Un petit j'aime serait sympas même si c'est extrêmement simple :p Met en résolut aussi si c'est le cas
  45. 5 points
    Pets par Voserv Présentation: Ayez des animaux de compagnie dans votre Hub grâce à ce skript !, ils vous suivent, et vous pouvez les appeller. De plus, ces animaux ne vous attaque pas, donc vous pouvez même avoir comme animal des monstres ! REQUIS: SkQuery Commandes: /spawnpet <pet> : Permet de faire apparaître votre animal /callpet : Téléporte votre animal vers vous /removepet: Supprime votre animal Liste des animaux disponibles: Rappel: /spawnpet <pet> pour invoquer votre animal -Creeper -Sheep -Pig -Chicken -Cow -Blaze -Wolf -Ocelot -Slime -Zombie -Skeleton -Bat (Buggé) -Spider Skript: Copiez-collez le skript ci-dessous et mettez-le dans votre FTP: [spoiler=Skript] command /spawnpet <text>: description: Permet d'invoquer un pet usage: /spawnpet <nom> trigger: argument 1 is "creeper": if {active.%player%.pet} is true: send "&eAnimal > &7Vous avez déja un animal !" stop spawn 1 creeper at the player set {active.%player%.pet} to true set name of spawned entity to "%name of player%" send "&eAnimal > &7Vous avez invoqué votre animal" add spawned entity to {pet.%player%.follow::*} while spawned entity exists: make spawned entity pathfind to player with speed 1 wait 1 tick argument 1 is "sheep": if {active.%player%.pet} is true: send "&eAnimal > &7Vous avez déja un animal !" stop spawn 1 sheep at the player set {active.%player%.pet} to true set name of spawned entity to "%name of player%" send "&eAnimal > &7Vous avez invoqué votre animal" add spawned entity to {pet.%player%.follow::*} while spawned entity exists: make spawned entity pathfind to player with speed 1 wait 1 tick argument 1 is "pig": if {active.%player%.pet} is true: send "&eAnimal > &7Vous avez déja un animal !" stop spawn 1 pig at the player set {active.%player%.pet} to true set name of spawned entity to "%name of player%" send "&eAnimal > &7Vous avez invoqué votre animal" add spawned entity to {pet.%player%.follow::*} while spawned entity exists: make spawned entity pathfind to player with speed 1 wait 1 tick argument 1 is "chicken": if {active.%player%.pet} is true: send "&eAnimal > &7Vous avez déja un animal !" stop spawn 1 chicken at the player set {active.%player%.pet} to true set name of spawned entity to "%name of player%" send "&eAnimal > &7Vous avez invoqué votre animal" add spawned entity to {pet.%player%.follow::*} while spawned entity exists: make spawned entity pathfind to player with speed 1 wait 1 tick argument 1 is "cow": if {active.%player%.pet} is true: send "&eAnimal > &7Vous avez déja un animal !" stop spawn 1 cow at the player set {active.%player%.pet} to true set name of spawned entity to "%name of player%" send "&eAnimal > &7Vous avez invoqué votre animal" add spawned entity to {pet.%player%.follow::*} while spawned entity exists: make spawned entity pathfind to player with speed 1 wait 1 tick argument 1 is "blaze": if {active.%player%.pet} is true: send "&eAnimal > &7Vous avez déja un animal !" stop spawn 1 blaze at the player set {active.%player%.pet} to true set name of spawned entity to "%name of player%" send "&eAnimal > &7Vous avez invoqué votre animal" add spawned entity to {pet.%player%.follow::*} while spawned entity exists: make spawned entity pathfind to player with speed 1 wait 1 tick argument 1 is "wolf": if {active.%player%.pet} is true: send "&eAnimal > &7Vous avez déja un animal !" stop spawn 1 wolf at the player set {active.%player%.pet} to true set name of spawned entity to "%name of player%" send "&eAnimal > &7Vous avez invoqué votre animal" add spawned entity to {pet.%player%.follow::*} while spawned entity exists: make spawned entity pathfind to player with speed 1 wait 1 tick argument 1 is "ocelot": if {active.%player%.pet} is true: send "&eAnimal > &7Vous avez déja un animal !" stop spawn 1 ocelot at the player set {active.%player%.pet} to true set name of spawned entity to "%name of player%" send "&eAnimal > &7Vous avez invoqué votre animal" add spawned entity to {pet.%player%.follow::*} while spawned entity exists: make spawned entity pathfind to player with speed 1 wait 1 tick argument 1 is "slime": if {active.%player%.pet} is true: send "&eAnimal > &7Vous avez déja un animal !" stop spawn 1 slime at the player set {active.%player%.pet} to true set name of spawned entity to "%name of player%" send "&eAnimal > &7Vous avez invoqué votre animal" add spawned entity to {pet.%player%.follow::*} while spawned entity exists: make spawned entity pathfind to player with speed 1 wait 1 tick argument 1 is "zombie": if {active.%player%.pet} is true: send "&eAnimal > &7Vous avez déja un animal !" stop spawn 1 zombie at the player set {active.%player%.pet} to true set name of spawned entity to "%name of player%" set helmet of the spawned entity to chain helmet send "&eAnimal > &7Vous avez invoqué votre animal" add spawned entity to {pet.%player%.follow::*} while spawned entity exists: make spawned entity pathfind to player with speed 1 wait 1 tick argument 1 is "skeleton": if {active.%player%.pet} is true: send "&eAnimal > &7Vous avez déja un animal !" stop spawn 1 skeleton at the player set {active.%player%.pet} to true set helmet of the spawned entity to chain helmet set name of spawned entity to "%name of player%" send "&eAnimal > &7Vous avez invoqué votre animal" add spawned entity to {pet.%player%.follow::*} while spawned entity exists: make spawned entity pathfind to player with speed 1 wait 1 tick argument 1 is "bat": spawn 1 bat at the player if {active.%player%.pet} is true: send "&eAnimal > &7Vous avez déja un animal !" stop set {active.%player%.pet} to true set helmet of the spawned entity to chain helmet set name of spawned entity to "%name of player%" send "&eAnimal > &7Vous avez invoqué votre animal" add spawned entity to {pet.%player%.follow::*} while spawned entity exists: make spawned entity pathfind to player with speed 1 wait 1 tick argument 1 is "spider": if {active.%player%.pet} is true: send "&eAnimal > &7Vous avez déja un animal !" stop spawn 1 spider at the player set {active.%player%.pet} to true set helmet of the spawned entity to chain helmet set name of spawned entity to "%name of player%" send "&eAnimal > &7Vous avez invoqué votre animal" add spawned entity to {pet.%player%.follow::*} while spawned entity exists: make spawned entity pathfind to player with speed 1 wait 1 tick command /callpet: trigger: loop {pet.%player%.follow::*}: teleport loop-value to location of player send "&eAnimal > &7Votre animal a été téléporté vers vous" command /removepet: trigger: if {active.%player%.pet} is true: loop {pet.%player%.follow::*}: kill loop-value set {active.%player%.pet} to false send "&eAnimal > &7Votre animal a été supprimé" clear {pet.%player%.follow::*} else: send "&eAnimal > &7Vous n'avez aucun animal" On Entity Target: loop all players: loop {pet.%loop-player%.follow::*}: if event-entity is loop-value: cancel event
  46. 5 points
    Petite vidéo d'explication sur les licences Creative commons pour vos codes. [MEDIA=dailymotion]x1tg4gv_les-licences-creative-commons_webcam[/MEDIA]
  47. 5 points
    Tu t'es cru chez mamie avec tes lien adfly t'avise même pas de refaire ça. Et pour ton pseudo donne moi en un nouveau rapidement par mp avant qu'il me prenne l'envie de te ban.
  48. 5 points
    Bonjours , Aujourd'hui après 1 journée , 300 essayes et de l'aide de 2 personnes ( ProfesseurCraft et Chronoos89 ) Le nombre de tentative je vous en parle pas ..: Et voilà se que sa donne : Et sa nous donne sa : Le Crafting de l'objet se trouve ici : Le skript est en fichier attachés. Besoin de skript, Skquery . Encore merci à Chronoos et Professeur Si vous rencontrez des bugs , remonté les nous , merci . C'est la version alpha 1.0. Pour le rangement du campement , utiliser le coffre nommer rangement sur un lit Cordialement Tarradon
×
×
  • 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.