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
-
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
-
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
-
ca n' as rien du tout avoir avec le if
-
Si c'est cette ligne, comment je la défini la longueur ?
++ Franky
-
essaye d augmenter la taille des tes variable de 128 a 256 et celle de 256 a 512
-
Non ça ne fonctionne toujours pas.
++ Franky
-
peut etre que le bug ne vient pas de la commande
-
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++
-
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 .
-
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
-
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
-
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
-
j'ai deja tester ce fs mais pas moyen qu'il fonctionne normalement
-
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
-
Salut,
par simple curiosité, s'agissait-il d'une fonction de ce fs?
il serait pratique d'en savoir plus...
++Sim++
-
Non du tout, c'est une fonction que j'avais rajouté dans mon GM.
++ Franky