Aller au contenu

Anarchick

Membre
  • Compteur de contenus

    288
  • Inscription

  • Dernière visite

  • Jours gagnés

    9
  • Crédits

    71 [Faire un don]

Anarchick a gagné pour la dernière fois le 10 octobre

Anarchick a eu le contenu le plus aimé !

Réputation sur la communauté

85 Tu commences à avoir des copains !

À propos de Anarchick

  • Rang
    Habitué

Visiteurs récents du profil

626 visualisations du profil
  1. Anarchick

    WGregions

    Classique

    Version 1.0

    5 downloads

    Description: Ce script rajoute plusieurs syntax à utiliser dans vos scripts. Ces syntax permettent d’interagir avec WorldGuard Syntax: create [(WorldGuard|WG)] [Cuboid] region (from|between) %location% (and|to) %location% with id %string% create WorldGuard region between {_loc1} and {_loc2} with id "test" [(WorldGuard|WG)] region with (id|name) %string% in [world] %world% set {_region} to WorldGuard region with id "test" in world of player [all] [(WorldGuard|WG)] regions in [world] %world% set {_regions::*} to all wg regions in world world of player [all] [(WorldGuard|WG)] regions at %location% set {_regions::*} to all wg regions at location of player # OU BIEN set {_region} to first element of all wg regions at player [(WorldGuard|WG)] region (id|name) of %region% set {_id} to region name of {_region} [all] [(WorldGuard|WG)] (0¦members|1¦owners) (in|of) %region% #get set {_memebers::*} to all wg members in {_region} #add add player and "Anarchick" to owners of {_region} #remove remove {_players::*} from members of {_region} [(WorldGuard|WG)] flag [object] %string% set {_StateFlag} to flag object "block break" # OU BIEN set {_StateFlag} to flag object "block-break" # OU ENCORE set {_StateFlag} to flag object "BLOCK_BREAK" all [(WorldGuard|WG)] flags in %region% set {_StateFlags::*} to all wg flags in {_region} [(WorldGuard|WG)] flag %StateFlag/String% in %region% #get set {_flagValue} to wg flag {_StateFlag} in {_region} #set set flag "USE" in {_region} to "DENY" set flag {_StateFlag} in {_region} to false #delete delete flag "pvp" in {_region} Note diverses: * Skript permet depuis la version 2.1 d'utiliser quelques expressions de régions worldguard mais il ne s'agit pas du même {_region} que moi donc attention ! Utiliser les régions skript QUE pour connaitre l'identifiant d'une région ou pour ajouter des membres à celle-ci ** {_StateFlag} est un objet java de worldguard (comme {_region} ou {_flagValue}) , il ne contient pas de résultat ALLOW ou DENY *** Mon code qui gère les membres/propriétaires d'une région utilise le système UUID , il est donc possible d'ajouter des joueurs qui sont hors-ligne **** Actuellement la version 1.0 ne gère que les flags de type StateFlag , c'est à dire ayant pour valeur "ALLOW" ou "DENY" Plugins nécessaires: Skript (testé avec la version 2.4Beta8) Skript-mirror 2.0.0-SNAPHOT WorldEdit (Obligatoire pour faire fonctionner WorldGuard) WorldGuard (testé avec la version 7.0.1 ) Note : Si ce script fonctionne avec des version antérieur, ou ne fonctionne pas dans des versions antérieur, merci de me le signaler Droits d'utilisations: Ce script m'appartient exclusivement, vous êtes autorisé à le modifier pour une utilisation personnel, vous pouvez me suggérer des modifications ou des bugs, vous n'êtes pas autorisé à le publier avec ou sans votre nom sans mon accord. Ne me demander pas des mises à jour, je la ferais en temps voulu. Merci
  2. Anarchick

    La bienséance en skript

    J'ai chopé cette monstruosité tout à l'heure sur le discord : every ticks: loop all entities: if loop-entity is a snowball: loop all blocks in radius 1 around loop-entity: wait 1 tick if loop-block is air: set loop-block to ice block add location of loop-block to {_blocks::*} wait 2 seconds loop {_blocks::*}: set block at loop-value to air wait 1 tick remove loop-value from {_blocks::*} J'aimerai bien m'en occupé pour montrer un exemple d'optimisation plus que nécessaire mais il faut que je trouve le temps pour ça ^^
  3. Anarchick

    La bienséance en skript

    J'ai pris en compte ton commentaire et apporté des modifications dans la section nomenclature, yml et rajouté la raison de pourquoi le code de mon projet btooom n'est pas optimisé pour la lisibilité Sans cette méthode mon serveur perdrait trop de TPS et je me retrouverai avec trop de code (j'en ai +10k) Mais je suis d'accord avoir toi qu'il est bon d'avoir le plus possible de lisibilité, c'est pour ça que mon second projet qui est bien moins imposant me permet de tout miser là dessus
  4. Anarchick

    La bienséance en skript

    Lesquels ? Tu peux donner ton opinion ça peut être intéressant d'avoir un autre point de vue
  5. Anarchick

    La bienséance en skript

    Bonjour, ce sujet s'adresse aux personnes disposant déjà des bases en skript et qui souhaite s'améliorer dans leur méthodologie Règle de nomenclature {_nameofvariable} ou {_name.of.variable} ou {_nameOfVariable} A défaut de retrouver le sujet de la personne qui avait rédiger tout un article dessus je vous renvoie vers cette page [Hidden Content] Les noms des variables doivent donc être attachés en commençant par une minuscule et les mots suivant doivent commencer par une majuscule en étant attaché au précédent , donc {_nameOfVariable}, Pour ce qui est des fonctions la règle devrait être la même que pour les methods() mais il y a juste un petit problème qui se pose avec skript-mirror, "Comment faire la distinction entre une méthode java et une fonction skript ?" pour le coup je suggère que toute les premières lettres du nom d'une méthode commence par une majuscule (n'hésitez pas à donner votre avis) La bonne méthode pour définir une variable {player.level.%player%} , ça vous plait ? moi ça me donne envie de m’arracher les yeux ! Pourquoi ? Car plusieurs problèmes se pose : On peux oublier de supprimer des variables qu’on utilise plus, lorsque l’on souhaite supprimer toutes les informations concernant un joueur c’est plus que pénible d’utiliser cette méthodologie, et enfin ce n’est absolument pas le plus optimal pour un système de top/flop par exemple. Ma recommandation : {%uuid of player%::level} , {%uuid of player%::{@title}::homes::*}, {{@title}::locations::*} , en gros utiliser les variables liste ! C’est vraiment très pratique et plus complet que les variables simples. Le plus gros avantage est ceci delete {%uuid of player%::*} Bonus : j’ai écris {@title} , vous aurez donc comrpis que j’utilise une « option » , j’aime bien faire ça pour définir quel script utilise quel variable et ainsi éviter tout conflit entre scripts Bonus 2 : A l’heure ou j’écris il y a un problème avec la version Skript-2.4Beta8 , qui bug avec function {@title}Xp(player: player) , mais j’ai déjà signalé le bug et il devrait être corrigé un jour où l’autre. Variable local ou global ou yaml ou SQL ? La règle est simple, le fichier variables.csv doit pourvoir être supprimé sans que cela ne casse quoi que ce soit après un redémarrage, pourquoi ? Car il arrive parfois qu’un problème persiste alors que le code est correct, et cela peut être la cause de l’oubli de suppression d’une variable (ce cas se présente principalement avec les variables de type liste {::*} ) Pour éviter ce phénomène il faut privilégier les variables locales (qui en plus ne s’écrivent pas dans le fichier .csv donc gain de temps), et les variables globales doivent êtres définis lors d’un événement tel que le on load: ou lors de l’exécution d’une commande ou … Dans quel cas utiliser les fichiers yaml (ou autre type de fichier textuel) ? Je recommande ce type de fichier pour tout ce qui est lié à la sauvegarde de statistique ou de données concernant le joueur ou le serveur qui doivent persister après l’extinction du serveur. L’utilisation de l’addon Skript-yaml sera nécessaire et pour ceux qui se le demande, oui c’est plus long au chargement mais cette addon a la particularité de ne pas passer son temps à aller chercher l’information dans le fichier, une fois que le fichier est chargé il est enregistré dans la RAM ce qui le rend rapide d’accès. EDIT : Comme l'indique Kilterra dans les commentaires, il y a un ralentissement du à l'accès à ce ficher, voici la technique que j'utilise pour palier à ce problème : options: title: breeding author: Anarchick version: 1.0 dependencies: skript, skript-yaml, SkQuery, skent, skript-mirror, skellet config: plugins/skript/config on load: if file "{@config}/{@title}.yml" exist: load yaml "{@config}/{@title}.yml" as "{@title}" delete {{@title}::*} set {{@title}::version} to yaml value "version" from "{@title}" if {{@title}::version} is not {@version}: send "<pink>{@title} : Unload the script cause version of the script ({@version}) does not match with version of the config file (%{{@title}::version}%)" to console and ops stop set {{@title}::description::*} to colored yaml list "description" from "{@title}" without string checks set {{@title}::egg::uncooked::name} to colored yaml value "egg.uncooked.name" from "{@title}" without string checks set {{@title}::egg::uncooked::lore::*} to colored yaml list "egg.uncooked.lore" from "{@title}" without string checks set {{@title}::egg::cooked::name} to colored yaml value "egg.cooked.name" from "{@title}" without string checks set {{@title}::egg::cooked::lore::*} to colored yaml list "egg.cooked.lore" from "{@title}" without string checks set {{@title}::egg::cooked::time} to yaml value "egg.cooked.time" from "{@title}" set {{@title}::egg::cooked::xp} to yaml value "egg.cooked.xp" from "{@title}" else: send "<pink>The config file at path ""{@config}/{@title}.yml"" does not exist" to console and ops Une fois fait je peux oui ou non décharger le fichier yml de la ram Le cas du SQL : C’est très sympathique mais aussi très pénible à utiliser, entre latence, baisse de performance, code à rallonge, perte de données, base de données payante, problème de configuration réseau, … Bref, c’est malheureusement une vraie galère bien que l’idée soit bonne. Recommandé uniquement pour les personnes qui gère un site web utilisant la même base de donnée SQL. Rédiger en français ou en anglais ou autre ? Souvent je vois du code avec des nom de variable comme {joueurs::*} ou {niveauJoueur.%player%} , alors je suis d’accord que nous sommes sur un forum français et que nous sommes francophones MAIS il ne faut pas oublier que la plus grosse communauté Skript est anglophone et que c’est chez eux qu’il y a les « skripteur » les plus talentueux , donc si vous avez un jour besoin de demander de l’aide sur le forum SkUnity ou les différents discords anglophone il est préférable de rédiger les noms de variables en ANGLAIS , car oui vous avez bien fait correspondre votre nom français avec l’utilisation que vous faite de votre variable et ça aide beaucoup pour comprendre rapidement votre code, mais si vous avez besoin d’aide de la part d’un anglophone ça peut lui un poser problème de compréhension et il ne vous répondra peut être pas. Imaginer on fait l’analogie avec des écritures cyrilliques ou des Kanji, là ça devient très complexe car en plus la personne qui souhaite vous aider ne pourra même pas utiliser les mêmes caractères que vous pour définir une nouvelle variable. Conclusion : LES NOMS DE VARIABLES DOIVENT ÊTRE ÉCRIT EN ANGLAIS PS : Les commentaires doivent être écrits si possible dans la langue du forum sur lequel vous souhaitez partager votre script. Voir même en FR et ANG en même temps pour les courageux ! L’optimisation poids/lisibilité/évolutivité/CPU/RAM Lorsque tu code (peu importe le langage), ne te dis pas « ça fonctionne donc je n’y touche plus », c’est une mauvaise façon de réfléchir, si l’on ne fait pas d’effort pour optimiser son code on ne progresse pas ! Il existe différentes façons d’optimiser et certaines sont compatibles les uns avec les autres, le tout c’est d’identifier ce dont on a besoin. Par exemple mon projet btooom est tellement conséquent qu’il m’impose de faire un code extrêmement optimisé pour le CPU/RAM mais à défaut il est très peu lisible et son évolutivité me demande parfois de tout réécrire. Mais je ne partage pas ce code donc ce n’est pas gênant. (En même temps aucun code n'est en double, tous mes scripts sont liés les uns aux autres dans le but de réduire le plus possible la consommation des ressources matériel ce qui veut dire que pour identifier une erreur c'est un véritable labyrinthe dont je suis le seul à connaitre les recoins) Et pour mon autre projet de serveur survie c’est totalement différent, je fais un code orienté sur la lisibilité et surtout l’évolutivité, mais j’optimise moins les ressources CPU/RAM (J'ai du code en double car chacun de mes scripts sont totalement indépendant et non interférant avec les autres), par contre ça me permettra de potentiellement partager mes scripts. Tout ce que j’ai à dire dans cette rubrique c’est qu’il faut bien réfléchir en amont à comment doit être penser son code en mettant toute sa bonne volonté pour l'optimiser le plus possible. Maintenant je vous invite à proposer des exemples de code (basique ou complexe tant qu'il ne sont pas long) qui peuvent être optimisé afin de donner des idées : #étape 1 Set {_test::*} to "premier", "second" and "troisième" Loop {_test::*}: Broadcast "%loop-value%" #étape 2 Loop "premier", "second" and "troisième" Broadcast "%loop-value%" #étape 1 broadcast "5" wait 1 second broadcast "4" wait 1 second broadcast "3" wait 1 second broadcast "2" wait 1 second broadcast "1" wait 1 second #étape 2 loop 5 times: broadcast "%loop-number%" wait 1 second #étape 1 loop 100 times: set {_n} to loop-number {_n} > 80 #étape 2 loop 20 times: set {_n} to loop-number +80 #étape 3 loop integers between 81 and 100: #étape 1 set {_::*} to false and true set {_} to random element out of {_::*} if {_} is false: set {_} to true else: set {_} to false #étape 2 set {_} to random boolean out of false and true set {_} to true if {_} is false otherwise false #étape 3 avec l'addon skript-mirror set {_} to random boolean out of false and true set {_} to !{_}
  6. Anarchick

    Manipulation de WorldGuard via skript-mirror

    Ce bout de code permet de créer une région avec le plugin WorldGuard, C'est une démonstration de comment interagir avec une API java différente de Bukkit Et comme je l'ai dit, ce code n'est pas fini, il ne permet QUE de définir le chunk du joueur comme étant une zone protégé par WorldGuard, après il faut modifier ce code pour en faire ce que l'on souhaite, exemple : rajouter des membres ou des Flags. Ceci sera utile pour la suite [Hidden Content]
  7. Un code pas fini mais qui permet de créer des régions worldguard via skript-mirror 2.0.0 import: com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion com.sk89q.worldedit.math.BlockVector3 com.sk89q.worldguard.WorldGuard com.sk89q.worldedit.world.World com.sk89q.worldedit.bukkit.BukkitAdapter on sneak toggle: player is sneaking set {_chunk} to chunk at player set {_loc1} to {_chunk}.getBlock(0, 0 and 0).getLocation() set {_loc2} to {_chunk}.getBlock(15, 255 and 15).getLocation() set {_min} to BlockVector3.at({_loc1}.getX(), 0 and {_loc1}.getZ()) set {_max} to BlockVector3.at({_loc2}.getX(), 255 and {_loc2}.getZ()) set {_region} to new ProtectedCuboidRegion("spawn", {_min} and {_max}) set {_container} to WorldGuard.getInstance().getPlatform().getRegionContainer() set {_regions} to {_container}.get(BukkitAdapter.adapt(player.getWorld())) {_regions}.addRegion({_region}) PS: C'était bien prise de tête à faire !!
  8. Anarchick

    Help : skript-mirror

    Meilleur solution optimisé avec skript-yaml: Lors de la connexion tu défini la variable de langue du joueur (que tu supprime lorsqu'il se déconnecte du serveur) tu utilise 1 fichier .yml pour chaque langue, nommé du genre "FR.yml" et tu utilise exactement le MÊME chemin dans chaque fichier. Tu peu faire ça en async (avec MundoSK) mais je te propose plutôt la solution des fonctions qui sont par contre en sync Voici ce que j'utilise : function Lang(lang: text, node: text, replace: strings) :: string: set {_msg} to singleYML({_node}, "FR") #fonction qui utilise skript-yaml replace all "°" with "'" in {_msg} #support de l'apostrophe replace all "[0]" with nl in {_msg} #insertion d'un retour à la ligne loop {_replace::*}: #remplace par exemple tous les "[1]" par le pseudo du joueur replace all "[%loop-index%]" with "%loop-value%" in {_msg} return colored {_msg} et dans mon fichier FR.yml j'ai par exemple le chemin "STATS.increase.level" où il est écrit "<cyan>[1] est monté au niveau [2]"
  9. Anarchick

    Loop all lands in a radius.....

    loop tous les blocks dans un chunk est une très mauvaise idée (en Skript) , imagine 16*16*256*9 blocs à loop toutes les 30 secondes !!! Mais rassure toi il y a une technique en java proposé par ShaneBee hier soir sur le discord SkriptChat import: org.bukkit.Bukkit org.bukkit.Material on load: set {blockData::obsidian} to Bukkit.createBlockData(Material.OBSIDIAN) on break: set {_c} to chunk at event-block if {_c}.contains({blockData::*}) = true: broadcast "obsidian here!" (Addon skript-mirror 2.0 SNAPSHOT nécessaire) J'ai fait des test et il te faut aussi une des dernières version de Spigot provenant de BuildTools.jar , tu es en version 1.8.8 et je ne sais pas si BuildTools met aussi à jour des versions aussi ancienne, je n'ai testé que en 1.14.4 avec le build#103 [Hidden Content] Autrement une autre technique consiste à loop tous les blocs (ou du moins 30% d'entre eux) entre 2 locations (que tu aura calculé par rapport à la position du joueur) au niveau de la couche de la lave par exemple et vérifier si il y a de l'obsidienne. ça limitera un peu le lag
  10. Anarchick

    Crash new recipe

    L'api de Bukkit/Spigot ne permet pas de modifier une recette déjà existante sans avoir préalablement supprimé cette recette, OR l'api ne permet pas non plus de retirer uniquement 1 recette déjà chargé, elle permet que de supprimer toutes les recettes du serveur ou de restaurer les recettes par défaut CE QUI VEUT DIRE QUE : A chaque fois que tu utilise cette effet il y a une vérification qui est faite pour vider toutes les recettes, puis les remettre en prenant en compte la modification de 1 seule recette ce qui n'est pas du tout optimiser. Tu peux passer par skript-mirror pour optimiser tout ça comme j'ai fait avec une recette de four pour cuire un oeuf: import: org.bukkit.Bukkit org.bukkit.inventory.FurnaceRecipe org.bukkit.NamespacedKey org.bukkit.Material org.bukkit.inventory.ItemStack java.lang.Float java.lang.Integer on load: if Bukkit.getRecipesFor(new ItemStack(Material.HORSE_SPAWN_EGG)).toString() contain "CraftFurnaceRecipe": loop ...Bukkit.recipeIterator(): "%loop-value.getResult()%" does not contain " named " add loop-value to {_originalRecipes::*} Bukkit.clearRecipes() loop {_originalRecipes::*}: Bukkit.addRecipe(loop-value) set {_recipes::*} to Material.HORSE_SPAWN_EGG and Material.PIG_SPAWN_EGG loop {_recipes::*}: set {_key} to new NamespacedKey("{@title}" and loop-value.toString() in lower case) set {_input} to loop-value set {_output} to new ItemStack(loop-value) set name of {_output} to colored {{@title}::egg::cooked::name} set lore of {_output} to colored {{@title}::egg::cooked::lore::*} set {_xp} to new Float(1) set {_time} to new Integer(1200) set {_recipe} to new FurnaceRecipe({_key}, {_output}, {_input}, {_xp} and {_time}) Bukkit.addRecipe({_recipe}) Pour cette version du code tu as besoin de Skript-mirror 2.0 SNAPSHOT minimum (Les ENUM n'ont plus besoin du symbole "!" pour être interprété) Et pour adapter mon code qui est spécifique au recette de four en table de craft tu as ceci [Hidden Content] Je sais que c'est compliquer mais c'est ce qu'il y a de plus opti en terme de temps de reload ^^ (exit créer un datapac quoi que facilek, un plugin ou modifier le code source de spigot pour les plus téméraire)
  11. Anarchick

    Divers problème de skript - 1.14.4

    problème 3) message "&cJump n°%{_index}% : &4%loop-value%" et vire ton wait 2 ticks Problème 4) ça ne fonctionne pas comme ça et ce serait une très mauvaise idée que ce le soit (imagine tu as 100 joueurs, la quantité de paquets entrant/sortant à analyser que ça représente !!) Utilise l'addon ThatPacketAddon et fait quelque chose comme : on packet event play_client_use_item: avec un tuto de l'addon [Hidden Content] (similaire à ce que propose MundoSk qui n'est plus mis à jour) Problème 5) Un truc du genre cancel event if location of target block of player is not location of event-block
  12. expression [the] random (probability|chance) of %numbers%: get: set {_nums::*} to expression-1 while true: set {_random} to random integer between 1 and size of {_nums::*} chance of {_nums::%{_random}%}%: return {_random} Ce petit code ressemble fortement à l'utilisation de "random integers between 1 and 3" mais à la différence qu'il permet d'influencer la probabilité qu'un nombre apparaisse plus souvent qu'un autre , de plus il est possible d'utiliser une somme de probabilité qui n'est pas égal à 100% (explication plus bas) (Rappel : Les expressions customisé nécessitent l'addon Skipt-mirror , mais il est possible de transformer mon code en fonction skript pour ne pas avoir besoin d'addon) Ce petit code peut se traduire de cette façon : while true: set {_random} to random integer between 1 and 3 if {_random} is 1: chance of 5%: broadcast "entry : 1" exit loop if {_random} is 2: chance of 10%: broadcast "entry : 2" exit loop if {_random} is 3: chance of 30%: broadcast "entry : 3" exit loop et voici un exemple d'utilisation avec une somme de probabilité différent de 100: command /prob <num=1> <num=20> <num=60> <num=100>: trigger: loop 100 times: set {_v} to random chance of arg-1, arg-2, arg-3, arg-4 add 1 to {_r::%{_v}%} loop {_r::*}: add loop-value to {_r} broadcast "%loop-index% : %loop-value%" broadcast "total: %{_r}%" Ce code sera parfait a associer avec un "switch" ou une multitude de "if chance "
  13. Anarchick

    Changer des texture en skript

    *MIIIP* mauvaise réponse ^^ lis le lien du premier commentaire de bleu40. Après c'est vrai que c'est assez complexe a mettre en œuvre mais si on se débrouille bien en Skript on peu réussir a mettre en place un système qui automatise tout ça
  14. Anarchick

    Pluie d'acide

    Holà, je n'ai pas codé depuis longtemps et je ne peux pas tester avant très longtemps mais : Si on utilise la technique de niveau de luminosité du soleil sur un bloc à la place de loop tous les blocs au dessus de la tête du joueur ? ( énorme gain de ressource processeur ! ) [Hidden Content] [Hidden Content]
  15. Anarchick

    Demande de skript pour un chat

    Possible, juste très pénible à mettre en place. Il faut créer un gestionnaire de chat chat qui enregistre toutes les entrés de chat pour chaque joueur (si possible via les packets) et actualiser le chat à chaque nouvelle entrée pour chaque joueur. Je me souviens d'un serveur qui avait ce genre de système de chat actualisé en temps réel pour afficher les stats ... mais c'était leur propre plugin.
×

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.