Aller au contenu

Anarchick

Membre
  • Compteur de contenus

    321
  • Inscription

  • Dernière visite

  • Jours gagnés

    17

Messages posté(e)s par Anarchick

  1. 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 https://worldguard.readthedocs.io/en/latest/developer/

  2. 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 !!

    • J'aime 1
  3. 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]"

  4.  

    Il y a 5 heures, Alliz a dit :

    En outre cette fonction prend beaucoup de ressources "pour ce qu'elle fait". 

    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 https://www.spigotmc.org/wiki/recipe-example/

     

    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)

    • J'aime 1
  5. 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 "

    • J'aime 1
  6. Le 11/03/2019 à 18:43, superrtutur242526 a dit :

    Uhm.. en skript se n'ai pas possible car les plugins ne peuvent pas fire ca après pour ton system de level tu peut faire en sorte que plus il a un level haut plus l'enchantement de ton épée devient haut 😮

    *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 🙂

    • Merci 1
  7. Il y a 18 heures, Yghore a dit :

    Impossible

    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.

  8. Il y a plein de solutions (car plusieurs addons qui proposent leur syntaxe pour jouer un son)

     

    par exemple cette solution https://skripthub.net/docs/?id=1121

    avec skript dev28+

    donc avec cette syntax : play sound %string% [with volume %number%] [(and|with) pitch %number%] at %location% [for %players%]

    ou tu peux faire :

    play sound "block.note.pling" with volume 0.3 at player for all players in world of player

     

  9. set slot (slot of loop-item) of player's inventory to air
    
    remove 1 of loop-item from player's inventory
    
    set {_amount} to amount of paper in player's inventory
    remove paper from player's inventory

    Des trucs dans le genre ...

  10. tu peux faire regarder une autre entité autre qu'un joueur comme ceci:

    function makeLook(e: living entity, loc: location):
        set {_xD} to {_loc}'s x location - {_e}'s x location
        set {_yD} to {_loc}'s y location - {_e}'s y location
        set {_zD} to {_loc}'s z location - {_e}'s z location
        set {_yaw} to atan2({_xD}, {_zD}) - 90
        
        set {_adj2} to ({_xD}*{_xD}) + ({_zD}*{_zD})
        set {_parallel} to sqrt({_adj2})
        set {_pitch} to atan2({_yD}, {_parallel}) - 90
        add "{Rotation:[%{_yaw}%f, %{_pitch}%f]}" to NBT of {_e}  

    Mais il n'est pas possible de faire ceci pour un joueur. Le seule moyen de changer la rotation d'un joueur est de lui appliquer une téléportation. ( Mais si le joueur est dans un véhicule, le téléporter le fera descendre du véhicule ). De plus, appliquer une téléportation à un joueur dans une boucle de moins de 3 ticks est plutôt bugué si le joueur tente de bouger.

  11. EDIT: Noftaly a été plus rapide que moi pour le post ^^

     

    Il suffit de lire et traduire la première ligne d'erreur, puis de réfléchir pour comprendre l'erreur et la résoudre !

    Tu as oublié plusieurs indentations (=tabulations)

    Petite astuce pour que ton code soit plus optimisé :

    if loop-block is an ender chest or a chest or a dispenser or a trapped chest or a dropper:

    l'erreur du loop-block et aussi dût au faite que tu n'as pas correctement respecté l'indentation (= tes loop-block sont en dehors de ta boucle)

    Je ne peux que te conseiller de suivre encore quelques tutoriels sur le forum ousur  youtube afin de t'améliorer en skript. Bonne continuation

     

     

    • J'aime 2
  12. Je ne sais pas ce que vous avez tous à vous moquer de Notepad++, ça reste un logiciel très performant ! Utiliser sublime texte ne fait pas de nous un meilleur skripteur ^^ Je cherche juste à dire que les logiciels d'édition de texte ne sont pas liés au bon fonctionnement de skript et que par conséquent il ne faudrait pas "forcer/encourager" quelqu'un a changer de logiciel SAUF si une fonctionnalité n'est pas présente et se trouve être utile/indispensable.

    Azer, ton problème peut surement se corrigé ... mais je n'ai pas la solution

    • J'aime 2
  13. Holà, si vous êtes adepte des dernière version de SkriptLang vous devez savoir qu'il existe déjà une option pour faire un cooldown, cependant je vais vous proposer un système d'anti-spam/Cooldown qui peut se placer n'importe où dans un code.

    NOTE : ceci est la version avec des fonctions, il est aussi possible de le refaire avec des custom syntax de skript-mirror.

    function SPAMcmd2(cmd: string, time: timespan):
            set {CMD::%{_cmd}%} to now
            wait {_time}
            delete {CMD::%{_cmd}%}
    function SPAMcmd(cmd: string, time: timespan) :: text:
        if {CMD::%{_cmd}%} is set:
            return "spam"
            stop
        SPAMcmd2("%{_cmd}%", {_time})
        return "" #Ne pas supprimer

    Pour l'utiliser :

    command /hey:
        trigger:
            broadcast "[...CODE]"
            SPAMcmd("hey %player%", 2 seconds) is not "spam"
            broadcast "hey"

    "hey %player%" est l'identifiant de l'anti-spam, le faite d''ajouter le nom du joueur dans l'identifiant permet d'autoriser l’exécution de la commande pour les autres joueurs,

    si l'on veux bloquer totalement la commande pour n'importe quel joueur il suffit de ne pas inclure de variable dans le nom de l'identifiant !

    • Merci 1
  14. Une question qui reviens parfois est : est-ce que je peux faire quelque chose comme "if player is alive && player is sneaking:" , la réponse était jusqu'à présent "NON", tu ne peux pas. A présent cela est possible et sera peut être plus tard intégré directement à SkriptLang ( je vous invite a consulter mon sujet pour en savoir plus : https://github.com/SkriptLang/Skript/issues/1468 ).

    Pour le moment j'ai une solution qui nécessite l'addon skQuerry-Lime

    function AND(conditions: booleans) :: boolean:
        if {_conditions::*} contains false:
            return false
        return true
        
    function OR(conditions: booleans) :: boolean:
        if {_conditions::*} contains true:
            return true
        return false

    Et il s'utilise de cette façon :

    if AND(check [player is alive], check [player is sneaking], check [3+1 = 4]) is true:

     

    Normalement les plus malins d'entre vous auront compris le potentiel de ce code, si ce n'est pas encore le cas je vais vous expliquer plus en détail le fonctionnement du code :

    Un %boolean% est une valeur soit vrai ou soit fausse, https://skripthub.net/docs/?id=2135

    Dans le langage Skript, toutes les conditions renvoient un boolean

    exemple :
     

    if 3 + 1 = 4:
        broadcast "la condition est VRAI"
    else:
        broadcast "la condition est FAUSSE"

    Cependant, Skript ne permet pas de faire ceci :

    set {_test} to 3 + 1 = 4 #Ne fonctionne pas

    Mais il existe une méthode avec l'addon skQuerry-Lime :

    set {_test} to check [3 + 1 = 4] #{_test} sera égal à TRUE , l'équivalent en français de VRAI

    Maintenant pour ce qui est des fonction AND() et OR() , bien que le code soit très petit, il est extrêmement pratique car c'est ce que l'on appel "une fonction logique", voici un lien Wikipédia pour savoir ce que cela signifie https://fr.wikipedia.org/wiki/Fonction_logique

     

    Pour faire simple , une fonction AND ( autrement dis ET en français), renvoie la valeur TRUE uniquement si toutes les conditions sont VRAI, autrement dis il suffit qu'une seule condition soit fausse pour que AND() renvoie FALSE.

     

    La fonction OR (  OU en français ) vérifie qu'au minimum 1 condition soit VRAI. Donc il peut y avoir 10 FALSE et 1 TRUE pour que la fonction renvoie TRUE !

     

    Il existe d'autres fonctions logique mais ces deux là sont les plus importantes, je vous invite aussi à trouver d'autres usages a "check [%condition%]" !

    • J'aime 1
  15. expression [the] (duration|remaining) time of [potion] %potioneffecttypes% from %entity%:
        get:
            set {_potion} to expression-1
            set {_e} to expression-2
            loop ...{_e}.getActivePotionEffects():
                loop-value.getType() is {_potion}
                return "%loop-value.getDuration()% ticks" parsed as timespan

    Nécessite l'addon skript-mirror

    exemple d'utilisation:

    command /popo:
        trigger:
            apply night vision to player for 10 seconds
            wait 53 ticks
            set {_time} to remaining time of night vision from player
            send "%{_time}% to player"

     

  16. pour afficher une variable qui est dans une texte du dois utiliser le symbole % placé avant et après ta variable.

    Donc :

    send "Vous avez %{Money.player.%uuid of player%}% InoCoins" to player

    et tu comme tu la correctement fait, tu as bien placé les % à l'interieur de la variable pour le %uuid of player%.

     

    Tu peux même ajouter des couleurs dans le texte pour faire plus jolie.

    send "<gold>Vous possédez <white> %{Money.player.%uuid of player%}% <gold>InoCoins" to player

    (Je me permet aussi de changer 1 mot)

     

     

    Je ne connais pas ton niveau en Skript, mais si tu sais ce que sont les variable list, je te suggère de les utiliser dès qu'il s'agit de stoker des stats de joueur et de cette façon :

    {%uuid of player%::money}
    {%uuid of player%::xp}
    {%uuid of player%::stats::kills}
    {%uuid of player%::stats::death}

    car c'est beaucoup plus pratique comparé à 36000 variables différentes ^^

     

    Si tu voix pas du tout de quoi je parle fais comme si je n'avais rien dit et continue d'apprendre le Skript à ton rythme ;)

  17. En 1.12.2 skStuff est buggé donc Tuke-Nuke a fait un hotfix non-officiel spécial 1.12. Les NBT des entités fonctionne mais celles des items ne fonctionnent pas du tout.

    J'ai donc tenté de recréer moi même le système NBT pour les items avec skript-mirror, j'ai réussi à obtenir la liste des NBT d'un item mais pour ajouter des NBT c'est beaucoup plus compliqué ... par contre j'ai trouvé comment ajouter des NBT qui n'existent pas (=customNBT).

    Donc en attendant je suis passé au NBT vanilla avec un "/replaceitem".

     

    https://forums.skunity.com/threads/need-help-with-skript-mirror-about-nbt-of-an-item.7397/

     

    Si tu n'est pas sur spigot 1.12 tu peux bien sûr utiliser skStuff sans problème.

     

    Pour les blocs je ne pourrait pas t'aider, je ne fais que des modifs de model d'item ^^

    • J'aime 1
  18. Le meilleur est effectivement cubik bien que la version gratuite est limité (Cubik n'est pas un logiciel dédié à Minecraft uniquement, c'est un vrai logiciel complet qui peut être utilisé pour autre chose que MC et de mémoire il coute 20€)

     

    Perso j'utilise MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)

    qui est gratuit et pas très compliqué à utiliser.

     

    Pour les NBT c'est justement l'avantage de passer par optifine/mcpatcher car tu as beaucoup de possibilité, autrement en model vanilla tu as des restrictions https://minecraft.gamepedia.com/Model#Item_tags donc quasi que le tag "damage".

     

    Si tu souhaite conserver un système de durabilité tu vas devoir le créer toi même (ça peut être en affichant la durabilité dans le LORE ou bien créer un customTAG .. ce qui est compliqué car tu dois passer par skript-mirror en code JAVA)

    • J'aime 1
  19. Si tu as télécharger le fichier aliases très fourni disponible je ne sais plus où, il est possible que les oeuf de mob ne soient pas dedans (ce qui était mon cas il y a 2 semaines lors de mon passage en 1.12.2)

    Tu dois donc rajouter ceci dans ton aliases (vérifie d'abord que les oeufs ne sont pas déjà présent bien sûr)

        # -- spawn egg --
       {entity type}:
           experience orb @an = :2
           xp orb = :2
           TNT = :20
           minecart = :40 # < MC 1.5
           boat = :41
           minecart = :42
           minecart with chest = :43
           minecart with furnace = :44
           minecart with TNT = :45
           minecart with hopper = :46
           minecart with spawner = :47
           creeper = :50
           skeleton = :51
           spider = :52
           giant = :53
           zombie = :54
           slime = :55
           ghast = :56
           zombie pigman = :57
           pig[ ]zombie = :57
           enderman @an = :58
           cave spider = :59
           silverfish = :60
           blaze = :61
           magma cube = :62
           ender dragon @an = :63
           wither = :64
           witch = :66
           bat = :65
           pig = :90
           sheep = :91
           cow = :92
           chicken = :93
           squid = :94
           wolf = :95
           mooshroom = :96
           snow golem = :97
           ocelot @an = :98
           iron golem @an = :99
           horse = :100
           villager = :120
           ender crystal = :200
    
       {entity type} spawn egg¦s = 383
       random spawn egg¦s = 383:50-52, 383:54-62, 383:65-66, 383:90-96, 383:98, 383:100, 383:120 # only working eggs

     

    Autrement je me suis rendu compte hier soir que le "player's inventory & loop-item" peut être parfois buggé en 1.12.2 (je dois faire plus de test pour vérifier ça) et il faut parfois utiliser "type of loop-item" ou des trucs du genre pour réparer ce bug

    • J'aime 1
  20. Bien évidement pour avoir des textures modifié avec optifine/mcpatcher/vanilla TU ES OBLIGE DE FAIRE TELECHARGER UN RESSOURCE PACK AUX JOUEURS, impossible de faire autrement même en 1.13 !

     

    Donc oui il est possible de faire des textures personnalisé sans mod et ce en utilisant les models (situé dans le ressource pack)

    Il est possible d'afficher un model a un item en fonction de la durabilité d'un item. C'est à dire qu'une épée en diamant qui n'a jamais servie aura une texture normal, si elle a un peu servi elle aura une texture totalement différente et si elle a beaucoup servi elle aura encore une autre texture.

     

    Il est possible de mettre autant de texture que de point de durabilité que possède l'outil. l'épée en diamant possède 1562 points de durabilité (différent pour chaque outil https://minecraft.gamepedia.com/Sword)

    Il est donc indispensable de bloquer la modification de durabilité d'un item quand on l'utilise. Pour cela plusieurs méthode sont possible comme par exemple: ajouter le NBT "Unbreakable" a cette item.

     

    En skript pour changer la durabilité d'un item tu peux faire :

    set durability of {_item} to 500 #Nécessite peut être un addon ... 

     

    ET DANS LE RESSOURCE PACK :

    Alors là c'est beaucoup plus compliqué en fonction de ce que tu veux faire car tu dois comprendre parfaitement le fonctionnement des model en .json !!

     

    Par exemple dans mon fichier : assets/minecraft/models/item/diamond_sword.json

    {
       "parent": "item/handheld",
       "textures": {
           "layer0": "items/shears"
       },
       "overrides": [
           {"predicate": {"damage": 0.0001},"model": "head/squid"},
           {"predicate": {"damage": 0.0010},"model": "head/bucket"},
           {"predicate": {"damage": 0.0015},"model": "head/hive"}
       ]
    }

     

    J'ai créer un dossier qui se nome "head" a cette emplacement : assets/minecraft/models/head/

    et dedans il y a ce fichier : squid.json

    {
       "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)",
       "textures": {
           "0": "mcbt/squid",
           "1": "mcbt/squid_tentacle",
           "2": "mcbt/squid"
       },
       "display": {
       "thirdperson_righthand": {
           "rotation": [ 0, 0, 0 ],
           "translation": [ 0, -5, 0 ],
           "scale": [ 0.35, 0.5, 0.35 ]
       },
       "head": {
           "rotation": [ 0, 0, 0 ],
           "translation": [ 0, -10, 0 ],
           "scale": [ 1, 1.7, 1 ]
       },
       "ground": {
           "rotation": [ 0, 0, 0 ],
           "translation": [ 0, 0, 0 ],
           "scale": [ 0.3, 0.6, 0.3 ]
       },
       "gui": {
           "rotation": [ 20, 20, 0 ],
           "translation": [ 0, -7, 0 ],
           "scale": [ 0.7, 1, 0.7 ]
       },
       "firstperson_righthand": {
           "rotation": [ 0, 0, 0 ],
           "translation": [ 0, -5, 0 ],
           "scale": [ 0.35, 0.5, 0.35 ]
       }
    },
       "elements": [
           {
               "name": "Cube",
               "from": [ -2.0, 16.0, -2.0 ],
               "to": [ 18.0, 20.0, 18.0 ],
               "faces": {
                   "north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 4.0 ] },
                   "east": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 4.0 ] },
                   "south": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 4.0 ] },
                   "west": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 4.0 ] },
                   "up": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] },
                   "down": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }
               }
           #dsl je ne te donne pas le  code entier :p
           }
       ]
    }

     

    Ce qui te donne un item custom qui peut se poser sur la tête en tant que chapeau ^^

    • J'aime 1
  21. Holà, le code qui suit permet d'obtenir la valeur du premier slots vide dans l'inventaire d'un joueur, ou bien le second, troisième, ..., le dernier ou un au hasard.

    J'ai aussi rajouté une syntaxe pour obtenir l'ensemble des slots vides dans l'inventaire du joueur.

     

    ATTENTION : *Ce code nécessite l'addon skript-mirror

    ** Le code retournera <none> si aucun slot n'est vide

    *** Le code retournera un slot au hasard parmi les slots vides pour la seconde expression SI au moins 1 slot est disponible

     

    plural expression all (empty|available) slots of %player%:
       get:
           set {_p} to expression-1
           if {_p} can't hold 1 minecart:
               return {_null}
           loop integers between 0 and 35:
               set {_item} to type of slot loop-number of inventories of {_p}
               {_item} is air
               add loop-number to {_empty::*}
           return {_empty::*}
    
    expression [the] (0¦%integer%|1¦last|2¦random) (empty|available) slot of %player%:
       get:
           set {_p} to expression-2
           if {_p} can't hold 1 minecart:
               return {_null}
           loop integers between 0 and 35:
               set {_item} to type of slot loop-number of inventories of {_p}
               {_item} is air
               add loop-number to {_empty::*}
               if expression-1 = size of {_empty::*}:
                   exit loop
           if parse mark = 0:
               return {_empty::%expression-1%}
           if parse mark = 1:
               set {_last} to size of {_empty::*}
               return {_empty::%{_last}%}
           return random element out of {_empty::*}

     

     

    Exemple d'utilisation :

    send "%all empty slots of player%"
    
    set slot (1 empty slot of player) of player to stone
    
    set slot (last empty slot of player) of player to stone
    
    loop all players:
       set {_slot.%loop-player%} to  random empty slot of loop-player

×
×
  • 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.