Проблема при вводе пароля.
#1

Вот код диалога, который сверяет пароль введёный игроком с паролем записанным в файле. Если я ввожу правильный пароль, в чате пишется Вы вошли в игру!. Если я специально пишу неправильный пароль, то в чате пишется Пароль неверный!. Но если я ничего не напишу в окошко и нажму "Ок", то напишет Вы вошли в игру!. Почему так? Этого ведь не должно, помогите исправить.
PHP код:
if(dialogid == 1)
     {
        if(
response)
        {
            new 
name[25];
            new 
string[31];
            new 
password[31];
            
GetPlayerName(playeridnamesizeof(name));
             
format(stringsizeof(string), "%s.ini"name);
             new 
iniFile ini_openFile(string);
             
ini_getString(iniFile"password"password);
              if(
strcmp(password,inputtext,true) == 0)
             {
                 
SendClientMessage(playerid,COLOR_GREEN,"Вы вошли в игру!");
                 return 
1;
             }
             else
             {
                 
SendClientMessage(playerid,COLOR_RED,"Пароль неверный!");
                 
ini_closeFile(iniFile);
             }
        }
         else
        {
        
SendClientMessage(playerid,COLOR_RED,"Отказ от авторизации!");
        
ini_closeFile(iniFile);
        
Kick(playerid);
        }
        
      } 
Reply
#2

pawn Код:
if(strcmp(password,inputtext,true) == 0 && strlen(inputtext) > 0)
Reply
#3

В strcmp есть баг, поэтому ******(вроде) предлогает использовать это:

pawn Код:
stock strcmpEx(const string1[], const string2[], bool:ignorecase=false, length=cellmax)
{
    if (string1[0])
    {
        if (string2[0])
        {
            return strcmp(string1, string2, ignorecase, length);
        }
        else
        {
            // Positive as st1 is greater (strcmp spec).
            return 1;
        }
    }
    else
    {
        if (string2[0])
        {
            // Negative as str2 is greater.
            return -1;
        }
        else
        {
            // The strings are the same (empty).
            return 0;
        }
    }
}
#define strcmp strcmpEx
Reply
#4

Сделайте вот так:

pawn Код:
if(dialogid == 1)
     {
        if(response)
        {
            if(!strlen(inputtext))return Сюда ShowPlayerDialog который требует пароль;
            new name[25];
            new string[31];
            new password[31];
            GetPlayerName(playerid, name, sizeof(name));
             format(string, sizeof(string), "%s.ini", name);
             new iniFile = ini_openFile(string);
             ini_getString(iniFile, "password", password);
              if(strcmp(password,inputtext,true) == 0)
             {
                 SendClientMessage(playerid,COLOR_GREEN,"Вы вошли в игру!");
                 return 1;
             }
             else
             {
                 SendClientMessage(playerid,COLOR_RED,"Пароль неверный!");
                 ini_closeFile(iniFile);
             }
        }
         else
        {
        SendClientMessage(playerid,COLOR_RED,"Отказ от авторизации!");
        ini_closeFile(iniFile);
        Kick(playerid);
        }
         
      }
Reply
#5

Всем спасибо, проблему решил!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)