Bug sur l'affichage du dépot !

Les anciennes demandes / questions sont archivées ici.
Avatar de l’utilisateur
TonyFlow
Messages : 985
Inscription : 02 mai 2007, 09:26
Localisation : Normandie / Pierre-Blanche
Contact :

Bug sur l'affichage du dépot !

Message par TonyFlow »

Quelques joueurs ont rapporté un affichage incohérent du dépot (images et quantités). Tous les objets sont toujours bien là, seul l'affichage est complètement erroné.

:arrow: Que les joueurs soient rassurés : si tout le monde peut être concerné par ce bug, il n'est pas grave pour les données du perso et le contenu des dépots.

Avant de rentrer dans les détails techniques, je vous indique la source du problème, ce qui vous évitera de voir votre dépot en vrac :
Il ne faut pas se connecter au jeu avec un inventaire vide ! Si votre dépot est en vrac, mettez n'importe quoi dans votre inventaire et relancez le jeu ! (et oui, tout simplement...)


La suite s'adresse plus particulièrement à l'équipe pour régler tout ça.


Explication du bug

Si le dépôt s'affiche de travers, c'est qu'il y a un décalage dans la lecture des infos transmises par le serveur. La raison : l'utilisation ou non de l'item uid, ou plutot l'auto-détection de son utilisation par le client.

Car le client reste normalement capable de fonctionner avec un serveur utilisant ces uid, ou pas. Mais cette auto-détection est en réalité un peu légère... donc foireuse dans certains cas ! Elle s'opère au moment du HERE_YOUR_INVENTORY en observant la taille des infos transmises :

Fichier multiplayer.c (ligne 840)

Code : Tout sélectionner

				if (data_length <= 3)
				{
				  LOG_WARNING("CAUTION: Possibly forged HERE_YOUR_INVENTORY packet received.\n");
				  break;
				}
				items = in_data[3];
				if (data_length - 4  == items * 8 )
				{
					item_uid_enabled = 0;
					plen = 8;
				}
				else if (data_length - 4  == items * 10 )
				{
					item_uid_enabled = 1;
					plen = 10;
				}
				else
				plen = 8;
Donc, selon que les infos pour 1 objet fassent une taille de 8 ou de 10, on devine si oui ou non le serveur transmet un uid. Sauf que... s'il n'y a aucun objet dans l'inventaire, ce test est totalement inefficace (car 0*8 tout autant que 0*10 font 0) !

Alors par défaut (et en priorité), le client considère qu'il n'y a pas d'uid. D'où le décalage quand il reçoit les objets du dépot et peut-être même d'autres soucis :/


Résolution du bug

On pourrait bien sûr revoir ce fameux test, et pourquoi pas le retirer (puisque le serveur n'a pas de raison de ne plus utiliser les uid) ou tout simplement inverser l'ordre pour que le client considère les item uid actifs par défaut sur le serveur.

Bon l'autodétection n'en demeurre pas moins bancale, mais tant que le serveur ne change plus ça passerait... Par contre ça nécessite une recompilation du client (avec tout le bazar pour le mettre à jour).

Heureusement il y a une autre solution, car le client utilise une autre info pour son autodétection : l'interception d'un simple message serveur :

Fichier text.c (ligne 635)

Code : Tout sélectionner

		else if (my_strncompare(text_to_add+1, "Send Item UIDs ", 15)) {
			if (text_to_add[1+15] == '0')
				item_uid_enabled = 0;
			else if (text_to_add[1+15] == '1')
				item_uid_enabled = 1;
			printf("item_uid_enabled=%d\n", item_uid_enabled);
		}
Donc il suffirait que le serveur envoit le message "Send Item UIDs 1" pour que le client soit bien informé dans tous les cas que les uid sont utilisés.
Just in case you never knew I miss you Slim, I love you too Oh! See my heart, it's black and blue When I die I will find you... My lovely man
But when you walk that walk and talk that talk You do it oh so well She's stone cold bush
Let me stand next to your Fire, my Pretty Little Ditty

Avatar de l’utilisateur
TonyFlow
Messages : 985
Inscription : 02 mai 2007, 09:26
Localisation : Normandie / Pierre-Blanche
Contact :

Re: Bug sur l'affichage du dépot !

Message par TonyFlow »

J'ai regardé vite fait comment EL utilisait ce message serveur : apparement il n'est envoyé au client que pour contourner ce bug. Quand il y a quelque chose dans l'inventaire au moment de la connexion, le serveur ne prend pas la peine de le mentionner.

Et donc lorsque le joueur se connecte avec un inventaire vide, le message serveur est envoyé assez tôt, mais après le HERE_YOUR_ITEMS bien entendu, sans quoi son info serait écrasée.


PS: par contre j'ai été étonné de constater que le serveur US n'utilise pas les item uid !
Just in case you never knew I miss you Slim, I love you too Oh! See my heart, it's black and blue When I die I will find you... My lovely man
But when you walk that walk and talk that talk You do it oh so well She's stone cold bush
Let me stand next to your Fire, my Pretty Little Ditty

Ackak
Messages : 7348
Inscription : 18 déc. 2005, 19:31

Re: Bug sur l'affichage du dépot !

Message par Ackak »

Merci pour les infos !

On va faire une mise à jour serveur assez rapidement pour corrier le problème.
Celui qui apprend quelque chose de moi enrichit son savoir sans réduire le mien, tout comme celui qui allume sa chandelle à la mienne se donne de la lumière sans me plonger dans l'obscurité.
-- Thomas Jefferson

Avatar de l’utilisateur
trinita
Messages : 2722
Inscription : 15 avr. 2006, 10:23
Localisation : Charente - France
Contact :

Re: Bug sur l'affichage du dépot !

Message par trinita »

Le bug sera corrigé dans une prochaine version à venir rapidement.

Merci Tony :mrgreen:
Trinita,

Administrateur,
Contact: trinita@landes-eternelles.com

Suivez et partagez les Landes Eternelles sur Twitter !
La page Facebook des Landes Eternelles !


" Le bon sens est la qualité la moins partagée de ce monde " Jean-Pierre TROLL

Répondre