Aller au contenu

Messages recommandés

Posté(e)

≣ 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:

  • J'aime 3

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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.