les nouveaux clients voient les objets supprimés

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
thyma
Messages : 70
Inscription : 23 Juin 2015 12:25

les nouveaux clients voient les objets supprimés

Message par thyma » 10 Juin 2017 16:54

Salut salut après 6mois d’absence je me suis remis sur mon fps
Et je bloc sur un bug qui est la depuis le début mais je me suis dit quand je m'en occuperai à la fin. Et la et ban j'y suis arrivé puisque c'est le tout dernier bug (bon ok des que je rajouterai des trucs notamment un system de login avec bsd et inventaire :mdr1: ça vas recommencer) bon le bug le voici : les nouveaux clients voient tous les gameobjects qui ont été supprimés pendant la partie et sa fait beaucoup puisqu'à chaque fois que tu respawn tu supprime l'ancien personnage pour réapparaitre avec le nouveau (vu que c'est un fps classe) et a chaque fois qu'une balle est tiré elle doit bien disparaitre à un moment pour éviter les lags bref quand un nouveau joueur se connecte à une partie en cours c'est Tchernobyl puisqu'il voit tous les morts et toutes les balles depuis le début de la partie (et en plus ça veut dire aussi que le serveur stock tout ça ce qui est pas génial) pourtant j'utilise bien la fonction Network.Destroy j'avais compris que ça évitait justement ce bug par rapport à la fonction Destroy

je sait pas si je suis bien clair si vous voulez le code ou plus d’explication je vous le passe

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: les nouveaux clients voient les objets supprimés

Message par Max » 10 Juin 2017 17:45

Bonjour,
thyma a écrit : si vous voulez le code ...
ben dans la section script, cela aurait du sens, et pis cela peut en effet aider oui :mrgreen:
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

thyma
Messages : 70
Inscription : 23 Juin 2015 12:25

Re: les nouveaux clients voient les objets supprimés

Message par thyma » 11 Juin 2017 10:51

Bon alors voila le script qui gère les pv (et les morts par manque de pv)

Code : Tout sélectionner

var vie = 10;

function Update (){
	if ( GetComponent.<NetworkView>().isMine){
		if (vie <= 0){
			Network.Destroy(this.gameObject);
   		}
	}
}

function OnTriggerEnter (col : Collider){
		if(col.tag == "1"){
			vie -= 1;
	   	}
		if(col.tag == "2"){
			vie -= 2;
	    }
	    if(col.tag == "3"){
			vie -= 3;
	   	}
	    if(col.tag == "4"){
			vie -= 4;
	   	}
}
et la c'est la partie du script menu qui gère le respawnage (ça se dit ?)

Code : Tout sélectionner

if (spawner == true){
			GUI.Box(new Rect(Screen.width/6, Screen.height/4, Screen.width/1.5, Screen.height/2), "apparaitre");
			if(rouge == false){
				if(GUI.Button(Rect(Screen.width/5.8, Screen.height/3.5 ,Screen.width/8 ,Screen.height/10), "équipe rouge")){
					rouge = !rouge;
					bleu = false;
				}
			}
			if (bleu == false){
				if(GUI.Button(Rect(Screen.width/5.8, Screen.height/1.6 ,Screen.width/8 ,Screen.height/10), "équipe bleu")){
					bleu = !bleu;
					rouge = false;
				}
			}
			if(bleu == true){
				if(GUI.Button(Rect(Screen.width/5.8, Screen.height/1.6 ,Screen.width/8 ,Screen.height/10), "classe 6")){
				}
				if(GUI.Button(Rect(Screen.width/3.3, Screen.height/1.6 ,Screen.width/8 ,Screen.height/10), "classe 7")){
				}
				if(GUI.Button(Rect(Screen.width/2.3, Screen.height/1.6 ,Screen.width/8 ,Screen.height/10), "classe 8")){
				}
				if(GUI.Button(Rect(Screen.width/1.76, Screen.height/1.6 ,Screen.width/8 ,Screen.height/10), "classe 9")){
				}
				if(GUI.Button(Rect(Screen.width/1.43, Screen.height/1.6 ,Screen.width/8 ,Screen.height/10), "classe 10")){
				}
			}
			if(rouge == true){
				if(GUI.Button(Rect(Screen.width/5.8, Screen.height/3.5 ,Screen.width/8 ,Screen.height/10), "classe 1")){
					Network.Destroy(joueur);
					joueur = Network.Instantiate(classe1, spawnRouge.transform.position, spawnRouge.transform.rotation, 0);
					joueur.name = pseudo;
					menu = false;
				}
				if(GUI.Button(Rect(Screen.width/3.3, Screen.height/3.5 ,Screen.width/8 ,Screen.height/10), "classe 2")){
					Network.Destroy(joueur);
					joueur = Network.Instantiate(classe2, spawnRouge.transform.position, spawnRouge.transform.rotation, 0);
					joueur.name = pseudo;
					menu = false;
				}
				if(GUI.Button(Rect(Screen.width/2.3, Screen.height/3.5 ,Screen.width/8 ,Screen.height/10), "classe 3")){
					Network.Destroy(joueur);
					joueur = Network.Instantiate(classe3, spawnRouge.transform.position, spawnRouge.transform.rotation, 0);
					joueur.name = pseudo;
					menu = false;
				}
				if(GUI.Button(Rect(Screen.width/1.76, Screen.height/3.5 ,Screen.width/8 ,Screen.height/10), "classe 4")){
					Network.Destroy(joueur);
					joueur = Network.Instantiate(classe4, spawnRouge.transform.position, spawnRouge.transform.rotation, 0);
					joueur.name = pseudo;
					menu = false;
				}
				if(GUI.Button(Rect(Screen.width/1.43, Screen.height/3.5 ,Screen.width/8 ,Screen.height/10), "classe 5")){
					Network.Destroy(joueur);
					joueur = Network.Instantiate(classe5, spawnRouge.transform.position, spawnRouge.transform.rotation, 0);
					joueur.name = pseudo;
					menu = false;
				}
			}
		}
et aussi un autre problème (je sait que sait pas lié mais c'est un peu dans le même sujet) comment on fait pour que quand des joeurs se déconnectent leur perso soit supprimés automatiquement de la partie?

Avatar de l’utilisateur
evereal
Messages : 109
Inscription : 06 Nov 2015 18:46

Re: les nouveaux clients voient les objets supprimés

Message par evereal » 12 Juin 2017 10:17

Hello,

En effet, si le Network.destroy est appelé ailleurs que sur le serveur, le buffer n'est pas vidé.
Voici une solution pour contourner le problème.
Tu vas devoir l'adapter pour ton code mais le but est de remplacer tes appels a Network.Destroy par la fonction DestroyGO.

Code : Tout sélectionner

     void DestroyGO(){
         RemoveBufferedInstantiate (this.networkView.viewID);
         Network.Destroy (this.gameObject);
     }
     
     [RPC]
     void RemoveBufferedInstantiate (NetworkViewID viewID) {
         if (Network.isServer) {
             Network.RemoveRPCs (viewID);
         } else {
             networkView.RPC ("RemoveBufferedInstantiate", RPCMode.Server, viewID);
         }
     }
“La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !”

thyma
Messages : 70
Inscription : 23 Juin 2015 12:25

Re: les nouveaux clients voient les objets supprimés

Message par thyma » 13 Juin 2017 21:09

salut (désolé pour le temps de réponse)
si j'ai bien compris ta réponse en plus de supprimer le gameObject avec un network.destroy il faut vider le bufer et ça doit se faire depuis le serveur
du coup j'ai modifier mon code
la ligne Network.Destroy(this.gameObject
je l'ai modifier par GetComponent.<NetworkView>().RPC("mort", RPCMode.Server, this.GetComponent.<NetworkView>().viewID);

et à la fin j'ai rajouter ça:

Code : Tout sélectionner

@RPC function mort(a : NetworkViewID){
 	if (Network.isServer) {
		Network.RemoveRPCs (a);
		var view : NetworkView = NetworkView.Find(a);
		view.name = "a";
		var toDestroy = GameObject.Find("a");
		Network.Destroy(toDestroy);
	}
}
mais le bug n'est pas réglé et en plus çe rajoute d'autres bugs
je ne comprend pas vraiment
j'ai pas être mal expliqué mon problème, c'est exactement pareil que celui-ci : viewtopic.php?f=88&t=13279

thyma
Messages : 70
Inscription : 23 Juin 2015 12:25

Re: les nouveaux clients voient les objets supprimés

Message par thyma » 18 Juin 2017 14:56

up ? Je n'ai toujours pas trouver la solution

Network.RemoveRPCs (viewID); ne semble pas marcher pour vider le buffer (ou alors vider le buffer ne semble pas marcher pour corriger ce bug^^)

thyma
Messages : 70
Inscription : 23 Juin 2015 12:25

Re: les nouveaux clients voient les objets supprimés

Message par thyma » 30 Juin 2017 14:34

j'ai résolu l'erreur
tu a raison il fallait rajouter le Network.RemoveRPCs(player);
sauf que la variable player ne doit pas être un network view id
mais la variable network.Player

Verrouillé

Revenir vers « (Js) Javascript »