tiradorus Posté(e) le 14 mai 2021 Posté(e) le 14 mai 2021 (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é le 14 mai 2021 par tiradorus
tiradorus Posté(e) le 14 mai 2021 Auteur Posté(e) le 14 mai 2021 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.
tiradorus Posté(e) le 14 mai 2021 Auteur Posté(e) le 14 mai 2021 (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é le 14 mai 2021 par tiradorus
Yghore Posté(e) le 15 mai 2021 Posté(e) le 15 mai 2021 Le sujet a été résolu. Il a donc été verrouillé. Cordialement, l'équipe.
Messages recommandés