Уже как пол года не могу решить одну проблему связанную со входом в аккаунт. В большинстве (а может и во всех) систем регистрации при входе стоит такая проверка на правильность пароля:
if(strcmp(PlayerInfo[playerid][pPass], inputtext, true, strlen(valtmp)-1) == 0)
Если это условие верно, то есть пароль который был ранее внесён в PlayerInfo[playerid][pPass] совподает с паролем который игрок написал в inputtext то начинается считывание информации о игроке. Но я люблю когда в файле игрока всё было окуратно и что бы искать ничего не надо было а всё было видно сразу. Я сделал сохранение информации игрока в таком виде: format(dat,128,"Password[%s]\n\r",WFPlayerInfo[playerid][pWFPass]); fwrite(Regis,dat);
format(dat,128,"Money[%d]\n\r",WFPlayerInfo[playerid][pWFMoney]); fwrite(Regis,dat);
format(dat,128,"Kills[%d]\n\r",WFPlayerInfo[playerid][pWFKills]); fwrite(Regis,dat);
format(dat,128,"Deaths[%d]\n\r",WFPlayerInfo[playerid][pWFDeaths]); fwrite(Regis,dat);
В текстовом файле всё окуратно написано, и представлено в таком виде:
Password[pass]
Money[0]
Kills[0]
Deaths[0]
Но при считывании информации пароль иногда не считывается вообще. Считывание пароля вот:
strmid(WFPlayerInfo[playerid][pWFPass], valtmp, 9, strfind(valtmp,"]",true), 256);
Перед этим канечно стоит открытие файла для чтение и т.д. и т.п.
Ну а потом условие:
if(strcmp(PlayerInfo[playerid][pPass], inputtext, true, strlen(valtmp)-1) == 0)
В чём проблема не могу разобраться. Пароль иногда не считывается и соответственно вся информация после выхода игрока обнуляется все поля пусты, вместе с паролем.
Для считывания информации я использую:
stock GetStats( line[] )
{
new keyRes[128];
keyRes[0] = 0;
if( strfind( line , "[" , true ) == -1 ) return keyRes;
strmid( keyRes , line , 0 , strfind( line , "[" , true ) , sizeof( keyRes) );
return keyRes;
}
stock GetStatsVal( line[] )
{
new valRes[128];
valRes[0]=0;
if( strfind( line , "[" , true ) == -1 ) return valRes;
strmid( valRes , line , strfind( line , "[" , true )+1 , strfind( line , "]" , true ) , sizeof( valRes ) );
return valRes;
}
Кто поможет решить проблему поставлю медаль и плюс канечно же.
Для проверки, считался пароль или нет я поставил вывод сообщения. О том что находится в переменной PlayerInfo[playerid][pPass]. Не всегда но иногда в ней стоит 0. То есть пароль не считывается. Но по моему в строке strmid(WFPlayerInfo[playerid][pWFPass], valtmp, 9, strfind(valtmp,"]",true), 256); всё правильно написано.
Добавлено (06.11.2010, 09:37)
---------------------------------------------
Неужели никто не знает?