Password problem.
#1

Hello.

I have coded my saving system using Y_INI but I have came across a problem with my password on login. I can enter an incorrect password and it would still login. What could be my problem? Is it something else I coded in my script conflicting with the saving system? I don't think so. Please see if I've coded anything wrong.


pawn Код:
#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2

forward LoadUser_data(playerid,name[],value[]);

new LoginAttempts[MAX_PLAYERS] = 0;

#define PATH "Accounts/%s.ini"
enum pInfo
{
    RegisteredIP[16],
    Administrator,
    Password,
    Money,
    Kills,
    Deaths
}
new PlayerInfo[MAX_PLAYERS][pInfo];
new bool: Logged[MAX_PLAYERS] = false;

stock UserPath(playerid)
{
    new string[128],playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,sizeof(playername));
    format(string,sizeof(string),PATH,playername);
    return string;
}

stock udb_hash(buf[]) {
    new length=strlen(buf);
    new s1 = 1;
    new s2 = 0;
    new n;
    for (n=0; n<length; n++)
    {
       s1 = (s1 + buf[n]) % 65521;
       s2 = (s2 + s1)     % 65521;
    }
    return (s2 << 16) + s1;
}

public LoadUser_data(playerid,name[],value[])
{
    INI_String("RegisteredIP",PlayerInfo[playerid][RegisteredIP], 16);
    INI_Int("Administrator",PlayerInfo[playerid][Administrator]);
    INI_Int("Password",PlayerInfo[playerid][Password]);
    INI_Int("Money",PlayerInfo[playerid][Money]);
    INI_Int("Kills",PlayerInfo[playerid][Kills]);
    INI_Int("Deaths",PlayerInfo[playerid][Deaths]);
    return 1;
}

public OnPlayerConnect(playerid)
{
    if(fexist(UserPath(playerid)))
    {
        INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
        new Log[128], name[MAX_PLAYER_NAME];
        GetPlayerName(playerid, name, sizeof(name));
        strreplace(name, '_', ' ');
        format(Log, sizeof(Log), ""COL_WHITE"Welcome back. Please enter your password below to login. \n\nUsername: %s \n\n", name);
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"Login",Log,"Login","Quit");
    }
    else
    {
        new Log[128], name[MAX_PLAYER_NAME];
        GetPlayerName(playerid, name, sizeof(name));
        strreplace(name, '_', ' ');
        format(Log, sizeof(Log), ""COL_WHITE"Welcome to. Please register an account by your desired password. \n\nUsername: %s \n\n", name);
        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"Registration",Log,"Register","Quit");
    }
    Logged[playerid] = false;
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    if(Logged[playerid] == true)
    {
    new INI:File = INI_Open(UserPath(playerid));
    INI_SetTag(File,"data");
    INI_WriteInt(File,"Administrator",PlayerInfo[playerid][Administrator]);
    INI_WriteInt(File,"Money",GetPlayerMoney(playerid));
    INI_WriteInt(File,"Kills",PlayerInfo[playerid][Kills]);
    INI_WriteInt(File,"Deaths",PlayerInfo[playerid][Deaths]);
    INI_Close(File);
    }
    Logged[playerid] = false;
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch( dialogid )
    {
        case DIALOG_REGISTER:
        {
            if (!response) return Kick(playerid);
            if(response)
            {
                if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, ""COL_WHITE"Registration",""COL_WHITE"You have entered an invalid password.\n\nPlease use the correct password below to register an account.","Register","Quit");
                new INI:File = INI_Open(UserPath(playerid));

                new PlayerIP[16];
                GetPlayerIp(playerid, PlayerIP, sizeof(PlayerIP));
               
                INI_SetTag(File,"data");
                INI_WriteString(File,"RegisteredIP", PlayerIP);
                INI_WriteInt(File,"Administrator",0);
                INI_WriteInt(File,"Password",udb_hash(inputtext));
                INI_WriteInt(File,"Money",0);
                INI_WriteInt(File,"Kills",0);
                INI_WriteInt(File,"Deaths",0);
                INI_Close(File);
               
                ClearChat(playerid);
                GivePlayerMoney(playerid, 10000);
                Logged[playerid] = true;
            }
        }
        case DIALOG_LOGIN:
        {
            if ( !response ) return Kick ( playerid );
            if( response )
            {
                if(udb_hash(inputtext) == PlayerInfo[playerid][Password])
                {
                    INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
                    Logged[playerid] = true;

                    GivePlayerMoney(playerid, PlayerInfo[playerid][Money]);
                    ClearChat(playerid);
                }
                else
                {
                   new Log[128], name[MAX_PLAYER_NAME];
                   GetPlayerName(playerid, name, sizeof(name));
                   strreplace(name, '_', ' ');
                   format(Log, sizeof(Log), "", name);
                   ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,Log,""COL_WHITE"Welcome back. Please enter your password below to login. \n\nUsername: %s \n\nPassword: Wrong Password","Login","Quit");
                   LoginAttempts[playerid]++;

                   if(LoginAttempts[playerid] > 2)
                   return SendClientMessage(playerid, 0xC9262EFF, "You have been kicked from the server. You have failed to login to your account."), Kick(playerid);
                }
                return 1;
            }
        }
    }
    return 1;
}
Reply
#2

Still needing some help please.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)