Soufreur78 Posté(e) le 9 octobre 2016 Posté(e) le 9 octobre 2016 ≣ Bonjour depuis pas mal de temps je vois beaucoup de personne qui cherche à faire générer des coffres avec des items définies selon un pourcentage ≣ Je vous est donc préparé un petit tutoriel pour apprendre à créer des coffres aléatoires d’après un pourcentage de réussite, un nombre minimum et maximum tout ça depuis une config.yml Voila comment se présente la configuration dans un fichier config.yml : [ATTACH]3461[/ATTACH] Maintenant on va voir comment marche le code pour lire toute cette config , je remercie d'avance @PsYZiiK et @GauvainWizard pour leur très bon tuto sur la lecture/création des fichier.yml qui ma beaucoup aidé /!\ Attention le code suivant est créer de façon à gérer plusieurs types de coffre (Ce qui le rend plus complexe) cette particularité est nécessaire par exemple pour le jeu "Skywars" ou il y a des coffres de plusieurs niveaux mais il est possible d'enlever cette fonctionnalité pour un skript plus simple. (Je vais la proposer à la toute fin du tutoriel /!\ Donc voici le début du code qui cherche à savoir combien de type de coffre il y a (vous pouvez en mettre autant que vous voulez) Type de coffre: - Coffre 1 - Coffre 2 set {_list.type.coffre::*} to value list "Type de coffre" get of "plugins\Skript\scripts\config.yml" # Va lire tous les types de coffre et créer une variable liste avec. # {_list.type.coffre::*} contient "Coffre 1" et "Coffre 2" Il était nécessaire pour que mon code marche de faire une petite partie ou on résume les items de chaque type de coffre. Dans le code on va loop tous les items inscrits pour les mettrent dans une variable liste set {_list.%loop-value%::*} to value list "Objet %loop-value%" get of "plugins\Skript\scripts\config.yml" Objet Coffre 1: - ender pearl - dirt - sponge Maintenant il nous faut un petit système de coffre que je ne vais pas mettre car c'est juste ajouter les coordonnés des coffres voulus dans une variable {Coffre 1.location::*} (Pour les coffres de type "Coffre 1") et {Coffre 2.location::*} (Pour les coffres de type "Coffre 2") dans mon exemple. La variable doit être de cette forme {NOM DE VOTRE TYPE DE COFFRE.location::*} Dans la suite du code je loop la variable {TYPE DE COFFRE.location::*} qui contient les positions des coffres loop {%loop-value%.location::*}: # loop des positions de coffre set {_coffre.loc} to loop-value-2 # Je créer une variable avec la loop-value set block at {_coffre.loc} to air # Je casse un éventuel bloc à cette position set block at {_coffre.loc} to chest # Je place un coffre clear {_number::*} loop 27 times: # Je créer un systéme de slot aléatoire ici add loop-number to {_number::*} Maintenant grâce à la liste des items "Objets Type de coffre:" contenu dans la variable {_list.TYPE DE COFFRE::*} Je vais loop tous les items et récupérer chaque information qui le concerne (Chance/Max/Min) Coffre 1: # Config à lire enderpearl: # Config à lire Frequence: 80 # Config à lire Max: 3 # Config à lire Min: 1 # Config à lire dirt: # Config à lire Frequence: 95 # Config à lire Max: 24 # Config à lire Min: 10 # Config à lire loop {_list.%loop-value-1%::*}: set {_item} to loop-value-3 parsed as item # On set la variable {_item} avec l'item loop set {_Frequence} to single value "%loop-value-1%.%loop-value-3%.Frequence" get of "plugins\Skript\scripts\config.yml" # On set une variable avec la chance d'obtenir l'item "Frequence : 100" = 100% de chance set {_Frequence} to {_Frequence} parsed as number # On transforme le contenu de la variable en chiffre set {_Max} to single value "%loop-value-1%.%loop-value-3%.Max" get of "plugins\Skript\scripts\config.yml" # On set une variable avec le nombre d'item de ce type maximun set {_Max} to {_Max} parsed as number # On transforme le contenu de la variable en chiffre set {_Min} to single value "%loop-value-1%.%loop-value-3%.Min" get of "plugins\Skript\scripts\config.yml" # On set une variable avec le nombre d'item de ce type minimun set {_Min} to {_Min} parsed as number # On transforme le contenu de la variable en chiffre Maintenant il ne reste plus cas "tester" la chance que l'item soit dans le coffre Choisir la quantité aléatoire entre Min et Max, Exemple : Entre 1 et 7 = 2 Et on ajoute l'item au coffre A noter que pour un item comme un plastron ou il n'y a pas de quantité aléatoire il faut mettre max et min = 1 chance of {_Frequence}%: # On test la chance que l'item soit dans un coffre set {_random} to a random integer between {_Min} and {_Max} # Choix de la quantité aléatoirement set {_slot} to a random element out of {_number::*} # La on choisi un slot random parmis ceux qu'ils restent remove {_slot} from {_number::*} # On le retire de la liste vu qu'il est pris maintenant loop {_random} times: # On ajoute l'item dans le coffre add {_item} to slot ({_slot} - 1) of block at {_coffre.loc} Voila le code est complet. Je sais qu'il est très difficile de tout comprendre vu comment j'explique mal mais je pense que les skripteurs avec un niveau assez bon vont comprendre facilement. Sans vouloir me vanter je pense qu'il va être super facile pour des jeux avec des coffres (Skywars, HungerGame etc...) d'avoir une personnalisation et un chargement des coffres très facile avec ce code. Je met mon code complet en spoiler pour pouvoir le réutiliser /!\ Attention il faut changer les accés au fichier.yml avec votre propre accès sinon ça ne pourra pas marcher chez vous ! /!\ (Il faut juste remplacer "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" par le votre) [spoiler=Code entier] on load: if file "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" doesn't exists: create file "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf "##========= DEFINIR CHAQUE TYPE DE COFFRE ==========" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf "Type de coffre:" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " - Coffre 1" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " - Coffre 2" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " " to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf "##========= OBJET DANS CHAQUE TYPE DE COFFRE ===========" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf "Objet coffre 1: " to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " - ender pearl" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " - dirt" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " " to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf "##========= CARACTERISTIQUES DE CHAQUE COFFRE ===========" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf "Coffre 1:" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " enderpearl:" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " Frequence: 10" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " Max: 3" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " Min: 1" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " dirt:" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " Frequence: 50" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " Max: 24" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " Min: 10" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" broadcast "&4Le fichier de config a été créer !" command /Spawncoffre: trigger: set {_list.type.coffre::*} to value list "Type de coffre" get of "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" loop {_list.type.coffre::*}: set {_list.%loop-value%::*} to value list "Objet %loop-value%" get of "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" loop {%loop-value%.location::*}: set {_coffre.loc} to loop-value-2 set block at {_coffre.loc} to diamond block set block at {_coffre.loc} to chest clear {_number::*} loop 27 times: add loop-number to {_number::*} loop {_list.%loop-value-1%::*}: set {_item} to loop-value-3 parsed as item # On set la variable {_item} avec l'item loop set {_Frequence} to single value "%loop-value-1%.%loop-value-3%.Frequence" get of "plugins\Skript\scripts\config.yml" # On set une variable avec la chance d'obtenir l'item "Frequence : 100" = 100% de chance set {_Frequence} to {_Frequence} parsed as number # On transforme le contenu de la variable en chiffre set {_Max} to single value "%loop-value-1%.%loop-value-3%.Max" get of "plugins\Skript\scripts\config.yml" # On set une variable avec le nombre d'item de ce type maximun set {_Max} to {_Max} parsed as number # On transforme le contenu de la variable en chiffre set {_Min} to single value "%loop-value-1%.%loop-value-3%.Min" get of "plugins\Skript\scripts\config.yml" # On set une variable avec le nombre d'item de ce type minimun set {_Min} to {_Min} parsed as number # On transforme le contenu de la variable en chiffre chance of {_Frequence}%: set {_random} to a random integer between {_Min} and {_Max} set {_slot} to a random element out of {_number::*} remove {_slot} from {_number::*} loop {_random} times: add {_item} to slot ({_slot} - 1) of block at {_coffre.loc} clear entities command /Addcoffre [<text>]: trigger: if arg 1 is not set: message "&2> &a/addcoffre coffre1 &7Ajouter un coffre à la liste1" message "&2> &a/addcoffre coffre2 &7Ajouter un coffre à la liste2" message "&2> &a/addcoffre clear1/2 &7Clear une des listes" else: if arg 1 is "clear1" or "clear2": if arg 1 is "clear1": set {_nbr} to 1 if arg 1 is "clear2": set {_nbr} to 2 clear {Coffre %{_nbr}%.location::*} message "&8[&6!&8] &aVous avez clear tout les positions des coffres" stop if arg 1 is "coffre1" or "coffre2": if targeted block is not a chest: message "&8[&6!&8] &cVous devez cibler un coffre" else: if arg 1 is "coffre1": set {_cr} to "Coffre 1" if arg 1 is "coffre2": set {_cr} to "Coffre 2" set {_loc} to location of targeted block loop {%{_cr}%.location::*}: if loop-value = {_loc}: message "&8[&6!&8] &cCe coffre a déjà été ajouté à la liste %{_cr}%" stop add {_loc} to {%{_cr}%.location::*} set block at {_loc} to diamond block wait 5 tick set block at {_loc} to chest message "&8[&6!&8] &aLe coffre a bien été ajouté à la liste %{_cr}%" else: make player execute command "/addcoffre" La config (Elle se créer automatiquement au on load) [spoiler=Config] #========= DEFINIR CHAQUE TYPE DE COFFRE ========== Type de coffre: - Coffre 1 - Coffre 2 #========= OBJET DANS CHAQUE TYPE DE COFFRE =========== Objet Coffre 1: - ender pearl - dirt Objet Coffre 2: - diamond - coal #========= CARACTERISTIQUES DE CHAQUE COFFRE =========== Coffre 1: enderpearl: Frequence: 80 Max: 3 Min: 1 dirt: Frequence: 95 Max: 24 Min: 10 Coffre 2: diamond: Frequence: 75 Max: 3 Min: 1 coal: Frequence: 88 Max: 18 Min: 8 Comme dit au début je vous donne le code complet pour avoir UN SEUL TYPE de coffre : [spoiler=Code pour un seul type de coffre] [spoiler=Code pour un seul type de coffre] [/color][/color] [color=#000000][color=rgb(0, 0, 0)]on load: if file "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" doesn't exists: create file "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf "##========= OBJET DANS CHAQUE TYPE DE COFFRE ===========" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf "Objets: " to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " - ender pearl" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " - dirt" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " " to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf "##========= CARACTERISTIQUES DE CHAQUE COFFRE ===========" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf "Coffre:" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " enderpearl:" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " Frequence: 10" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " Max: 3" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " Min: 1" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " dirt:" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " Frequence: 50" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " Max: 24" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" wf " Min: 10" to "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" broadcast "&4Le fichier de config a été créer !" command /Spawncoffre: trigger: set {_list.objet::*} to value list "Objets" get of "C:\Users\Guillaume\Desktop\UHCRun 1.8\plugins\Skript\scripts\config.yml" loop {Coffre.location::*}: set {_coffre.loc} to loop-value set block at {_coffre.loc} to diamond block set block at {_coffre.loc} to chest clear {_number::*} loop 27 times: add loop-number to {_number::*} loop {_list.objet::*}: set {_item} to loop-value-2 parsed as item # On set la variable {_item} avec l'item loop set {_Frequence} to single value "Coffre.%loop-value-2%.Frequence" get of "plugins\Skript\scripts\config.yml" # On set une variable avec la chance d'obtenir l'item "Frequence : 100" = 100% de chance set {_Frequence} to {_Frequence} parsed as number # On transforme le contenu de la variable en chiffre set {_Max} to single value "Coffre.%loop-value-2%.Max" get of "plugins\Skript\scripts\config.yml" # On set une variable avec le nombre d'item de ce type maximun set {_Max} to {_Max} parsed as number # On transforme le contenu de la variable en chiffre set {_Min} to single value "Coffre.%loop-value-2%.Min" get of "plugins\Skript\scripts\config.yml" # On set une variable avec le nombre d'item de ce type minimun set {_Min} to {_Min} parsed as number # On transforme le contenu de la variable en chiffre chance of {_Frequence}%: # On test la chance que l'item soit dans un coffre set {_random} to a random integer between {_Min} and {_Max} # set {_slot} to a random element out of {_number::*} # La on choisi un slot random parmis ceux qu'ils restent remove {_slot} from {_number::*} # On le retire de la liste vu qu'il est pris maintenant loop {_random} times: # On ajoute l'item dans le coffre add {_item} to slot ({_slot} - 1) of block at {_coffre.loc} clear entities command /addcoffre [<text>]: trigger: if arg 1 is not set: message "&2> &a/addcoffre coffre &7Ajouter un coffre à la liste1" message "&2> &a/addcoffre clear &7Clear une des listes" else: if arg 1 is "clear": clear {Coffre.location::*} message "&8[&6!&8] &aVous avez clear tout les positions des coffres" stop if arg 1 is "coffre": if targeted block is not a chest: message "&8[&6!&8] &cVous devez cibler un coffre" else: set {_loc} to location of targeted block loop {Coffre.location::*}: if loop-value = {_loc}: message "&8[&6!&8] &cCe coffre a déjà été ajouté à la liste" stop add {_loc} to {Coffre.location::*} set block at {_loc} to diamond block wait 5 tick set block at {_loc} to chest message "&8[&6!&8] &aLe coffre a bien été ajouté à la liste" else: make player execute command "/addcoffre" La mot de la fin : Attention ce genre de système est pas content si tu utilise des majuscules pour le "Coffre 1" mais que tu ne met pas une majuscule à "Objet Coffre 1" donc faite attention sinon ça marche pas :p Dsl pour les fautes je vais essayer de les corriger une par une, car je suis un peu débile :rolleyes: 3
ExtraCreep Posté(e) le 11 octobre 2016 Posté(e) le 11 octobre 2016 Très bon tutoriel ! Hâte d'en voir plus de ce style !
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant