Jump to content
×
×
  • Create New...

[JAVA] Solution de la suppression du personnage


Tituc
 Share

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 !
  • J'adore 1
Link to comment
Share on other sites

  • Replies 3
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

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

Link to comment
Share on other sites

  • 1 year later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share



Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.