Player is able to join with any password:
#1

pawn Код:
//On the registration dialog:

new INI:File = INI_Open(UserPath(playerid));
                INI_SetTag(File,"Data");
                new HashPass[129];
                WP_Hash(HashPass, sizeof(HashPass), inputtext);
                INI_WriteString(File, "Password", HashPass);
pawn Код:
//On the login dialog:

new hashpass[129];
                WP_Hash(hashpass, sizeof(hashpass), inputtext);
                if(!strcmp(hashpass, PlayerInfo[playerid][pPass], false))
                {
                    INI_ParseFile(UserPath(playerid), "LoadUser_data", .bExtra = true, .extra = playerid);
                    GivePlayerCash(playerid, PlayerInfo[playerid][pCash]);
                    SetSpawnInfo(playerid, 0, PlayerInfo[playerid][pSkin], PlayerInfo[playerid][pPos_x], PlayerInfo[playerid][pPos_y], PlayerInfo[playerid][pPos_z], 269.15, 0, 0, 0, 0, 0, 0);
                    SpawnPlayer(playerid);

                    LoggedIn[playerid] = true;
                }
pawn Код:
forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
    INI_String("Password", PlayerInfo[playerid][pPass], 129);
    INI_Int("Cash", PlayerInfo[playerid][pCash]);
    INI_Int("Kills", PlayerInfo[playerid][pKills]);
    INI_Int("Deaths", PlayerInfo[playerid][pDeaths]);
    INI_Int("Skin", PlayerInfo[playerid][pSkin]);
    INI_Float("XPOS", PlayerInfo[playerid][pPos_x]);
    INI_Float("YPOS", PlayerInfo[playerid][pPos_y]);
    INI_Float("ZPOS", PlayerInfo[playerid][pPos_z]);
    return 1;
}
What could be causing this bug?
Reply
#2

pawn Код:
new INI:File = INI_Open(UserPath(playerid));
                INI_SetTag(File, "data");
                new HashPass[129];
                WP_Hash(HashPass, sizeof(HashPass), inputtext);
                INI_WriteString(File, "Password", HashPass);
pawn Код:
new hashpass[129];
                WP_Hash(hashpass, sizeof(hashpass), inputtext);
                if(!strcmp(hashpass, PlayerInfo[playerid][pPass], false))
                {
                    LoggedIn[playerid] = true;
                    INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
                    GivePlayerCash(playerid, PlayerInfo[playerid][pCash]);
                    SetSpawnInfo(playerid, 0, PlayerInfo[playerid][pSkin], PlayerInfo[playerid][pPos_x], PlayerInfo[playerid][pPos_y], PlayerInfo[playerid][pPos_z], 269.15, 0, 0, 0, 0, 0, 0);
                    SpawnPlayer(playerid);
                }
pawn Код:
forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
    INI_String("Password", PlayerInfo[playerid][pPass], 129);
    if(!LoggedIn[playerid]) return 1;
    INI_Int("Cash", PlayerInfo[playerid][pCash]);
    INI_Int("Kills", PlayerInfo[playerid][pKills]);
    INI_Int("Deaths", PlayerInfo[playerid][pDeaths]);
    INI_Int("Skin", PlayerInfo[playerid][pSkin]);
    INI_Float("XPOS", PlayerInfo[playerid][pPos_x]);
    INI_Float("YPOS", PlayerInfo[playerid][pPos_y]);
    INI_Float("ZPOS", PlayerInfo[playerid][pPos_z]);
    return 1;
}
So basically, you should be loading the password BEFORE they reach the login dialog. It would be recommended that you use this line in OnPlayerConnect:
pawn Код:
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
I have altered the LoadUser function to make sure that it only loads the password if the player is not logged in. This allows you to not worry about any stats being given before login, like cash.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)