Tituc

 tutoriel / partage [JAVA] Solution de la suppression du personnage

Recommended Posts

Attention :

- Dans ce tutoriel, l'émulateur montré pour la modification sera AR54.

 

Coucou,

 

Voici un petit tutoriel qui concerne un grave problème sur la suppression des personnages : Plus précisément sur les réponses secrètes munies d'un ou de plusieurs espaces.

 

oui psk sa mgave perso se pb ki menpeche de suppr mn perso tss!

 

Ne t'inquiète pas Kevin, la solution à ce problème est dans ce tutoriel !

 

Comme d'habitude, sachez que cette correction n'a pas été rédigée de la manière la plus prestigieuse possible.

 

Certains diront certainement "Où est l'optimisation ?" ce à quoi je répondrai naturellement "Optimisation ? kékeucé ?"

 

Pour commencer, voici l'origine du problème :

Lors de la comparaison de la réponse secrète, il est comparé la réponse entrée dans le client avec la réponse qui se situe dans la base de donnée.

Si cette réponse ne contient qu'un mot, pas de soucis !

La réponse sera validée (si c'est la bonne bien évidemment), mais ce n'est pas le cas pour les réponses qui contiennent un ou plusieurs espaces.

 

Et c'est ici que ça coince !

Dans ce cas précis, les espaces envoyés depuis le client puis traités dans l'émulateur sont en réalité remplacés par des "%20" (Mh, à peu près comme sur les navigateurs internet).

 

On va donc chercher à faire une solution : certes, pas la meilleure, mais ça reste une solution !

On va chercher à faire comparer les deux réponses (client et BDD) de la meilleure façon possible.

 

Les modifications nécessaires pour faire ce tutoriel sont :

- En JAVA (GameThread.java)

 

Sans tarder, direction .. Beh dans GameThread.java en recherchant (via Ctrl+F) :

String reponse = split.length>1?split[1]:"";

 

Ce que vous venez de chercher est en quelque sorte la réponse secrète qu'à entré le bonhomme qui voulait supprimer son personnage (celle qui a des %20 à la place des espaces).

 

On va donc définir la deuxième réponse (la deuxième réponse est celle qui vient de la base de donnée), pour que la première et deuxième réponse (client et BDD) puissent être comparées, on va remplacer les espaces de la deuxième réponse par des "%20" (Je sais, c'est mal. Ne me fouettez pas !) :

Il suffira d'ajouter ceci en dessous que la ligne qui a été recherchée :

String reponse2 = _compte.get_reponse().replace(" ", "%20");

 

Tout simplement :

- On prend la réponse de la BDD

- On remplace les caractères " " par "%20"

 

Ensuite, sachez que j'adore décortiquer des petits bouts de codes (d'où le foutoir complet à la fin).

On va remplacer tout le reste jusqu'à break; (break non inclus) par ceci :

if(_compte.get_persos().containsKey(GUID))
			{
				if(_compte.get_persos().get(GUID).get_lvl() <20)
				{
					_compte.deletePerso(GUID);
					_compte.sendListGift();
					SocketManager.GAME_SEND_PERSO_LIST(_out, _compte.get_persos(), _compte.get_subscriber());
				}else{
					if (reponse.equalsIgnoreCase(reponse2)){
						_compte.deletePerso(GUID);
					_compte.sendListGift();
					SocketManager.GAME_SEND_PERSO_LIST(_out, _compte.get_persos(), _compte.get_subscriber());}
					else
						SocketManager.GAME_SEND_DELETE_PERSO_FAILED(_out);
				}
			}else
				SocketManager.GAME_SEND_DELETE_PERSO_FAILED(_out);
		break;

 

STOP ! Arrêtez de me frapper, sachez que j’offrirai une aide psychologique à tous les développeurs de haut niveau qui ont vu ce sujet.

 

Ceux qui ne veulent pas savoir comment ça fonctionne peuvent déjà partir (étant donné que le reste du code est déjà donné), pour les autres je vais pour expliquer le code que j'ai mis :

 

Sachez que :

- GAME_SEND_DELETE_PERSO_FAILED sert à afficher le message comme quoi la suppression a échouée.

- GAME_SEND_PERSO_LIST sert à la redirection une fois la suppression du personnage terminée.

 

if(_compte.get_persos().get(GUID).get_lvl() <20)
				{
					_compte.deletePerso(GUID);
					_compte.sendListGift();
					SocketManager.GAME_SEND_PERSO_LIST(_out, _compte.get_persos(), _compte.get_subscriber());

 

Bon ici c'est vraiment simple :

On regarde si le personnage a un niveau inférieur à 20, si c'est le cas on le supprime sans demande de réponse secrète, vous pouvez également changer ce niveau.

 

}else{

 

Ou alors, si le personnage a un niveau égal ou supérieur à 20, on va lui comparer les deux réponses secrètes avec cette formule magique :

 

if (reponse.equalsIgnoreCase(reponse2)){

 

En réalité, equalsIgnoreCaserenvoi à soit true, soit false.

False : étant si réponse n'est pas pareil que réponse2.

True : étant si les deux réponses sont identiques.

 

Ici, on compare les deux réponses : Si cette comparaison renvoie à true, on valide et on passe à l'étape suivante (la suppression gnak gnak gnak), sinon on bloque grâce à GAME_SEND_DELETE_PERSO_FAILED.

 

Et enfin on termine en beauté :)

break;

 

Voilou !

 

thx jai suppr mn perso c cool !
  • Like 1

Share this post


Link to post
Share on other sites

Sympa tout ça ! Merci beaucoup :)

 

EDIT : Je demande une aide psychologique !!!! (pas un dév de haut niveau mais quand même besoin là ._.)

Share this post


Link to post
Share on other sites

Sympa tout ça ! Merci beaucoup :)

 

EDIT : Je demande une aide psychologique !!!! (pas un dév de haut niveau mais quand même besoin là ._.)

 

Tu vas me ruiner !

 

J'ai édité afin que tu cesses de saigner des yeux :x

 

J'avais prévenu que c'était assez brutal :3

Share this post


Link to post
Share on other sites