Aller au contenu
  • 0

Déconnexion, affichage invoulu


Question

Posté(e)

Bonsoir,

 

J'ai un soucis, avec un skript qui me permet de détecter la distance d'un joueur entre l'autre fait par @JDM

Je rencontre un soucis, en me déconnectant et reconnectant cela affiche ma propre flèche.

 

Explication du skript

 

Je définis l'équipe du joueur, et afin de détecter le joueur dans la flèche je l'ajoute dans une value qui augmente à chaque fois que quelqu'un passe dans l'équipe.

 

Mon skript actuel : http://pastebin.com/PS2BhVzJ

Récapitulatif : A l'aide de ce skript je fais ces 2 commandes :

 

- /team blue Player1

- /team blue Player2

 

Cela affiche la distance à l'aide d'une flèche dans le scoreboard, entre le joueur1 et 2 qui varie en fonction de où je regarde.

MAIS le problème est que je ne souhaite que cette flèche affiche que les joueurs de la team, et pas leur propre flèche, mais en déconnectant, la flèche affiche ma propre flèche.

 

Je sais que mon système pour définir qui porte la flèche, n'est pas le meilleur, mais je n'est que eu cela comme idée. Je suis ouvert à toutes améliorations.

 

Vu que le skript appartient en grande partie à @JDM je le tag, pour qu'il puisse élucider mon soucis.

Messages recommandés

  • 0
Posté(e)
Tu ne peux pas faire une condition pour savoir si cette personne n'est pas dans l'équipe ou si c'est pas lui-même ?

Il y en a une

 

        if {Equipe::%player%} is "Blue":
           if {Fleche.Blue.1} is not player:

 

C'est justement pour ça que je comprends pas.

  • 0
Posté(e)

Moi y a un truc qui me gêne dans ton skript, c'est que tu fais en sorte que chaque joueur, chaque seconde, fasse /timermaj , or tu gères les deux d'un coup ... Moi ce que je ferai, c'est (à partir de la ligne 42 jusqu'à la fin du script):

set {_equipe} to {Equipe::%player%} #On récupère l équipe du joueur

loop {Fleche.%{_equipe}%.NB} times: #On loop autant de fois qu il y a de joueurs dans l équipe

set {_player} to {Fleche.Blue.%loop-number%} #On récupère le joueur "loopé"
{_player} is not player #Si le joueur "loopé" n est pas le joueur qui actualise son scoreboard
{_player} is online #Si la personne est bien en ligne

set {_coordx1} to x-position of player #On récupère diverses infos
set {_coordx2} to x-position of {_player}
       set {_distx} to {_coordx2}-{_coordx1}
       set {_coordz1} to z-position of player
       set {_coordz2} to z-position of {_player}
       set {_distz} to {_coordz2}-{_coordz1}
       set {_distxz} to sqrt of ({_distx}^2+{_distz}^2)
       set {_cosangle} to {_distx} / {_distxz}
       set {_sinangle} to {_distz} / {_distxz}

if distance between player and {_player} is less than or equal to 50: #Ton morceau de code
           	set {_fleche.color} to "&b&l"
else if distance between player and {_player}is more than or equal to 50: #J ai modifié le nombre car ne prenait pas en compte de 50 à 100
	 set {_fleche.color} to "&9&l"
else if distance between player and {_player} is more than or equal to 200:
	set {_fleche.color} to "&c&l"
else if distance between player and {_player} is more than or equal to 350:
	set {_fleche.color} to "&4&l"

if {_cosangle} is between -1 and -0.7: #On attribue une valeur à chaque direction (0=N, 1=E, 2=S, 3=O)
       	set {_direction} to 3
else if {_cosangle} is between 0.7 and 1:
       	set {_direction} to 1
else if {_sinangle} is between 0.7 and 1:
       	set {_direction} to 2
else:
       	set {_direction} to 0

if horizontal facing of player is east: #On met un décalage en fonction de la direction du joueur
	remove 1 from {_direction}
else if horizontal facing of player is south:
	remove 2 from {_direction}
else if horizontal facing of player is west:
	remove 3 from {_direction}

if {_direction} is smaller than 0:
	add 4 to {_direction}

if {_direction} is 0: #On attribue une flèche
	set {_fleche} to "^"
else if {_direction} is 1:
	set {_fleche} to ">"
else if {_direction} is 2:
	set {_fleche} to "v"
else if {_direction} is 3:
	set {_fleche} to "<"

set score "%{_player}% %{_fleche.color}%%{_fleche}%" in sidebar of player to loop-number #On affiche la flèche avec le joueur approprié

 

Voilà, là encore c'est sujet à test mais ça devrait marcher. Si tu as un problème ou une interrogation sur le code, hésite pas à demander !

(j'ai conscience que j'ai fais plus que résoudre le problème demandé mais j'avais du mal à repartir de ton code précédent)

  • J'aime 1
  • 0
Posté(e)

Bah le "display board named "" to player" (l. 35 du pastebin fourni par isharo) permet d'effacer le scoreboard, et après on rajoute un à un pour chaque joueur "loopé" (dans la boucle) le score qui correspond à son "identifiant" (Fleche.Blue.%ID%), et en nom "JDM >" par exemple (ou "Izychiel ^", etc). Et comme à chaque fois ça loope tous les joueurs de la team, ça actualise tout le monde

  • 0
Posté(e)
Moi y a un truc qui me gêne dans ton skript, c'est que tu fais en sorte que chaque joueur, chaque seconde, fasse /timermaj , or tu gères les deux d'un coup ... Moi ce que je ferai, c'est (à partir de la ligne 42 jusqu'à la fin du script):

set {_equipe} to {Equipe::%player%} #On récupère l équipe du joueur

loop {Fleche.%{_equipe}%.NB} times: #On loop autant de fois qu il y a de joueurs dans l équipe

set {_player} to {Fleche.Blue.%loop-number%} #On récupère le joueur "loopé"
{_player} is not player #Si le joueur "loopé" n est pas le joueur qui actualise son scoreboard
{_player} is online #Si la personne est bien en ligne

set {_coordx1} to x-position of player #On récupère diverses infos
set {_coordx2} to x-position of {_player}
       set {_distx} to {_coordx2}-{_coordx1}
       set {_coordz1} to z-position of player
       set {_coordz2} to z-position of {_player}
       set {_distz} to {_coordz2}-{_coordz1}
       set {_distxz} to sqrt of ({_distx}^2+{_distz}^2)
       set {_cosangle} to {_distx} / {_distxz}
       set {_sinangle} to {_distz} / {_distxz}

if distance between player and {_player} is less than or equal to 50: #Ton morceau de code
           	set {_fleche.color} to "&b&l"
else if distance between player and {_player}is more than or equal to 50: #J ai modifié le nombre car ne prenait pas en compte de 50 à 100
	 set {_fleche.color} to "&9&l"
else if distance between player and {_player} is more than or equal to 200:
	set {_fleche.color} to "&c&l"
else if distance between player and {_player} is more than or equal to 350:
	set {_fleche.color} to "&4&l"

if {_cosangle} is between -1 and -0.7: #On attribue une valeur à chaque direction (0=N, 1=E, 2=S, 3=O)
       	set {_direction} to 3
else if {_cosangle} is between 0.7 and 1:
       	set {_direction} to 1
else if {_sinangle} is between 0.7 and 1:
       	set {_direction} to 2
else:
       	set {_direction} to 0

if horizontal facing of player is east: #On met un décalage en fonction de la direction du joueur
	remove 1 from {_direction}
else if horizontal facing of player is south:
	remove 2 from {_direction}
else if horizontal facing of player is west:
	remove 3 from {_direction}

if {_direction} is smaller than 0:
	add 4 to {_direction}

if {_direction} is 0: #On attribue une flèche
	set {_fleche} to "^"
else if {_direction} is 1:
	set {_fleche} to ">"
else if {_direction} is 2:
	set {_fleche} to "v"
else if {_direction} is 3:
	set {_fleche} to "<"

set score "%{_player}% %{_fleche.color}%%{_fleche}%" in sidebar of player to loop-number #On affiche la flèche avec le joueur approprié

 

Voilà, là encore c'est sujet à test mais ça devrait marcher. Si tu as un problème ou une interrogation sur le code, hésite pas à demander !

(j'ai conscience que j'ai fais plus que résoudre le problème demandé mais j'avais du mal à repartir de ton code précédent)

Je te remercie vraiment de cette si grande aide que tu apportes, cette catégorie porte vraiment bien son nom.

 

Mais en démarrant ton skript, j'obtient 2 erreurs :

 

wMi0L3B.png

 

Aussi je n'ai pas très bien compris, comment je fais fonctionner le scoreboard ? Comment je l'actualise sans le /timermaj ?

Pourrais tu être plus précis de ce que je doit faire, si je dois reprendre des bouts de mon code ?

 

Grand merci ! ;)

 

NB: Actuellement j'ai repris ton code, en mettant les bonnes tabulations

http://pastebin.com/tZDHc6Rw

  • 0
Posté(e)
command /team [<text>] [<player>]:
trigger:
	if arg 1 is "Blue":
		set {Equipe::%arg-player%} to "Blue"
		set arg-player tab name to "&9%arg-player%"                      #FLECHE
		add 1 to {Fleche.Blue.NB}
		set {Fleche.Blue.%{Fleche.Blue.NB}%} to arg-player
		send "&9%arg-player%&f est désormais dans l'équipe &9Bleue"

command /reset:
trigger:
	clear {Equipe::*}
	set {Fleche.Blue.NB} to 0
	clear {Fleche.Blue.1}
	clear {Fleche.Blue.2}
	clear {Fleche.Blue.3}
	clear {Fleche.Blue.4}
	send "&2&lOK ! :)"

command /info:
trigger:
	send "%{Fleche.Blue.NB}%"
	send "%{Fleche.Blue.1}%"
	send "%{Fleche.Blue.2}%"

every 1 seconds:
make all players execute command "/timermaj"

command /timermaj:
trigger:
	display board named "" to player
	set name of sidebar of player to "   &3Jeu &bI   "
	set score " " in sidebar of player to 5
#===== On rajoute mon code ici =====#

	set {_equipe} to {Equipe::%player%} #On récupère l équipe du joueur

	loop {Fleche.%{_equipe}%.NB} times: #On loop autant de fois qu il y a de joueurs dans l équipe

		set {_player} to {Fleche.Blue.%loop-number%} #On récupère le joueur "loopé"
		{_player} is not player #Si le joueur "loopé" n est pas le joueur qui actualise son scoreboard
		{_player} is online #Si la personne est bien en ligne

		set {_coordx1} to x-position of player #On récupère diverses infos
		set {_coordx2} to x-position of {_player}
      			set {_distx} to {_coordx2}-{_coordx1}
       		set {_coordz1} to z-position of player
       		set {_coordz2} to z-position of {_player}
       		set {_distz} to {_coordz2}-{_coordz1}
       		set {_distxz} to sqrt of ({_distx}^2+{_distz}^2)
       		set {_cosangle} to {_distx} / {_distxz}
       		set {_sinangle} to {_distz} / {_distxz}

		if distance between player and {_player} is less than or equal to 50: #Ton morceau de code
           			set {_fleche.color} to "&b&l"
		else if distance between player and {_player}is more than or equal to 50: #J ai modifié le nombre car ne prenait pas en compte de 50 à 100
	 		set {_fleche.color} to "&9&l"
		else if distance between player and {_player} is more than or equal to 200:
			set {_fleche.color} to "&c&l"
		else if distance between player and {_player} is more than or equal to 350:
			set {_fleche.color} to "&4&l"

		if {_cosangle} is between -1 and -0.7: #On attribue une valeur à chaque direction (0=N, 1=E, 2=S, 3=O)
       			set {_direction} to 3
		else if {_cosangle} is between 0.7 and 1:
       			set {_direction} to 1
		else if {_sinangle} is between 0.7 and 1:
       			set {_direction} to 2
		else:
       			set {_direction} to 0

		if horizontal facing of player is east: #On met un décalage en fonction de la direction du joueur
			remove 1 from {_direction}
		else if horizontal facing of player is south:
			remove 2 from {_direction}
		else if horizontal facing of player is west:
		remove 3 from {_direction}

		if {_direction} is smaller than 0:
			add 4 to {_direction}

		if {_direction} is 0: #On attribue une flèche
			set {_fleche} to "^"
		else if {_direction} is 1:
			set {_fleche} to ">"
		else if {_direction} is 2:
			set {_fleche} to "v"
		else if {_direction} is 3:
			set {_fleche} to "<"

		set score "%{_player}% %{_fleche.color}%%{_fleche}%" in sidebar of player to loop-number #On affiche la flèche avec le joueur approprié

  • 0
Posté(e)

Personne n'a d'idée ? Je ne trouve toujours pas, après plusieurs tentatives :c.

 

Pour ceux qui viennent d'arriver, j'explique le soucis :

J'utilise un skript pour afficher la distance d'un joueur à l'autre avec Skript modéliser par une flèche, comme sur Epicube.

Le soucis étant que en me déconnectant, et reconnectant cela affiche ma propre flèche (du joueur sur lequel je suis connecté), ce que je ne souhaite pas faire, pourtant la condition qui détecte que le joueur n'est pas lui-même est mise..

 

Voici mon skript actuel, qui a été en grande partie modifié par @JDM ce qui le rend plus propre :

http://pastebin.com/AsiMnX7w

 

Merci d'avance, à celui ou celle qui trouvera la solution.

  • 0
Posté(e)

Perso aucune idée, dans le code, y a rien qui dépend du déco reco ... Si tu réduis le temps d'actualisation "every 1 second" par "every 2 second" (histoire que le serveur assimile le fait que tu sois connecté, peut-être ?), ça change quelque chose ?

  • 0
Posté(e)

J'ai pas trop lu, mais ajoute un code avec une variable:

On join:
Si le joueur est dans l'équipe Bleu:
	Le mettre dans l'équipe Bleu
	Et recharger le ScoreBoard si cela fonctionne comme cela :)

 

----

 

J'ai pas lu les réponses, j'ai juste vu qu'il n'y en avait pas..

  • 0
Posté(e)

Toujours rien, franchement je ne comprends pas.

 

@JDM je test ca en rentrant, justemment vu que rien depend, je ne comprends pas.. :/

 

Quelqu'un a une autre idée ?

  • J'aime 1
  • 0
Posté(e)
Perso aucune idée, dans le code, y a rien qui dépend du déco reco ... Si tu réduis le temps d'actualisation "every 1 second" par "every 2 second" (histoire que le serveur assimile le fait que tu sois connecté, peut-être ?), ça change quelque chose ?

Toujours pas .. :/

Je suis vraiment perdu. :(

 

Même en mettant "5 secondes".

  • 0
Posté(e)

Désolé du double post mais c'est important

 

J'ai remarqué un truc très étrange, en testant par un exemple un skript du genre:

http://pastebin.com/5mDe9iWD

 

En déconnectant / reconnectant je fait /info, je suis dans la variable mais le scoreboard m'affiche quand-même le message que je ne devrait pas, alors que si je redémarre le serveur, et reco le compte, ça marche je peux déco/reco autant de fois que je le souhaite.

Mais en faisant un reset pour redéfinir la variable, en déco/reco même problème.

 

As tu une idée maintenant avec cette explication @JDM ?

  • 0
Posté(e)

En fait à mon avis l'idée c'est que dans le scoreboard du J1 y a écrit :

J2 ^

J3 >

Dans ce lui du J2 :

J1 <

J3 >

Dans celui du J3 :

J1 ^

J2 v

Et de ce que j'ai compris, le problème c'est que dans le scoreboard du J1, y a écrit :

J1 v

J2 ^

J3 >

  • 0
Posté(e)

En clair,

 

J'ai un joeur Isharo1 et Isharo2 que je met dans l'equipe bleue.

 

Je vois donc sur Isharo1 une fleche vers Isharo2 et inversement pour Isharo1

 

Parfait!

 

Mais le soucis :

 

En deconnectant et reconnectant un des deux, par exemple je deco Isharo1 et le reconnecte par la suite le scoreboard affiche:

 

- Une fleche vers Isharo2

- Une fleche vers moi meme (Isharo1)

 

Hors, je souhaiterais que ca affiche seulement une fleche vers Isharo2 et pas moi meme, vu que c'est inutile.

 

Et ca fait pareil, si je déco Isharo2: Une fleche vers Isharo1 et une vers moi meme (Isharo2).

 

Je comprends pas..

@Mastersfelix je teste ca en rentrant et je te dit.

  • 0
Posté(e)
Tente de parse tes variable en tant qu'offline player

set {_player} to {_player} parsed as an offline player

Je ne suis pas trop sur de comprendre se que tu veux dire par ta propre flèche..?

 

Ajoute le code juste avant le if {_player} is not player

 

Fonctionne pas. :/

  • 0
Posté(e)

Mais attends, est-ce que quand tu actualises de nouveau ton Scoreboard et les positions ta pos disparaît ? Et aussi, pour afficher dans le scoreboard tu loop la liste non (pas regardé le code) ? Donc si ça se trouve tu as un problème avec les joueurs dans la liste, vérifie en l'affichant :)

  • 0
Posté(e)
Mais attends, est-ce que quand tu actualises de nouveau ton Scoreboard et les positions ta pos disparaît ? Et aussi, pour afficher dans le scoreboard tu loop la liste non (pas regardé le code) ? Donc si ça se trouve tu as un problème avec les joueurs dans la liste, vérifie en l'affichant :)

Non, tout marche parfaitement, aucun lag.

Le seul soucis se signale dès qu'un déco/reco est fait

  • 0
Posté(e)

En réfléchissant, j'ai trouvé une alternative, plutôt que refuser l'affichage, je le masque.

J'ai tout simplement fait un delete score si c'est %player%.

 

Je passe donc le sujet en résolu, néanmoins je reste ouvert à une autre solution, si vous en trouvez une.

Merci à tous pour votre aide.

 

Résolu

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