GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Franky™ le 26 Avril 2009, 12:00:07

Titre: [RESOLU] connection avec mot de passe
Posté par: Franky™ le 26 Avril 2009, 12:00:07
Salut à mes futurs sauveur ^^

bref.

J'ai un problème au niveau de mon système de connection.
J'ai le système de Seif.

bref.

Enfaite quand un joueur s'enregistre sa va parfaitement bien, il gagne de l'argent, et quand il quitte sa "sauvegarde".

Mais ça depant de son mot de passe.
car en fesant des test sur mon local, j'ai pu m'appercevoirs que la connection en mot de passe bug.
J'ai tester avec un mdp a 4 lettre, et tout fonctionne parfaitement...
Mais avec un mdp a 18 lettres, rien de fonctionne... ^^

je sais pas ou règler ça.

je vous met quelque fonction avec les mot de passe:

aPassword[128],
strmid(InfoJoueur[playerid][aPassword], password, 0, strlen(password), 255);
new var[128];
format(var, 128, "Password=%s\n", InfoJoueur[playerid][aPassword]);fwrite(hFile, var);

new PassData[256];
    new keytmp[256], valtmp[256];
    fread( UserFile , PassData , sizeof( PassData ) );
    keytmp = ini_GetKey( PassData );
    if( strcmp( keytmp , "Password" , true ) == 0 )
{
valtmp = ini_GetValue( PassData );
strmid(InfoJoueur[playerid][aPassword], valtmp, 0, strlen(valtmp)-1, 255);
}
if(strcmp(InfoJoueur[playerid][aPassword],password, true ) == 0 )
{
for(new p = 0; p < strlen(InfoJoueur[playerid][aPassword]); p++)
{
    password[p] = '?';
}

Je sais pas si c'est ici qu'il faut règler la longeur du mdp.
si c'est ici, j'ai pas trouvé.

Si vous pourriez m'aider sa serai cool ^^
Merci d'avance.

++ Franky
Titre: Re : [BUG] connection avec mot de passe
Posté par: Azz45 le 26 Avril 2009, 12:47:28
Il me semble que c'est cette ligne là :

if( strcmp( keytmp , "Password" , true ) == 0 )

Je suis pas sur du tout ! , mais je crois que la longeur c'est après un if
Titre: Re : [BUG] connection avec mot de passe
Posté par: Ssk le 26 Avril 2009, 13:46:02
ca n' as rien du tout avoir avec le  if
Titre: Re : [BUG] connection avec mot de passe
Posté par: Franky™ le 26 Avril 2009, 13:52:02
Si c'est cette ligne, comment je la défini la longueur ?

++ Franky
Titre: Re : [BUG] connection avec mot de passe
Posté par: Ssk le 26 Avril 2009, 13:54:15
essaye d augmenter la taille des tes variable de 128 a 256 et celle de 256 a 512
Titre: Re : [BUG] connection avec mot de passe
Posté par: Franky™ le 26 Avril 2009, 14:03:59
Non ça ne fonctionne toujours pas.


++ Franky
Titre: Re : [BUG] connection avec mot de passe
Posté par: Ssk le 26 Avril 2009, 14:29:37
peut etre que le bug ne vient pas de la commande
Titre: Re : [BUG] connection avec mot de passe
Posté par: S!m le 26 Avril 2009, 17:00:04
Salut,

personnellement, je n'.aime pas trop cette façon de procéder.. ça me semble un peu pèle mêle et compliqué pour rien.

déjà, si en partant tu ne vérifie qu'à la première ligne si la « key » est « password », il ne te sert à rien de la vérifier....

mes questions:

new PassData[256];
    new keytmp[256], valtmp[256];//beaucoup de variables....
    fread( UserFile , PassData , sizeof( PassData ) );//ici tu récupère de ton fichier, ca va
    keytmp = ini_GetKey( PassData );//ici tu récupère la key, ca va, parcontre ces deux ligne (fread et ini_getkey devraient être dans une loop jusqu'à trouver la bonne ligne
    if( strcmp( keytmp , "Password" , true ) == 0 )//vérification si c'est le bon key, ca va
{
valtmp = ini_GetValue( PassData );//récupération du string
strmid(InfoJoueur[playerid][aPassword], valtmp, 0, strlen(valtmp)-1, 255);//pourquoi strmid? un format aurait fait un bon boulot (tu récupère le string entier.....)
}
if(strcmp(InfoJoueur[playerid][aPassword],password, true ) == 0 )//pourquoi ne pas avoir testé directement le valtmp?
{
for(new p = 0; p < strlen(InfoJoueur[playerid][aPassword]); p++)
{
    password[p] = '?';//pourquoi placer des ? PARTOUT
}

bref, je te recommande un code du genre:

new PassData[256];
do
{
fread( UserFile , PassData , sizeof( PassData ) );//ici tu récupère de ton fichier, ca va
}
while(strcmp( keytmp , "Password" , true,  8));//vérification si c'est le bon key, ca va
PassData = ini_GetValue( PassData );//pourquoi utiliser une autre variable alors que l'on a plus besoin de cette "vieille" variable?
if(strcmp(PassData,password, true ) == 0 )//pourquoi ne pas avoir testé directement le valtmp?
{
format(InfoJoueur[playerid][aPassword], 128 /*je crois*/, "%s",valtmp);
.....
}
else//s'il ne s'agit pas du bon mot de passe
{
.....
}

voilà

en espérant que tu arrive à quelque chose avec ce code...
PS. Il est fort probable que je me soit complètement gouré, le code que tu as posté est plutôt incomplet...

++Sim++
Titre: Re : [BUG] connection avec mot de passe
Posté par: Eloctro le 26 Avril 2009, 17:39:01
Ton true mais le a 20 :

       if( strcmp( keytmp , "Password" , true ) == 20 )//Fait le aux autres aussi

Et si sa marche pas j'ai découvert y a pas longtemp :

         strmid(InfoJoueur[playerid][aPassword], valtmp, 0, strlen(valtmp)-1, 255);


Que ceci peut modifier la grandeur de la variable eisseille en supprimant le -1 ou en mettant 20 a la place


car enfaite moi j'avai enregistré un pseudo et quand je l'affichait j'avais le nom de la variable sa me fesait :

pseudo=Coco76

et le 0 que je t'est mis correspond au charatere de devant donc il y a  7 charactere donc je remplace 0 par 7 mais c'est un exemple sa n'a rien avoir avec ton problème sa toi c'est le -1 qui t'intéresse .
Titre: Re : [BUG] connection avec mot de passe
Posté par: Franky™ le 26 Avril 2009, 18:33:25
Sim, je préfère de rien touché a se qu'il y a déjà.
Tout les systeme est comme ça.

Coco je vais tester ça, je te tien au courant

++ Franky
Titre: Re : [BUG] connection avec mot de passe
Posté par: Syg le 26 Avril 2009, 21:58:46
Pourquoi utiliser la fonction strmid alors que tu veux simplement copier le mot de passe lu dans la variable InfoJoueur[playerid][aPassword].
Une simple égalité aurai suffit.

D'ailleurs ton erreur vient certainement de là, la fonction strmid copie les caractères que tu lui demandes de copier mais ne rajoute pas de caractère de fin de chaîne dans la variable de destination.

Prenons un exemple :
valtmp = "PASS\0" (il y a 5 caractères dans cette chaîne, P, A, S, S et le zéro de fin de chaîne=\0).
InfoJoueur[playerid][aPassword]="OLDPASS\0" (mot de passe du joueur connecté précédemment avec le même ID)

strmid va copier du caractère 0 au caractère 3 (c'est à dire le deuxième S) dans InfoJoueur[playerid][aPassword].
Donc InfoJoueur[playerid][aPassword] ="PASSASS\0"
Ce qui n'est pas vraiment ce qu'on a lu dans le fichier.

La solution de coco76 est peut-être la bonne mais il faudra vérifier que la fonction strmid copie bien le 0 de fin de chaîne.

Une autre solution, plus jolie et qui rejoint ce que Sim a dit, c'est de faire :
InfoJoueur[playerid][aPassword] = ini_GetValue( PassData );au lieu de
valtmp = ini_GetValue( PassData );
++
Syg
Titre: Re : [BUG] connection avec mot de passe
Posté par: Franky™ le 26 Avril 2009, 22:15:25
Rien ne fonctionne, sa me fait toujours, mauvais mot de passe et la tune ne se charge pas.

Enfaite j'avais pris se FS que j'ai intergrer a mon GM.

http://forum.sa-mp.com/index.php?topic=71000.0 (http://forum.sa-mp.com/index.php?topic=71000.0)
Fait par Seif.

J'ai tout laisser par defaut et c'est que hier que j'ai decouvert se bug.

++ Franky

Titre: Re : [BUG] connection avec mot de passe
Posté par: cristab le 27 Avril 2009, 14:12:25
j'ai deja tester ce fs mais pas moyen qu'il fonctionne normalement
Titre: Re : [BUG] connection avec mot de passe
Posté par: Franky™ le 28 Avril 2009, 01:27:38
Salut,

J'ai résolu mon problème lol, tout seul comme un grand hihi

Enfaite c'etais une autre fonctionne qui fesait buguer la connection.

Mais merci de votre aide quand même.

++ Franky
Titre: Re : [RESOLU] connection avec mot de passe
Posté par: S!m le 28 Avril 2009, 01:38:20
Salut,

par simple curiosité, s'agissait-il d'une fonction de ce fs?

il serait pratique d'en savoir plus...

++Sim++
Titre: Re : [RESOLU] connection avec mot de passe
Posté par: Franky™ le 28 Avril 2009, 10:40:49
Non du tout, c'est une fonction que j'avais rajouté dans mon GM.

++ Franky