Aller au contenu
  • 0

Problème (duplication de messages loop-player)


Question

Posté(e)

Bonjour,

j'ai établi un long Skript où il y a démarrage d'une partie.

Les messages sont envoyés aux joueurs connectés, et cela fonctionne très bien les messages sont reçus en même temps par tous les joueurs.

Cependant, lorsque le Skript recommence en boucle plus de deux fois, les joueurs reçoivent encore les messages mais ceux-ci sont dupliqués x2, puis x4 et cela fait bug tout le serveur.

Je voudrai que le Skript reparte du début (c'est déjà fait), MAIS que les joueurs reçoivent les message x1 et pas dupliqué je ne sais pas combien de fois.

J'ai tout essayé, et je n'arrive pas à corriger ce problème.

NB : Le Skript ne contient aucune erreur de code et il se charge correctement.

 

Merci d'avance.

 

Code :

 

function nbinsuffisant(p :player):
 send "&6[WWM] &cIl n'y a pas assez de joueurs pour commencer une partie." to {_p}
 send "&6&lAméricains : &a%{nb.americain}% joueur(s)" to {_p}
 send "&6&lAllemands : &a%{nb.allemand}% joueur(s)" to {_p}
 send "&6&lIl faut au minimum &33 joueurs &6&lde chaque côté" to {_p}
 make console execute command "/playsound random.successful_hit %{_p}%"
 wait 10 seconds
 make console execute command "/start2"
 stop

function deserteur(p: player):
 send "&6[WWM] &cVos compatriotes se battent pour leur nation ! Rejoignez-les dès que possible !" to {_p}
 stop

function timer(p: player):
 set {freeze.%{_p}%} to true
 clear {score.allemand}
 clear {score.americain}
 set {score.allemand} to 0
 set {score.americain} to 0
 send "&6&lDébut du combat dans :" to {_p}
 wait 1 second
 send "&c&l5" to {_p}
 make console execute command "/playsound random.successful_hit %{_p}%"
 wait 1 second
 send "&c&l4" to {_p}
 make console execute command "/playsound random.successful_hit %{_p}%"
 wait 1 second
 send "&6&l3" to {_p}
 make console execute command "/playsound random.successful_hit %{_p}%"
 wait 1 second
 send "&6&l2" to {_p}
 make console execute command "/playsound random.successful_hit %{_p}%"
 wait 1 second
 send "&a&l1" to {_p}
 make console execute command "/playsound random.successful_hit %{_p}%"
 wait 1 second
 send "&3&lALLEZ-Y !" to {_p}
 make console execute command "/playsound records.ward %{_p}%"
 make console execute command "/playsound records.11 %{_p}%"
 set {freeze.%{_p}%} to false
 set {timer} to false
 set {start} to true
 wait 2 seconds
 make console execute command "/start2"
 stop

function victoireamerique(p: player):
 set {freeze.%{_p}%} to true
 send "&a&lScore : &3&lAllemagne : &c%{score.allemand}% point(s)" to {_p}
 send "            &3&lAmérique : &c%{score.americain}% point(s)" to {_p}
 send "&6&lLes &3Américains &6ont gagné !" to {_p}
 if {americain.%{_p}%::*} is true:
   make console execute command "/playsound records.mall %{_p}%"
   make console execute "/money give %{_p}% 250"
   send "&a&lVous avez gagné le combat ! Vous remportez &3250 $" to {_p}
   wait 13 seconds
   set {freeze.%{_p}%} to false
   clear {score.americain}
   clear {score.allemand}
   clear {_p}'s inventory
   set {americain.%{_p}%::*} to false
   set {allemand.%{_p}%::*} to false
   make console execute command "/pex user %{_p}% group set Deserteur"
   make console execute command "/spawn %{_p}%"
   clear {nb.americain}
   clear {nb.allemand}
   set {freeze.%{_p}%} to false
   set {start} to false
   set {paix} to true
   make console execute command "/start2"
 else:
   if {allemand.%{_p}%::*} is true:
     make console execute command "/playsound records.cat %{_p}%"
     send "&c&lVous avez perdu le combat... Vous serez plus fort la prochaine fois !" to {_p}
     wait 13 seconds
     set {freeze.%{_p}%} to false
     clear {score.americain}
     clear {score.allemand}
     clear {_p}'s inventory
     set {americain.%{_p}%::*} to false
     set {allemand.%{_p}%::*} to false
     make console execute command "/pex user %{_p}% group set Deserteur"
     make console execute command "/spawn %{_p}%"
     clear {nb.americain}
     clear {nb.allemand}
     set {freeze.%{_p}%} to false
     set {start} to false
     set {paix} to true
     make console execute command "/start2"
     stop

function victoireallemagne(p: player):
 set {freeze.%{_p}%} to true
 send "&a&lScore : &3&lAllemagne : &c%{score.allemand}% point(s)" to {_p}
 send "            &3&lAmérique : &c%{score.americain}% point(s)" to {_p}
 send "&6&lLes &3Allemands &6ont gagné !" to {_p}
 if {allemand.%{_p}%::*} is true:
   make console execute command "/playsound records.mall %{_p}%"
   make console execute "/money give %{_p}% 250"
   send "&a&lVous avez gagné le combat ! Vous remportez &3250 $" to {_p}
   wait 13 seconds
   set {freeze.%{_p}%} to false
   clear {score.americain}
   clear {score.allemand}
   clear {_p}'s inventory
   set {americain.%{_p}%::*} to false
   set {allemand.%{_p}%::*} to false
   make console execute command "/pex user %{_p}% group set Deserteur"
   make console execute command "/spawn %{_p}%"
   clear {nb.americain}
   clear {nb.allemand}
   set {freeze.%{_p}%} to false
   set {start} to false
   set {paix} to true
   make console execute command "/start2"
 else:
   if {americain.%{_p}%::*} is true:
     make console execute command "/playsound records.cat %{_p}%"
     send "&c&lVous avez perdu le combat... Vous serez plus fort la prochaine fois !" to {_p}
     wait 13 seconds
     set {freeze.%{_p}%} to false
     clear {score.americain}
     clear {score.allemand}
     clear {_p}'s inventory
     set {americain.%{_p}%::*} to false
     set {allemand.%{_p}%::*} to false
     make console execute command "/pex user %{_p}% group set Deserteur"
     make console execute command "/spawn %{_p}%"
     clear {nb.americain}
     clear {nb.allemand}
     set {freeze.%{_p}%} to false
     set {start} to false
     set {paix} to true
     make console execute command "/start2"
     stop

function enattente(p: player):
 wait 5 seconds
 send "nope" to {_p}
 make console execute command "/start2"
 stop

function erreur(p: player):
 send "&cErreur, démmarage de la partie impossible" to {_p}
 wait 60 seconds
 make console execute command "/start2"
 stop

function tempsrestant(p: player):
 send "&a&lScore : &3&lAllemagne : &c%{score.allemand}% point(s)" to {_p}
 send "            &3&lAmérique : &c%{score.americain}% point(s)" to {_p}
 make console execute command "/playsound random.successful_hit %{_p}%"



every 30 seconds:
   loop all players:
       if {start} is true:
           tempsrestant(loop-player)

command /start2:
   trigger:
       if {paix} is not set:
           set {paix} to true
       if {paix} is true:
           send "&6[WWM] &3Entrée en période de paix, reprise du combat dans &c3 minutes" to all players
           make console execute command "/playsound random.successful_hit %all players%"
           wait 5 seconds
           send "&6[WWM] &3Reprise du combat dans &c1 minute" to all players
           make console execute command "/playsound random.successful_hit %all players%"
           wait 10 seconds
           send "&6[WWM] &3Fin de la période de paix, reprise du combat !" to all players
           make console execute command "/playsound random.successful_hit %all players%"
           set {timer} to true
           set {paix} to false
           make console execute command "/start2"
           stop
       else:
           if {timer} is true:
               loop all players:
                   set {nb.americain} to {nb.americain} parsed as an integer
                   set {nb.allemand} to {nb.allemand} parsed as an integer
                   if {nb.americain} >= 1:
                       if {nb.allemand} >= 1:
                           if loop-player has permission "wwm.game":
                               timer(loop-player)
                               stop

                           else:
                               deserteur(loop-player)

                       else:
                           nbinsuffisant(loop-player)

                   else:
                       nbinsuffisant(loop-player)
               stop

           else:
               if {start} is true:
                   if {score.americain} >= 60:
                       loop all players:
                           if loop-player has permission "wwm.game":
                               victoireamerique(loop-player)
                       stop

                   else:
                       if {score.allemand} >= 60:
                           loop all players:
                               if loop-player has permission "wwm.game":
                                   victoireallemagne(loop-player)
                           stop

                       else:
                           loop all players:
                               if loop-player has permission "wwm.game":
                                   enattente(loop-player)
                               else:
                                   wait 5 seconds
                                   make console execute command "/start2"
                           stop


               else:
                   loop all players:
                       erreur(loop-player)
                   stop

command /start:
   trigger:
       if player has permission "wwm.moderation":
           make console execute command "/start2"
       else:
           send "&6[WWM] &cVous n'avez pas la permission d'accéder à cette commande"

 

Vidéo du problème :

 

https://www.youtube.com/watch?v=Q-fEWpw6yQ4

25 réponses à cette question

Messages recommandés

  • 0
Posté(e)

J'ai parcouru ton code, à première vue rien d'étonnant ou de problématique, mais j'ai pu manquer quelque chose.

Penses-tu bien à supprimer/réinitialiser toutes tes variables à la fin d'une partie ? Si les messages doublent à chaque parties relancées, le problème vient peut-être de là.

Un peu plus de détail sur les messages : ils sont simplement répétés ? est-ce qu'ils sont tous bien à leurs place (ils apparaissent au bon moment, mais en double/quadruple,... Ou alors ils apparaissent de manière aléatoire, au mauvais moment.. ) ? Est-ce que cela arrive avec tout les messages, ou seulement ceux de début/milieu/fin de partie ? Est-ce que les autres instructions sont elles aussi répétées (les playsounds, etc..) ?

Une autre question, comment fait-tu pour régler le problème et relancer une partie normale ? Est-ce qu'il suffit de recharger le skript (avec /sk reload jeu.sk) ? Ou alors il faut carrément relancer le serveur ? À moins que tu n'ai jamais réussi à le régler ? :o

 

Je vois pas trop d'où peut venir l'erreur actuellement, peut-être qu'avec tes réponses on avancera :)

PS: désolé si ça fait un peu interrogatoire, mais je préfère poser un max de question d'un coup, et dans le tas de réponse il y en a toujours des qui sont utiles ;)

  • 0
Posté(e)
J'ai parcouru ton code, à première vue rien d'étonnant ou de problématique, mais j'ai pu manquer quelque chose.

Penses-tu bien à supprimer/réinitialiser toutes tes variables à la fin d'une partie ? Si les messages doublent à chaque parties relancées, le problème vient peut-être de là.

Un peu plus de détail sur les messages : ils sont simplement répétés ? est-ce qu'ils sont tous bien à leurs place (ils apparaissent au bon moment, mais en double/quadruple,... Ou alors ils apparaissent de manière aléatoire, au mauvais moment.. ) ? Est-ce que cela arrive avec tout les messages, ou seulement ceux de début/milieu/fin de partie ? Est-ce que les autres instructions sont elles aussi répétées (les playsounds, etc..) ?

Une autre question, comment fait-tu pour régler le problème et relancer une partie normale ? Est-ce qu'il suffit de recharger le skript (avec /sk reload jeu.sk) ? Ou alors il faut carrément relancer le serveur ? À moins que tu n'ai jamais réussi à le régler ? :eek:

 

Je vois pas trop d'où peut venir l'erreur actuellement, peut-être qu'avec tes réponses on avancera :)

PS: désolé si ça fait un peu interrogatoire, mais je préfère poser un max de question d'un coup, et dans le tas de réponse il y en a toujours des qui sont utiles ;)

 

Bonjour, merci de ta réponse et merci de t'être penché sur mon code.

En ce qui concerne les variables, le problème ne vient pas de là je pense car oui elles sont clear en fin de partie mais le bug des messages survient en cours de partie et pas lors de l'arrêt de celle-ci. Le problème des messages arrive à partir du moment où il y a plus d'un joueur connecté. Quand je test le code en étant tout seul sur le serveur il n'y a aucun bug, les messages apparaissent correctement et ne sont pas dupliqués. Cependant, lorsqu'un deuxième joueur (ou plus) est connecté, les messages s'envoient en dupliqués x2, puis x4 etc et de plus en plus. En ce qui concerne l'ordre des messages, ils sont envoyés dans le bon ordre, et dans le bon temps, mais ils sont dupliqués, cela arrive avec tous les messages. Il n'y a que les messages qui sont répétés, pas de playsound ni rien d'autre. Pour arrêter la partie où elle s'arrête seule grâce à la détection de la réussite de l'objectif, où il faut reload le skript, mais je ferai un système avec une variable pour l'arrêter avec une commande.

Je ne sais pas d'où cela peut venir, mais si quelqu'un sait, ça m'arrangerai vraiment.

Merci

 

Voici une vidéo explicative pour mieux comprendre mon problème : https://www.youtube.com/watch?v=Q-fEWpw6yQ4

  • 0
Posté(e)

D'accord. Merci pour la vidéo c'est bien plus clair. Mais vu tes réponses j'ai du mal à voir d'où peut venir l'erreur.

Ça ne résolverait pas l'erreur, mais peut être qu'au lieu de passer par un "loop all-players", tu pourrais faire simplement un "broadcast", et pour la commande /playsound, remplacer le "%{_p}%" par "@a" pour viser tout les joueurs en même temps. Tout ceci sans passer par la fonction temprestant() mais bien directement dans le "every 30 seconds". Encore une fois on ne ferai que contourner l'erreur, et ça ne fonctionnerai que pour le temps restant et le manque de joueur. Mais c'est toujours ça, car sinon je ne vois absolument pas où quelque chose est mal fait.

  • 0
Posté(e)
D'accord. Merci pour la vidéo c'est bien plus clair. Mais vu tes réponses j'ai du mal à voir d'où peut venir l'erreur.

Ça ne résolverait pas l'erreur, mais peut être qu'au lieu de passer par un "loop all-players", tu pourrais faire simplement un "broadcast", et pour la commande /playsound, remplacer le "%{_p}%" par "@a" pour viser tout les joueurs en même temps. Tout ceci sans passer par la fonction temprestant() mais bien directement dans le "every 30 seconds". Encore une fois on ne ferai que contourner l'erreur, et ça ne fonctionnerai que pour le temps restant et le manque de joueur. Mais c'est toujours ça, car sinon je ne vois absolument pas où quelque chose est mal fait.

 

Oui mais malheureusement mon skript ne serait pas entièrement utilisable...

C'est un mystère, je ne sais vraiment pas comment faire pour résoudre ce problème. Il faudrait que quelqu'un teste le code et qu'il me dise si ça lui fait pareil, mais là j'ai tout essayé et je ne vois pas..

  • 0
Posté(e)

Dis moi ce qu'il te dis dans le chat (normalement ton pseudo)

function nbinsuffisant(p :player):
 broadcast "%{_p}%"
 send "&6[WWM] &cIl n'y a pas assez de joueurs pour commencer une partie." to {_p}
 send "&6&lAméricains : &a%{nb.americain}% joueur(s)" to {_p}
 send "&6&lAllemands : &a%{nb.allemand}% joueur(s)" to {_p}
 send "&6&lIl faut au minimum &33 joueurs &6&lde chaque côté" to {_p}
 make console execute command "/playsound random.successful_hit %{_p}%"
 wait 10 seconds
 make console execute command "/start2"
 stop

  • 0
Posté(e)
Dis moi ce qu'il te dis dans le chat (normalement ton pseudo)

function nbinsuffisant(p :player):
 broadcast "%{_p}%"
 send "&6[WWM] &cIl n'y a pas assez de joueurs pour commencer une partie." to {_p}
 send "&6&lAméricains : &a%{nb.americain}% joueur(s)" to {_p}
 send "&6&lAllemands : &a%{nb.allemand}% joueur(s)" to {_p}
 send "&6&lIl faut au minimum &33 joueurs &6&lde chaque côté" to {_p}
 make console execute command "/playsound random.successful_hit %{_p}%"
 wait 10 seconds
 make console execute command "/start2"
 stop

 

Effectivement le broadcast me donne mon pseudo.

Par contre, quand il y a deux joueurs connectés, cela me donne les noms des deux joueurs connectés (sur un seul et même joueur).

 

Et ce qui est très etonnant, regarde la disposition des messages, celle-ci est extrêmement bizarre car elle est différente sur 2 joueurs, pourtant le code est le même pour les deux, j'ai simplement rajouté le broadcast que tu m'as donné.

 

Screen : http://prntscr.com/ff7d8p

  • 0
Posté(e)
Effectivement le broadcast me donne mon pseudo.

Par contre, quand il y a deux joueurs connectés, cela me donne les noms des deux joueurs connectés (sur un seul et même joueur).

 

Et ce qui est très etonnant, regarde la disposition des messages, celle-ci est extrêmement bizarre car elle est différente sur 2 joueurs, pourtant le code est le même pour les deux, j'ai simplement rajouté le broadcast que tu m'as donné.

 

Screen : http://prntscr.com/ff7d8p

C'est normal ça vu que les joueurs ne recoivent pas les messages en même temps

Sinon est ce qu'il envois 2 fois ton pseudo ?

  • 0
Posté(e)
C'est normal ça vu que les joueurs ne recoivent pas les messages en même temps

Sinon est ce qu'il envois 2 fois ton pseudo ?

 

Non il envoie le pseudo qu'une seule fois.

  • 0
Posté(e)
Non il envoie le pseudo qu'une seule fois.

Il envois le pseudo qu'une seule fois mais il envois le message 2 fois ? Si oui c'est vraiment bizarre :/

  • 0
Posté(e)
Il envois le pseudo qu'une seule fois mais il envois le message 2 fois ? Si oui c'est vraiment bizarre :/

 

Bah le message qu'il envoit c'est les noms de tous les joueurs, regarde le screen que j'ai envoyé

  • 0
Posté(e)

Essaye ce code :

[spoiler=Skript]

function Timer(p: player):
   set {freeze.%{_p}%} to true
   clear {score.allemand}
   clear {score.americain}
   set {score.allemand} to 0
   set {score.americain} to 0
   send "&6&lDébut du combat dans :" to {_p}
   wait 1 second
   send "&c&l5" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&c&l4" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&6&l3" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&6&l2" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&a&l1" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&3&lALLEZ-Y !" to {_p}
   make console execute "/playsound records.ward %{_p}%"
   make console execute "/playsound records.11 %{_p}%"
   set {freeze.%{_p}%} to false
   set {timer} to false
   set {start} to true

function Victoire(p: player, t: text):
   set {freeze.%{_p}%} to true
   send "&a&lScore : &3&lAllemagne : &c%{score.allemand}% point(s)" to {_p}
   send "                &3&lAmérique : &c%{score.americain}% point(s)" to {_p}
   if {_t} is "allemand":
       send "&6&lLes &3Allemands &6ont gagné !" to {_p}
       set {_t2} to "americain"
   else:
       send "&6&lLes &3Américains &6ont gagné !" to {_p}
       set {_t2} to "allemand"
   if {%{_t}%.%{_p}%::*} is true:
       make console execute "/playsound records.mall %{_p}%"
       make console execute "/money give %{_p}% 250"
       send "&a&lVous avez gagné le combat ! Vous remportez &3250 $" to {_p}
   if {%{_t2}%.%{_p}%::*} is true:
       make console execute "/playsound records.cat %{_p}%"
       send "&c&lVous avez perdu le combat... Vous serez plus fort la prochaine fois !" to {_p}
   wait 13 seconds
   set {freeze.%{_p}%} to false
   clear {score.americain}
   clear {score.allemand}
   clear {_p}'s inventory
   set {americain.%{_p}%::*} to false
   set {allemand.%{_p}%::*} to false
   make console execute "/pex user %{_p}% group set Deserteur"
   make console execute "/spawn %{_p}%"
   clear {nb.americain}
   clear {nb.allemand}
   set {freeze.%{_p}%} to false
   set {start} to false
   set {paix} to true

every 30 seconds:
   if {start} is true:
       broadcast "&a&lScore : &3&lAllemagne : &c%{score.allemand}% point(s)"
       broadcast "                 &3&lAmérique : &c%{score.americain}% point(s)"
       make console execute "/playsound random.successful_hit %players%"

on load:
   {paix} is not set
   set {paix} to true

command /start:
   trigger:
       if sender has permission "wwm.moderation":
           if {paix} is true:
               broadcast "&6[WWM] &3Entrée en période de paix, reprise du combat dans &c3 minutes"
               make console execute "/playsound random.successful_hit %players%"
               wait 5 seconds
               broadcast "&6[WWM] &3Reprise du combat dans &c1 minute"
               make console execute "/playsound random.successful_hit %players%"
               wait 10 seconds
               broadcast "&6[WWM] &3Fin de la période de paix, reprise du combat !"
               make console execute "/playsound random.successful_hit %players%"
               set {timer} to true
               set {paix} to false
               make console execute "/start"
           else:
               if {timer} is true:
                   set {nb.americain} to {nb.americain} parsed as an integer
                   set {nb.allemand} to {nb.allemand} parsed as an integer
                   if {nb.americain} or {nb.allemand} >= 1:
                       loop all players:
                           if loop-player has permission "wwm.game":
                               Timer(loop-player)
                           else:
                               send "&6[WWM] &cVos compatriotes se battent pour leur nation ! Rejoignez-les dès que possible !" to loop-player
                       wait 8 seconds
                       make console execute "/start"
                   else:
                       broadcast "&6[WWM] &cIl n'y a pas assez de joueurs pour commencer une partie."
                       broadcast "&6&lAméricains : &a%{nb.americain}% joueur(s)"
                       broadcast "&6&lAllemands : &a%{nb.allemand}% joueur(s)"
                       broadcast "&6&lIl faut au minimum &33 joueurs &6&lde chaque côté"
                       make console execute "/playsound random.successful_hit %players%"
                       wait 10 seconds
                       make console execute "/start"
               else:
                   if {start} is true:
                       if {score.americain} >= 60:
                           loop all players:
                               if loop-player has permission "wwm.game":
                                   Victoire(loop-player, "americain")
                           wait 13 seconds
                           make console execute "start"
                       else if {score.allemand} >= 60:
                           loop all players:
                               if loop-player has permission "wwm.game":
                                   Victoire(loop-player, "allemand")
                           wait 13 seconds
                           make console execute "start"
                       else:
                           wait 5 seconds
                           loop all players:
                               if loop-player has permission "wwm.game":
                                   send "&6&lNope" to loop-player
                           make console execute "/start"
                   else:
                       broadcast "&cErreur, démmarage de la partie impossible"
                       wait 60 seconds
                       make console execute "/start"
       else:
           send "&6[WWM] &cVous n'avez pas la permission d'accéder à cette commande"

 

 

EDIT: j'ai tout supprimé le message sans faire exprès :'(

  • 0
Posté(e)
Essaye ce code:

[spoiler=Skript]

function Timer(p: player):
   set {freeze.%{_p}%} to true
   clear {score.allemand}
   clear {score.americain}
   set {score.allemand} to 0
   set {score.americain} to 0
   send "&6&lDébut du combat dans :" to {_p}
   wait 1 second
   send "&c&l5" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&c&l4" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&6&l3" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&6&l2" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&a&l1" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&3&lALLEZ-Y !" to {_p}
   make console execute "/playsound records.ward %{_p}%"
   make console execute "/playsound records.11 %{_p}%"
   set {freeze.%{_p}%} to false
   set {timer} to false
   set {start} to true

function Victoire(p: player, t: text):
   set {freeze.%{_p}%} to true
   send "&a&lScore : &3&lAllemagne : &c%{score.allemand}% point(s)" to {_p}
   send "              &3&lAmérique : &c%{score.americain}% point(s)" to {_p}
   if {_t} is "allemand":
       send "&6&lLes &3Allemands &6ont gagné !" to {_p}
       set {_t2} to "americain"
   else:
       send "&6&lLes &3Américains &6ont gagné !" to {_p}
       set {_t2} to "allemand"
   if {%{_t}%.%{_p}%::*} is true:
       make console execute "/playsound records.mall %{_p}%"
       make console execute "/money give %{_p}% 250"
       send "&a&lVous avez gagné le combat ! Vous remportez &3250 $" to {_p}
   if {%{_t2}%.%{_p}%::*} is true:
       make console execute "/playsound records.cat %{_p}%"
       send "&c&lVous avez perdu le combat... Vous serez plus fort la prochaine fois !" to {_p}
   wait 13 seconds
   set {freeze.%{_p}%} to false
   clear {score.americain}
   clear {score.allemand}
   clear {_p}'s inventory
   set {americain.%{_p}%::*} to false
   set {allemand.%{_p}%::*} to false
   make console execute "/pex user %{_p}% group set Deserteur"
   make console execute "/spawn %{_p}%"
   clear {nb.americain}
   clear {nb.allemand}
   set {freeze.%{_p}%} to false
   set {start} to false
   set {paix} to true

every 30 seconds:
   if {start} is true:
       broadcast "&a&lScore : &3&lAllemagne : &c%{score.allemand}% point(s)"
       broadcast "              &3&lAmérique : &c%{score.americain}% point(s)"
       make console execute "/playsound random.successful_hit %players%"

on load:
   {paix} is not set
   set {paix} to true

command /start:
   trigger:
       if sender has permission "wwm.moderation":
           if {paix} is true:
               broadcast "&6[WWM] &3Entrée en période de paix, reprise du combat dans &c3 minutes"
               make console execute "/playsound random.successful_hit %players%"
               wait 5 seconds
               broadcast "&6[WWM] &3Reprise du combat dans &c1 minute"
               make console execute "/playsound random.successful_hit %players%"
               wait 10 seconds
               broadcast "&6[WWM] &3Fin de la période de paix, reprise du combat !"
               make console execute "/playsound random.successful_hit %players%"
               set {timer} to true
               set {paix} to false
               make console execute "/start"
           else:
               if {timer} is true:
                   set {nb.americain} to {nb.americain} parsed as an integer
                   set {nb.allemand} to {nb.allemand} parsed as an integer
                   if {nb.americain} or {nb.allemand} >= 1:
                       loop all players:
                           if loop-player has permission "wwm.game":
                               Timer(loop-player)
                           else:
                               send "&6[WWM] &cVos compatriotes se battent pour leur nation ! Rejoignez-les dès que possible !" to loop-player
                           wait 8 seconds
                           make console execute "/start"
                   else:
                       broadcast "&6[WWM] &cIl n'y a pas assez de joueurs pour commencer une partie."
                       broadcast "&6&lAméricains : &a%{nb.americain}% joueur(s)"
                       broadcast "&6&lAllemands : &a%{nb.allemand}% joueur(s)"
                       broadcast "&6&lIl faut au minimum &33 joueurs &6&lde chaque côté"
                       make console execute "/playsound random.successful_hit %players%"
                       wait 10 seconds
                       make console execute "/start"
               else:
                   if {start} is true:
                       if {score.americain} >= 60:
                           loop all players:
                               if loop-player has permission "wwm.game":
                                   Victoire(loop-player, "americain")
                           wait 13 seconds
                           make console execute "start"
                       else if {score.allemand} >= 60:
                           loop all players:
                               if loop-player has permission "wwm.game":
                                   Victoire(loop-player, "allemand")
                           wait 13 seconds
                           make console execute "start"
                       else:
                           wait 5 seconds
                           loop all players:
                               if loop-player has permission "wwm.game":
                                   send "&6&lNope" to loop-player
                               make console execute "/start"
                   else:
                       broadcast "&cErreur, démmarage de la partie impossible"
                       wait 60 seconds
                       make console execute "/start"
       else:
           send "&6[WWM] &cVous n'avez pas la permission d'accéder à cette commande"

 

 

Je l'ai optimisé etc et je pense que le problème vient du fait que tu exécute la commande /start dans un loop all players donc si il y a 2 joueurs la commande est exécuté 2 fois donc le problème vient de là.

 

Merci beaucoup, je testerai dans l'après-midi et je te dirai ce qu'il en est.

ÉDIT : Oui, j'utilise Sublime Text que je trouve bien plus performant, et j'ai le thème et le langage Skript installé ;)

 

EDIT 2 : J'ai effectivement 2 erreurs qui ne m'ont pas l'air très graves, les voici :

Screen : http://prntscr.com/fffyy4

 

EDIT 3 : Mis à part l'erreur, tout à l'air de fonctionner correctement, les messages ne sont plus dupliqués.

  • 0
Posté(e)
Tu as quel version de SkQuery ?

 

J'ai la version 3.0 de SkQuery.

 

Il me semble que c'est à cause du "wait ..." dans une loop cela cause pas mal de problème :/

 

Peut-être, je n'en sais rien...

  • 0
Posté(e)
Il me semble que c'est à cause du "wait ..." dans une loop cela cause pas mal de problème :/

Ah oui effectivement je pensais avoir enlever tout les wait dans les loop mais il y en a encore un

J'ai éditer mon message

Sinon pour les 2 erreurs c'est vraiment bizarre.. tu as quel version de Spigot ?

  • 0
Posté(e)
Ah oui effectivement je pensais avoir enlever tout les wait dans les loop mais il y en a encore un

J'ai éditer mon message

Sinon pour les 2 erreurs c'est vraiment bizarre.. tu as quel version de Spigot ?

 

Super, merci.

Par contre je comprend pas pourquoi la condition n'est pas comprise, SkQuery et Skript sont à jour pourtant. J'ai la dernière version de Skript.

Je ne suis pas sur Spigot, mais sous KCauldron 1647.201

  • 0
Posté(e)
Super, merci.

Par contre je comprend pas pourquoi la condition n'est pas comprise, SkQuery et Skript sont à jour pourtant. J'ai la dernière version de Skript.

Je ne suis pas sur Spigot, mais sous KCauldron 1647.201

La dernière version de Skript donc la dev27f ?

Si tu as pris Skript sur Bukkit, il est plus mis à jour depuis longtemps donc je te conseille la dev25 de Bensku

https://github.com/bensku/Skript/releases/download/dev25/Skript.jar

  • 0
Posté(e)
Je suis en 1.7.10, et la version Skript que tu m'as donné n'est pas reconnue/compatible avec mon serveur.

Ah :/ fais /ver Skript , il te dit qu'elle version ?

  • 0
Posté(e)

Est ce que tu as la même erreur avec ce code (pour test) :

function Test(p: player, t: text):
   send "%{_t}%" to {_p}

command /test:
   trigger:
       Test(player, "test")

  • 0
Posté(e)
Est ce que tu as la même erreur avec ce code (pour test) :

function Test(p: player, t: text):
   send "%{_t}%" to {_p}

command /test:
   trigger:
       Test(player, "test")

 

Oui j'ai exactement la même erreur..

EDIT : J'ai légèrement modifié ton code pour faire en sorte de ne plus avoir d'erreur, et ma modification s'est montrée concluante.

A présent, je ne distingue plus de bug de messages, et le Skript se déroule exactement comme je l'avais souhaité. Merci beaucoup !

 

Code modifié :

function Timer(p: player):
   set {freeze.%{_p}%} to true
   clear {score.allemand}
   clear {score.americain}
   set {score.allemand} to 0
   set {score.americain} to 0
   send "&6&lDébut du combat dans :" to {_p}
   wait 1 second
   send "&c&l5" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&c&l4" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&6&l3" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&6&l2" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&a&l1" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&3&lALLEZ-Y !" to {_p}
   make console execute "/playsound records.ward %{_p}%"
   make console execute "/playsound records.11 %{_p}%"
   set {freeze.%{_p}%} to false
   set {timer} to false
   set {start} to true

function VictoireAm(p: player):
   set {_t} to "americain"
   set {_t2} to "allemand"
   set {freeze.%{_p}%} to true
   send "&a&lScore : &3&lAllemagne : &c%{score.allemand}% point(s)" to {_p}
   send "                &3&lAmérique : &c%{score.americain}% point(s)" to {_p}
   if {_t} is "allemand":
       send "&6&lLes &3Allemands &6ont gagné !" to {_p}
       set {_t2} to "americain"
   else:
       send "&6&lLes &3Américains &6ont gagné !" to {_p}
       set {_t2} to "allemand"
   if {%{_t}%.%{_p}%::*} is true:
       make console execute "/playsound records.mall %{_p}%"
       make console execute "/money give %{_p}% 250"
       send "&a&lVous avez gagné le combat ! Vous remportez &3250 $" to {_p}
   if {%{_t2}%.%{_p}%::*} is true:
       make console execute "/playsound records.cat %{_p}%"
       send "&c&lVous avez perdu le combat... Vous serez plus fort la prochaine fois !" to {_p}
   wait 13 seconds
   set {freeze.%{_p}%} to false
   clear {score.americain}
   clear {score.allemand}
   clear {_p}'s inventory
   set {americain.%{_p}%::*} to false
   set {allemand.%{_p}%::*} to false
   make console execute "/pex user %{_p}% group set Deserteur"
   make console execute "/spawn %{_p}%"
   clear {nb.americain}
   clear {nb.allemand}
   set {freeze.%{_p}%} to false
   set {start} to false
   set {paix} to true

function VictoireAll(p: player):
   set {_t} to "allemand"
   set {_t2} to "americain"
   set {freeze.%{_p}%} to true
   send "&a&lScore : &3&lAllemagne : &c%{score.allemand}% point(s)" to {_p}
   send "                &3&lAmérique : &c%{score.americain}% point(s)" to {_p}
   if {_t} is "allemand":
       send "&6&lLes &3Allemands &6ont gagné !" to {_p}
       set {_t2} to "americain"
   else:
       send "&6&lLes &3Américains &6ont gagné !" to {_p}
       set {_t2} to "allemand"
   if {%{_t}%.%{_p}%::*} is true:
       make console execute "/playsound records.mall %{_p}%"
       make console execute "/money give %{_p}% 250"
       send "&a&lVous avez gagné le combat ! Vous remportez &3250 $" to {_p}
   if {%{_t2}%.%{_p}%::*} is true:
       make console execute "/playsound records.cat %{_p}%"
       send "&c&lVous avez perdu le combat... Vous serez plus fort la prochaine fois !" to {_p}
   wait 13 seconds
   set {start} to false
   set {paix} to true
   set {freeze.%{_p}%} to false
   clear {score.americain}
   clear {score.allemand}
   clear {_p}'s inventory
   set {americain.%{_p}%::*} to false
   set {allemand.%{_p}%::*} to false
   make console execute "/pex user %{_p}% group set Deserteur"
   make console execute "/spawn %{_p}%"
   clear {nb.americain}
   clear {nb.allemand}
   set {freeze.%{_p}%} to false

every 30 seconds:
   if {start} is true:
       broadcast "&a&lScore : &3&lAllemagne : &c%{score.allemand}% point(s)"
       broadcast "            &3&lAmérique : &c%{score.americain}% point(s)"
       make console execute "/playsound random.successful_hit %players%"

on load:
   {paix} is not set
   set {paix} to true

command /start:
   trigger:
       if sender has permission "wwm.moderation":
           if {paix} is true:
               broadcast "&6[WWM] &3Entrée en période de paix, reprise du combat dans &c3 minutes"
               make console execute "/playsound random.successful_hit %players%"
               wait 5 seconds
               broadcast "&6[WWM] &3Reprise du combat dans &c1 minute"
               make console execute "/playsound random.successful_hit %players%"
               wait 10 seconds
               broadcast "&6[WWM] &3Fin de la période de paix, reprise du combat !"
               make console execute "/playsound random.successful_hit %players%"
               set {timer} to true
               set {paix} to false
               make console execute "/start"
           else:
               if {timer} is true:
                   set {nb.americain} to {nb.americain} parsed as an integer
                   set {nb.allemand} to {nb.allemand} parsed as an integer
                   if {nb.americain} >= 1:
                       loop all players:
                           if loop-player has permission "wwm.game":
                               Timer(loop-player)
                           else:
                               send "&6[WWM] &cVos compatriotes se battent pour leur nation ! Rejoignez-les dès que possible !" to loop-player
                       wait 8 seconds
                       make console execute "/start"
                   else:
                       broadcast "&6[WWM] &cIl n'y a pas assez de joueurs pour commencer une partie."
                       broadcast "&6&lAméricains : &a%{nb.americain}% joueur(s)"
                       broadcast "&6&lAllemands : &a%{nb.allemand}% joueur(s)"
                       broadcast "&6&lIl faut au minimum &33 joueurs &6&lde chaque côté"
                       make console execute "/playsound random.successful_hit %players%"
                       wait 10 seconds
                       make console execute "/start"
               else:
                   if {start} is true:
                       if {score.americain} >= 10:
                           loop all players:
                               if loop-player has permission "wwm.game":
                                   VictoireAm(loop-player)
                           wait 15 seconds
                           make console execute "/start"
                       else if {score.allemand} >= 10:
                           loop all players:
                               if loop-player has permission "wwm.game":
                                   VictoireAll(loop-player)
                           wait 15 seconds
                           make console execute "/start"
                       else:
                           wait 5 seconds
                           loop all players:
                               if loop-player has permission "wwm.game":
                                   send "&6&lNope" to loop-player
                           make console execute "/start"
                   else:
                       broadcast "&cErreur, démmarage de la partie impossible"
                       wait 60 seconds
                       make console execute "/start"
       else:
           send "&6[WWM] &cVous n'avez pas la permission d'accéder à cette commande"

  • 0
Posté(e)

De rien :p et tien il y avait quelque lignes qui servaient à rien :

[spoiler=Code]

function Timer(p: player):
   set {freeze.%{_p}%} to true
   clear {score.allemand}
   clear {score.americain}
   set {score.allemand} to 0
   set {score.americain} to 0
   send "&6&lDébut du combat dans :" to {_p}
   wait 1 second
   send "&c&l5" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&c&l4" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&6&l3" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&6&l2" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&a&l1" to {_p}
   make console execute "/playsound random.successful_hit %{_p}%"
   wait 1 second
   send "&3&lALLEZ-Y !" to {_p}
   make console execute "/playsound records.ward %{_p}%"
   make console execute "/playsound records.11 %{_p}%"
   set {freeze.%{_p}%} to false
   set {timer} to false
   set {start} to true

function VictoireAm(p: player):
   set {_t} to "americain"
   set {_t2} to "allemand"
   set {freeze.%{_p}%} to true
   send "&a&lScore : &3&lAllemagne : &c%{score.allemand}% point(s)" to {_p}
   send "                  &3&lAmérique : &c%{score.americain}% point(s)" to {_p}
   send "&6&lLes &3Américains &6ont gagné !" to {_p}
   if {%{_t}%.%{_p}%::*} is true:
       make console execute "/playsound records.mall %{_p}%"
       make console execute "/money give %{_p}% 250"
       send "&a&lVous avez gagné le combat ! Vous remportez &3250 $" to {_p}
   if {%{_t2}%.%{_p}%::*} is true:
       make console execute "/playsound records.cat %{_p}%"
       send "&c&lVous avez perdu le combat... Vous serez plus fort la prochaine fois !" to {_p}
   wait 13 seconds
   set {freeze.%{_p}%} to false
   clear {score.americain}
   clear {score.allemand}
   clear {_p}'s inventory
   set {americain.%{_p}%::*} to false
   set {allemand.%{_p}%::*} to false
   make console execute "/pex user %{_p}% group set Deserteur"
   make console execute "/spawn %{_p}%"
   clear {nb.americain}
   clear {nb.allemand}
   set {freeze.%{_p}%} to false
   set {start} to false
   set {paix} to true

function VictoireAll(p: player):
   set {_t} to "allemand"
   set {_t2} to "americain"
   set {freeze.%{_p}%} to true
   send "&a&lScore : &3&lAllemagne : &c%{score.allemand}% point(s)" to {_p}
   send "                  &3&lAmérique : &c%{score.americain}% point(s)" to {_p}
   send "&6&lLes &3Allemands &6ont gagné !" to {_p}
   if {%{_t}%.%{_p}%::*} is true:
       make console execute "/playsound records.mall %{_p}%"
       make console execute "/money give %{_p}% 250"
       send "&a&lVous avez gagné le combat ! Vous remportez &3250 $" to {_p}
   if {%{_t2}%.%{_p}%::*} is true:
       make console execute "/playsound records.cat %{_p}%"
       send "&c&lVous avez perdu le combat... Vous serez plus fort la prochaine fois !" to {_p}
   wait 13 seconds
   set {start} to false
   set {paix} to true
   set {freeze.%{_p}%} to false
   clear {score.americain}
   clear {score.allemand}
   clear {_p}'s inventory
   set {americain.%{_p}%::*} to false
   set {allemand.%{_p}%::*} to false
   make console execute "/pex user %{_p}% group set Deserteur"
   make console execute "/spawn %{_p}%"
   clear {nb.americain}
   clear {nb.allemand}
   set {freeze.%{_p}%} to false

every 30 seconds:
   if {start} is true:
       broadcast "&a&lScore : &3&lAllemagne : &c%{score.allemand}% point(s)"
       broadcast "               &3&lAmérique : &c%{score.americain}% point(s)"
       make console execute "/playsound random.successful_hit %players%"

on load:
   {paix} is not set
   set {paix} to true

command /start:
   trigger:
       if sender has permission "wwm.moderation":
           if {paix} is true:
               broadcast "&6[WWM] &3Entrée en période de paix, reprise du combat dans &c3 minutes"
               make console execute "/playsound random.successful_hit %players%"
               wait 5 seconds
               broadcast "&6[WWM] &3Reprise du combat dans &c1 minute"
               make console execute "/playsound random.successful_hit %players%"
               wait 10 seconds
               broadcast "&6[WWM] &3Fin de la période de paix, reprise du combat !"
               make console execute "/playsound random.successful_hit %players%"
               set {timer} to true
               set {paix} to false
               make console execute "/start"
           else:
               if {timer} is true:
                   set {nb.americain} to {nb.americain} parsed as an integer
                   set {nb.allemand} to {nb.allemand} parsed as an integer
                   if {nb.americain} >= 1:
                       loop all players:
                           if loop-player has permission "wwm.game":
                               Timer(loop-player)
                           else:
                               send "&6[WWM] &cVos compatriotes se battent pour leur nation ! Rejoignez-les dès que possible !" to loop-player
                       wait 8 seconds
                       make console execute "/start"
                   else:
                       broadcast "&6[WWM] &cIl n'y a pas assez de joueurs pour commencer une partie."
                       broadcast "&6&lAméricains : &a%{nb.americain}% joueur(s)"
                       broadcast "&6&lAllemands : &a%{nb.allemand}% joueur(s)"
                       broadcast "&6&lIl faut au minimum &33 joueurs &6&lde chaque côté"
                       make console execute "/playsound random.successful_hit %players%"
                       wait 10 seconds
                       make console execute "/start"
               else:
                   if {start} is true:
                       if {score.americain} >= 10:
                           loop all players:
                               if loop-player has permission "wwm.game":
                                   VictoireAm(loop-player)
                           wait 15 seconds
                           make console execute "/start"
                       else if {score.allemand} >= 10:
                           loop all players:
                               if loop-player has permission "wwm.game":
                                   VictoireAll(loop-player)
                           wait 15 seconds
                           make console execute "/start"
                       else:
                           wait 5 seconds
                           loop all players:
                               if loop-player has permission "wwm.game":
                                   send "&6&lNope" to loop-player
                           make console execute "/start"
                   else:
                       broadcast "&cErreur, démmarage de la partie impossible"
                       wait 60 seconds
                       make console execute "/start"
       else:
           send "&6[WWM] &cVous n'avez pas la permission d'accéder à cette commande"

 

 

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