Aller au contenu

Messages recommandés

Posté(e) (modifié)

Version de Minecraft : 1.16.5
Version de Skript : Dernière dev

Bonjours à tous! Le script demandé est ultra complexe, mon codeur et moi avons séché dessus, et j'en recours ainsi à l'expertise générale pour nous aider.

Je demande un script qui permette de classer des joueurs, en fonction d'une variable d'un ratio, dans une variable type "liste" du ratio plus haut au plus bas (Le plus haut ratio en premier, le plus bas en dernier, de façon décroissante)
Puis faire en sorte à ce que les joueurs et leur ratio associés, fassent une commande selon leur classement
 

Description du script :

* Le script sert à classer les joueurs en fonction de leur ratio de "Puissance" et ainsi, de les envoyer en équipe différente et équilibrer les équipes pour un mode de jeu d'arène classées.
* Le script doit faire une seule liste, et faire en sorte que tout les joueurs de cette liste envoie la commande en même temps (Faire un loop de la liste)

Ce type de script permet ainsi d'éviter à ce que tout les meilleurs joueurs se retrouvent dans la même équipe, contre les plus faibles. Que les meilleurs soient forcément l'un contre l'autre et ainsi de suite jusqu'aux joueurs n'ayant pas de ratio ou le ratio le plus bas.
Cela permet aussi de lancer une arène à un instant T en y envoyant tout les joueurs en attente de l'arène en même temps.

Exemple:
======= Loop de la liste =========
Joueur 1: Ratio 5.5  ===> commande entrée /commande 1   (Envoyé en équipe 1)
Joueur 2: Ratio 4.3  ===> commande entrée /commande 2   (Envoyé en équipe 2)
Joueur 3: Ratio 4.1  ===> commande entrée /commande 1   (Envoyé en équipe 1)
Joueur 4: Ratio 3.7  ===> commande entrée /commande 2   (Envoyé en équipe 2)
Joueur 5: Ratio 3.2  ===> commande entrée /commande 2   (Envoyé en équipe 2)
Joueur 6: Ratio 2.1  ===> commande entrée /commande 1   (Envoyé en équipe 1)
======= Fin de la loop de la liste =========

- J'ai déjà fais le système de file d'attente
- J'ai pas besoin des commandes spéciale "commande 1 et 2", je sais les faire 😉
- Liste de players de 6 serait bien, modulable si possible 😄 
- J'ai déjà fais la commande de ratio: (La variable de ratio étant donc "{sql_ratio.%player%}")

on quit:
    set {sql_ratio.%player%} to ({sql_kills.%player%} / {sql_deaths.%player%}) + ({sql_wins.%player%} / {sql_looses.%player%})


Voci la commande de file d'attente et là où j'attend à ce que la loop-check-commande soit intégrée (En fin de code)

command /arene:
    permission: varyal
    cooldown: 20 seconds
    cooldown message: &cVous ne pouvez pas spammer cette commande. &4&l%remaining time% &crestantes.
    trigger:
        if player has metadata value "arena":
            delete metadata value "arena" of player
            message "&aVous venez de quitter la file d'attente des Arènes classées." to player
            play sound "block.note_block.pling" with volume 1.0 to player
            toggle scoreboard of player off
            if {sql_arena} is more than 0:
                remove 1 from {sql_arena}
            if {arena.join} is more than 0:
                remove 1 from {arena.join} 
            if {sql_arena.%player%.join} is more than 0:
                set {sql_arena.%player%.join} to 0
            loop all players:
                if loop-players has metadata value "arena":
                    set line 1 of loop-player's scoreboard to "&eJoueurs dans la file: &6&l%{arena.join}%  "
                    message "&d%player% &ca quitté la file" to loop-players
                    play sound "block.note_block.pling" with volume 0.5 to loop-players
        else:
            if {sql_arena} is less than 5:
                add 1 to {sql_arena}
                add 1 to {arena.join}
                set {sql_arena.%player%.join} to 1
                toggle scoreboard of player on
                message "&aVous venez de rejoindre la file d'attente des Arènes classées." to player
                message "&aVous pouvez quitter la file à tout moment avec &e/arena" to player
                play sound "block.note_block.pling" with volume 1.0 to player
                set title of player's scoreboard to "&6File d'attente"
                set line 2 of player's scoreboard to "&eFile d'attente rejoint&f: &c&lArena"
                set metadata value "arena" of player to true
                loop all players:
                    if loop-players has metadata value "arena":
                        set line 1 of loop-player's scoreboard to "&eJoueurs dans la file: &6&l%{arena.join}%  "
                        message "&d%player% &aa rejoint la file" to loop-players
                        play sound "block.note_block.pling" with volume 0.5 to loop-players
            else if {sql_arena} is 5:
                add 1 to {sql_arena}
                add 1 to {arena.join}
                set {sql_arena.%player%.join} to 1
                toggle scoreboard of player on
                set title of player's scoreboard to "&6File d'attente"
                set line 2 of player's scoreboard to "&eFile d'attente rejoint&f: &c&lArena"
                set metadata value "arena" of player to true
                loop all players:
                    if loop-player has metadata value "arena":
                        #Ici entre la variable liste, et fais en sorte que tout les joueurs ayant
                        #fais /arene fassent la commande, par ordre de leur ratio cf plus haut.
                        #Je vous rassure, tout le code plus haut est bon et fonctionnel.
                        #c'est l'intégration d'une variable par ratio de joueurs et commandes par niveau
                        #décroissant du ratio que je sais pas faire.
                        #Tout le reste je suis bon :D

Merci à ceux qui pourraient apporter leur expertise. 😃
Nous, on a séché après 5 heures de tests en tout genre ^^ (Et pourtant, on s'y connais! :D)

Modifié par tiradorus
Posté(e)

Okay la commu, vous fatiguez pas, avec mon dev on a finis par réussir. Je met la commande en dessous pour les curieux, et ceux qui voudraient prendre exemple.

Posté(e) (modifié)
on first join:
    set {sql_deaths.%player%} to 1
    set {sql_kills.%player%} to 1
    set {sql_wins.%player%} to 1
    set {sql_looses.%player%} to 1

on quit:
    set {_rangevalue.%player%} to ({sql_kills.%player%} / {sql_deaths.%player%}) + ({sql_wins.%player%}  / {sql_looses.%player%})
    set {_tempvar} to random integer between 1 and 1000000
    set {sql_ratio.%player%} to ({_rangevalue.%player%} * 1 + (1 / {_tempvar}))
    if player has metadata value "arena":
        if {arena.join} is more than 0:
            remove 1 from {arena.join}
        delete metadata value "arena" of player
        delete metadata value "launch" of player
        toggle scoreboard of player off
        clear scoreboard of player
        loop all players:
            if loop-value does not have metadata value "arena":
                continue
            set line 1 of loop-value's scoreboard to "&eJoueurs dans la file: &6&l%{arena.join}%  "

command /arene:
    permission: varyal
    cooldown: 20 seconds
    cooldown message: &cVous ne pouvez pas spammer cette commande. &4&l%remaining time% &crestantes.
    trigger:
        if player has metadata value "arena":
            delete metadata value "arena" of player
            message "&aVous venez de quitter la file d'attente des Arènes classées." to player
            play sound "block.note_block.pling" with volume 1.0 to player
            toggle scoreboard of player off
            if {sql_arena} is more than 0:
                remove 1 from {sql_arena}
            if {arena.join} is more than 0:
                remove 1 from {arena.join} 
            if {sql_arena.%player%.join} is more than 0:
                set {sql_arena.%player%.join} to 0
            loop all players:
                if loop-players has metadata value "arena":
                    set line 1 of loop-player's scoreboard to "&eJoueurs dans la file: &6&l%{arena.join}%  "
                    message "&d%player% &ca quitté la file" to loop-players
                    play sound "block.note_block.pling" with volume 0.5 to loop-players
        else:
            if {sql_arena} is less than 5:
                add 1 to {sql_arena}
                add 1 to {arena.join}
                set {sql_arena.%player%.join} to 1
                toggle scoreboard of player on
                message "&aVous venez de rejoindre la file d'attente des Arènes classées." to player
                message "&aVous pouvez quitter la file à tout moment avec &e/arena" to player
                play sound "block.note_block.pling" with volume 1.0 to player
                set title of player's scoreboard to "&6File d'attente"
                set line 2 of player's scoreboard to "&eFile d'attente rejoint&f: &c&lArena"
                set metadata value "arena" of player to true
                loop all players:
                    if loop-players has metadata value "arena":
                        set line 1 of loop-player's scoreboard to "&eJoueurs dans la file: &6&l%{arena.join}%  "
                        message "&d%player% &aa rejoint la file" to loop-players
                        play sound "block.note_block.pling" with volume 0.5 to loop-players
            else if {sql_arena} is 5:
                add 1 to {sql_arena}
                add 1 to {arena.join}
                set {sql_arena.%player%.join} to 1
                toggle scoreboard of player on
                set title of player's scoreboard to "&6File d'attente"
                set line 2 of player's scoreboard to "&eFile d'attente rejoint&f: &c&lArena"
                set metadata value "arena" of player to true
                loop all players:
                    if loop-player has metadata value "arena":
                        set metadata value "command" of loop-player to true
                        add loop-players to {_pplist::*}
                        add {sql_ratio.%loop-player%} to {_bestplayers::*}
                set {_palist::*} to sorted {_bestplayers::*}
                set {score.test} to 0
                loop {_palist::*}:
                    if {score.test} = 1:
                        set {score.test} to 0
                        loop all players:
                            if loop-player has metadata value "arena":
                                if {sql_ratio.%loop-player%} = {_palist::%loop-index%}:
                                    make loop-player execute command "/startarena1"
                                    set metadata value "launch" of loop-player to true
                    
                    else:
                        set {score.test} to 1
                        loop all players:
                            if loop-player has metadata value "arena":
                                if {sql_ratio.%loop-player%} = {_palist::%loop-index%}:
                                    make loop-player execute command "/startarena2"
                                    set metadata value "launch" of loop-player to true
            else if {sql_arena} is more than 5:
                add 1 to {temp.arena}
                add 1 to {sql_arena}
                add 1 to {arena.join}
                set {sql_arena.%player%.join} to 1
                if {temp.arena} is 1:
                    toggle scoreboard of player on
                    set title of player's scoreboard to "&6File d'attente"
                    set line 2 of player's scoreboard to "&eFile d'attente rejoint&f: &c&lArena"
                    play sound "block.note_block.pling" with volume 1.0 to player
                    set metadata value "arena" of player to true
                    message "&aUne arène est déjà en cours, vous allez être envoyé en" to player
                    message "&apartie quand un deuxième joueur aura joint" to player
                    loop all players:
                        if loop-players has metadata value "arena":
                            set line 1 of loop-player's scoreboard to "&eJoueurs dans la file: &6&l%{temp.arena}%&f/&4&l2  "
                            message "&d%player% &aa rejoint la file" to loop-players
                            play sound "block.note_block.pling" with volume 0.5 to loop-players
                if {temp.arena} is 2:
                    toggle scoreboard of player on
                    set title of player's scoreboard to "&6File d'attente"
                    set line 2 of player's scoreboard to "&eFile d'attente rejoint&f: &c&lArena"
                    play sound "block.note_block.pling" with volume 1.0 to player
                    set metadata value "arena" of player to true
                    loop all players:
                        if loop-players has metadata value "arena":
                            set line 1 of loop-player's scoreboard to "&eJoueurs dans la file: &a&l%{temp.arena}%&f/&2&l2  "
                            message "&d%player% &aa rejoint la file" to loop-players
                            play sound "block.note_block.pling" with volume 0.5 to loop-players
                            set metadata value "command" of loop-player to true
                            make loop-player execute command "/startarena3"

 

Modifié par tiradorus
Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.
×
×
  • 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.