Strcmp
#1

PHP Code:
if(dialogid == 1){
    if(!
strval(inputtext)) return DLG(playerid,0,DIALOG_STYLE_PASSWORD,"Login","{d6d681}Hello there and welcome back to Gangsta Regeneration Roleplay!\nPlease enter your current password to get access to your account.","Login","");
    if(!
response){MSG(playerid,C_RED,"See you!"); SetTimerEx("KickDelay"1000false"i"playerid);}
    new 
hashpass[129]; //Will create a new variable to hash his/her password
    
WP_Hash(hashpass,sizeof(hashpass),inputtext); //Will hash inputted password
    
if(!strcmp(hashpassDB[playerid][Password], false)){
    if(
FirstTry[playerid] == false && LastTry[playerid] == false){MSG(playerid,C_RED,"[ERROR] {ff7777}Wrong password! 2 attempts left."); FirstTry[playerid] = trueDLG(playerid,1,DIALOG_STYLE_PASSWORD,"Login","{d6d681}Hello there and welcome back to Gangsta Regeneration Roleplay!\nPlease enter your current password to get access to your account.","Login",""); return 1;}
    if(
FirstTry[playerid] == true){MSG(playerid,C_RED,"[ERROR] {ff7777}Wrong password! 1 attempt left."); FirstTry[playerid] = falseLastTry[playerid] = trueDLG(playerid,1,DIALOG_STYLE_PASSWORD,"Login","{d6d681}Hello there and welcome back to Gangsta Regeneration Roleplay!\nPlease enter your current password to get access to your account.","Login",""); return 1;}
    if(
LastTry[playerid] == true){MSG(playerid,C_RED,"[ERROR] {ff7777}Wrong password! See you."); SetTimerEx("KickDelay"1000false"i"playerid);}
    return 
1;} 
Everytime even the password is right or wrong it's shows me that the password is wrong, if i'm removing the ! from the !strcmp it's showing that the password is right even if its right and even if it's wrong.
Reply
#2

I'm pretty sure that "DB[playerid][Password]" is empty; therefore, strcmp returns a "match" - read the wiki.
Reply
#3

Quote:
Originally Posted by SickAttack
View Post
I'm pretty sure that "DB[playerid][Password]" is empty; therefore, strcmp returns a "match" - read the wiki.
actually it isn't take a look please:

PHP Code:
public OnPlayerConnect(playerid)
{
    
INI_ParseFile(pFile(playerid),"LoadUser_%s",.bExtra true, .extra playerid);
    
SetPlayerPos(playerid1742.9839,-1862.0048,13.5768);
    
SetPlayerFacingAngle(playerid,0);
    
SetPlayerCameraPos(playerid1742.8409,-1843.0232,18.6594);
    
SetPlayerCameraLookAt(playerid1742.9839,-1862.0048,13.5768);
    
GameTextForPlayer(playerid"Loading Database"20006);
    
SetTimerEx("LoginDelay"1500false"i"playerid);
    return 
1;

PHP Code:
forward LoadUser_data(playerid,name[],value[]);
public 
LoadUser_data(playerid,name[],value[])
{
INI_String("Password",DB[playerid][Password],129);
return 
1;} 
Reply
#4

Quote:
Originally Posted by Lirbo
View Post
actually it isn't take a look please:

PHP Code:
public OnPlayerConnect(playerid)
{
    
INI_ParseFile(pFile(playerid),"LoadUser_%s",.bExtra true, .extra playerid);
    
SetPlayerPos(playerid1742.9839,-1862.0048,13.5768);
    
SetPlayerFacingAngle(playerid,0);
    
SetPlayerCameraPos(playerid1742.8409,-1843.0232,18.6594);
    
SetPlayerCameraLookAt(playerid1742.9839,-1862.0048,13.5768);
    
GameTextForPlayer(playerid"Loading Database"20006);
    
SetTimerEx("LoginDelay"1500false"i"playerid);
    return 
1;

PHP Code:
forward LoadUser_data(playerid,name[],value[]);
public 
LoadUser_data(playerid,name[],value[])
{
INI_String("Password",DB[playerid][Password],129);
return 
1;} 
Debug your script, or take this as a reference to either fix yours or do whatever you want with it:
pawn Code:
// [ DEVELOPMENT GAMEMODE ]

// INCLUDES:

#include <a_samp>
#include <YSI\y_ini>

// NATIVES:

// WHIRLPOOL:

native WP_Hash(buffer[], len, const str[]);

// UNDEFINES:

#undef isnull

// DEFINES:

// FUNCTIONS:

#define function%0(%1) forward%0(%1); public%0(%1)
#define isnull(%1) ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))

// DIALOGS:

#define DIALOG_REGISTER 0
#define DIALOG_LOGIN 1

// DATABASE:

#define USER_TAG "player_data"
#define USER_PASSWORD "password"
#define USER_SCORE "score"
#define USER_CASH "cash"
#define USER_KILLS "kills"
#define USER_DEATHS "deaths"
#define USER_VIP_LEVEL "vip_level"
#define USER_ADMIN_LEVEL "admin_level"

// ARRAYS AND ENUMERATORS:

enum eUserInfo
{
    user_password[129],
    user_score,
    user_cash,
    user_kills,
    user_deaths,
    user_vip_level,
    user_admin_level
}

new aUserInfo[MAX_PLAYERS][eUserInfo];

// VARIABLES:

// STATES:

new bool:sSignedIn[MAX_PLAYERS] = false;

// MAIN:

main()
{
    print("Development Mode: ini_login_system.amx");
}

// CALLBACKS:

public OnGameModeInit()
{
    return 1;
}

public OnGameModeExit()
{
    return 1;
}

public OnPlayerConnect(playerid)
{
    if(fexist(UserPath(playerid)))
    {
        INI_ParseFile(UserPath(playerid), "LoadUserData", .bExtra = true, .extra = playerid);
        ShowLoginDialog(playerid, "");
    }
    else ShowRegisterDialog(playerid, "");
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    if(IsPlayerSignedIn(playerid))
    {
        new INI:file = INI_Open(UserPath(playerid));
        INI_SetTag(file, USER_TAG);
        INI_WriteInt(file, USER_SCORE, GetPlayerScore(playerid));
        INI_WriteInt(file, USER_CASH, GetPlayerMoney(playerid));
        INI_WriteInt(file, USER_KILLS, aUserInfo[playerid][user_kills]);
        INI_WriteInt(file, USER_DEATHS, aUserInfo[playerid][user_deaths]);
        INI_WriteInt(file, USER_VIP_LEVEL, aUserInfo[playerid][user_vip_level]);
        INI_WriteInt(file, USER_ADMIN_LEVEL, aUserInfo[playerid][user_admin_level]);
        INI_Close(file);
    }

    ResetPlayerVariables(playerid);
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case DIALOG_REGISTER:
        {
            if(!response) return KickPlayer(playerid);
            if(response)
            {
                if(isnull(inputtext)) return ShowRegisterDialog(playerid, "Enter a password.");

                new hash[129];
                WP_Hash(hash, sizeof(hash), inputtext);

                new INI:file = INI_Open(UserPath(playerid));
                INI_SetTag(file, USER_TAG);
                INI_WriteString(file, USER_PASSWORD, hash);
                INI_WriteInt(file, USER_SCORE, 0);
                INI_WriteInt(file, USER_CASH, 0);
                INI_WriteInt(file, USER_KILLS, 0);
                INI_WriteInt(file, USER_DEATHS, 0);
                INI_WriteInt(file, USER_VIP_LEVEL, 0);
                INI_WriteInt(file, USER_ADMIN_LEVEL, 0);
                INI_Close(file);

                sSignedIn[playerid] = true;

                return SendClientMessage(playerid, -1, "You have successfully registered an account.");
            }
        }
        case DIALOG_LOGIN:
        {
            if(!response) return KickPlayer(playerid);
            if(response)
            {
                if(isnull(inputtext)) return ShowLoginDialog(playerid, "Enter a password.");

                new hash[129];
                WP_Hash(hash, sizeof(hash), inputtext);

                if(strcmp(aUserInfo[playerid][user_password], hash, false) == 0)
                {
                    INI_ParseFile(UserPath(playerid), "LoadUserData", .bExtra = true, .extra = playerid);
                    SetPlayerScore(playerid, aUserInfo[playerid][user_score]);
                    GivePlayerMoney(playerid, aUserInfo[playerid][user_cash]);

                    sSignedIn[playerid] = true;

                    return SendClientMessage(playerid, -1, "You have successfully logged into your account.");
                }
                else return ShowLoginDialog(playerid, "Incorrect password.");
            }
        }
    }
    return 1;
}

// FUNCTIONS:

stock ResetPlayerVariables(playerid)
{
    // ARRAYS AND ENUMERATORS:

    aUserInfo[playerid][user_password] = EOS;
    aUserInfo[playerid][user_score] = 0;
    aUserInfo[playerid][user_cash] = 0;
    aUserInfo[playerid][user_kills] = 0;
    aUserInfo[playerid][user_deaths] = 0;
    aUserInfo[playerid][user_vip_level] = 0;
    aUserInfo[playerid][user_admin_level] = 0;

    // PER-PLAYER VARIABLES:

    // STATES:

    sSignedIn[playerid] = false;
    return 1;
}

function LoadUserData(playerid, name[], value[])
{
    INI_String(USER_PASSWORD, aUserInfo[playerid][user_password], 129);
    INI_Int(USER_SCORE, aUserInfo[playerid][user_score]);
    INI_Int(USER_CASH, aUserInfo[playerid][user_cash]);
    INI_Int(USER_KILLS, aUserInfo[playerid][user_kills]);
    INI_Int(USER_DEATHS, aUserInfo[playerid][user_deaths]);
    INI_Int(USER_VIP_LEVEL, aUserInfo[playerid][user_vip_level]);
    INI_Int(USER_ADMIN_LEVEL, aUserInfo[playerid][user_admin_level]);
    return 1;
}

stock ShowRegisterDialog(playerid, error[])
{
    new string[256];
    strcat(string, "Welcome. This account is not registered.\n");
    strcat(string, "Enter a password below to register an account.");
    if(!isnull(error)) format(string, sizeof(string), "%s\n\n{FF0000}%s", string, error);
    return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Register", string, "Register", "Quit");
}

stock ShowLoginDialog(playerid, error[])
{
    new string[256];
    strcat(string, "Welcome back. This account is already registered.\n");
    strcat(string, "Insert your password to log into your account.");
    if(!isnull(error)) format(string, sizeof(string), "%s\n\n{FF0000}%s", string, error);
    return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", string, "Login", "Quit");
}

stock KickPlayer(playerid) return SetTimerEx("KickPlayerEx", 100, false, "i", playerid);

function KickPlayerEx(playerid) return Kick(playerid);

stock UserPath(playerid)
{
    new string[128], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "/Users/%s.ini", name);
    return string;
}

function bool:IsPlayerSignedIn(playerid) return sSignedIn[playerid];
Reply
#5

Quote:
Originally Posted by SickAttack
View Post
Debug your script, or take this as a reference to either fix yours or do whatever you want with it:
pawn Code:
// [ DEVELOPMENT GAMEMODE ]

// INCLUDES:

#include <a_samp>
#include <YSI\y_ini>

// NATIVES:

// WHIRLPOOL:

native WP_Hash(buffer[], len, const str[]);

// UNDEFINES:

#undef isnull

// DEFINES:

// FUNCTIONS:

#define function%0(%1) forward%0(%1); public%0(%1)
#define isnull(%1) ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))

// DIALOGS:

#define DIALOG_REGISTER 0
#define DIALOG_LOGIN 1

// DATABASE:

#define USER_TAG "player_data"
#define USER_PASSWORD "password"
#define USER_SCORE "score"
#define USER_CASH "cash"
#define USER_KILLS "kills"
#define USER_DEATHS "deaths"
#define USER_VIP_LEVEL "vip_level"
#define USER_ADMIN_LEVEL "admin_level"

// ARRAYS AND ENUMERATORS:

enum eUserInfo
{
    user_password[129],
    user_score,
    user_cash,
    user_kills,
    user_deaths,
    user_vip_level,
    user_admin_level
}

new aUserInfo[MAX_PLAYERS][eUserInfo];

// VARIABLES:

// STATES:

new bool:sSignedIn[MAX_PLAYERS] = false;

// MAIN:

main()
{
    print("Development Mode: ini_login_system.amx");
}

// CALLBACKS:

public OnGameModeInit()
{
    return 1;
}

public OnGameModeExit()
{
    return 1;
}

public OnPlayerConnect(playerid)
{
    if(fexist(UserPath(playerid)))
    {
        INI_ParseFile(UserPath(playerid), "LoadUserData", .bExtra = true, .extra = playerid);
        ShowLoginDialog(playerid, "");
    }
    else ShowRegisterDialog(playerid, "");
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    if(IsPlayerSignedIn(playerid))
    {
        new INI:file = INI_Open(UserPath(playerid));
        INI_SetTag(file, USER_TAG);
        INI_WriteInt(file, USER_SCORE, GetPlayerScore(playerid));
        INI_WriteInt(file, USER_CASH, GetPlayerMoney(playerid));
        INI_WriteInt(file, USER_KILLS, aUserInfo[playerid][user_kills]);
        INI_WriteInt(file, USER_DEATHS, aUserInfo[playerid][user_deaths]);
        INI_WriteInt(file, USER_VIP_LEVEL, aUserInfo[playerid][user_vip_level]);
        INI_WriteInt(file, USER_ADMIN_LEVEL, aUserInfo[playerid][user_admin_level]);
        INI_Close(file);
    }

    ResetPlayerVariables(playerid);
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case DIALOG_REGISTER:
        {
            if(!response) return KickPlayer(playerid);
            if(response)
            {
                if(isnull(inputtext)) return ShowRegisterDialog(playerid, "Enter a password.");

                new hash[129];
                WP_Hash(hash, sizeof(hash), inputtext);

                new INI:file = INI_Open(UserPath(playerid));
                INI_SetTag(file, USER_TAG);
                INI_WriteString(file, USER_PASSWORD, hash);
                INI_WriteInt(file, USER_SCORE, 0);
                INI_WriteInt(file, USER_CASH, 0);
                INI_WriteInt(file, USER_KILLS, 0);
                INI_WriteInt(file, USER_DEATHS, 0);
                INI_WriteInt(file, USER_VIP_LEVEL, 0);
                INI_WriteInt(file, USER_ADMIN_LEVEL, 0);
                INI_Close(file);

                sSignedIn[playerid] = true;

                return SendClientMessage(playerid, -1, "You have successfully registered an account.");
            }
        }
        case DIALOG_LOGIN:
        {
            if(!response) return KickPlayer(playerid);
            if(response)
            {
                if(isnull(inputtext)) return ShowLoginDialog(playerid, "Enter a password.");

                new hash[129];
                WP_Hash(hash, sizeof(hash), inputtext);

                if(strcmp(aUserInfo[playerid][user_password], hash, false) == 0)
                {
                    INI_ParseFile(UserPath(playerid), "LoadUserData", .bExtra = true, .extra = playerid);
                    SetPlayerScore(playerid, aUserInfo[playerid][user_score]);
                    GivePlayerMoney(playerid, aUserInfo[playerid][user_cash]);

                    sSignedIn[playerid] = true;

                    return SendClientMessage(playerid, -1, "You have successfully logged into your account.");
                }
                else return ShowLoginDialog(playerid, "Incorrect password.");
            }
        }
    }
    return 1;
}

// FUNCTIONS:

stock ResetPlayerVariables(playerid)
{
    // ARRAYS AND ENUMERATORS:

    aUserInfo[playerid][user_password] = EOS;
    aUserInfo[playerid][user_score] = 0;
    aUserInfo[playerid][user_cash] = 0;
    aUserInfo[playerid][user_kills] = 0;
    aUserInfo[playerid][user_deaths] = 0;
    aUserInfo[playerid][user_vip_level] = 0;
    aUserInfo[playerid][user_admin_level] = 0;

    // PER-PLAYER VARIABLES:

    // STATES:

    sSignedIn[playerid] = false;
    return 1;
}

function LoadUserData(playerid, name[], value[])
{
    INI_String(USER_PASSWORD, aUserInfo[playerid][user_password], 129);
    INI_Int(USER_SCORE, aUserInfo[playerid][user_score]);
    INI_Int(USER_CASH, aUserInfo[playerid][user_cash]);
    INI_Int(USER_KILLS, aUserInfo[playerid][user_kills]);
    INI_Int(USER_DEATHS, aUserInfo[playerid][user_deaths]);
    INI_Int(USER_VIP_LEVEL, aUserInfo[playerid][user_vip_level]);
    INI_Int(USER_ADMIN_LEVEL, aUserInfo[playerid][user_admin_level]);
    return 1;
}

stock ShowRegisterDialog(playerid, error[])
{
    new string[256];
    strcat(string, "Welcome. This account is not registered.\n");
    strcat(string, "Enter a password below to register an account.");
    if(!isnull(error)) format(string, sizeof(string), "%s\n\n{FF0000}%s", string, error);
    return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Register", string, "Register", "Quit");
}

stock ShowLoginDialog(playerid, error[])
{
    new string[256];
    strcat(string, "Welcome back. This account is already registered.\n");
    strcat(string, "Insert your password to log into your account.");
    if(!isnull(error)) format(string, sizeof(string), "%s\n\n{FF0000}%s", string, error);
    return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", string, "Login", "Quit");
}

stock KickPlayer(playerid) return SetTimerEx("KickPlayerEx", 100, false, "i", playerid);

function KickPlayerEx(playerid) return Kick(playerid);

stock UserPath(playerid)
{
    new string[128], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    format(string, sizeof(string), "/Users/%s.ini", name);
    return string;
}

function bool:IsPlayerSignedIn(playerid) return sSignedIn[playerid];
every pw counts as correct password, even if it's wrong.
PHP Code:
if(dialogid == 1){
    if(!
response) return Kick(playerid);
    if(
response){
    if(
isnull(inputtext)) return DLG(playerid,1,DIALOG_STYLE_PASSWORD,"Registration","Enter a password.","Register","");
    new 
hash[129];
    
WP_Hash(hashsizeof(hash), inputtext);
    if(
strcmp(DB[playerid][Password], hashfalse) == 0){
    
INI_ParseFile(pFile(playerid), "LoadUser_%s", .bExtra true, .extra playerid);
    return 
SendClientMessage(playerid, -1"You have successfully logged into your account.");}
    else return 
DLG(playerid,1,DIALOG_STYLE_PASSWORD,"Registration","Incorrect Password!.","Register","");}} 
Reply
#6

As I said before, use my code to fix yours or debug your script and provide information from it - that's the least you can do. Still, I assume "DB[playerid][Password]" is null and that is making the function return always 0.
Reply
#7

Quote:
Originally Posted by SickAttack
View Post
As I said before, use my code to fix yours or debug your script and provide information from it - that's the least you can do. Still, I assume "DB[playerid][Password]" is null and that is making the function return always 0.
Well yeah that's true I just checked it out, take a look:
PHP Code:
CMD:pw(playerid,params[]){
format(String,sizeof(String),"PW: %s",DB[playerid][Password]);
MSG(playerid,-1,String);
return 
1;} 
and when I was IG and tried to use it the return was "PW: " without any password string, how can I fix it?
Reply
#8

Quote:
Originally Posted by Lirbo
View Post
Well yeah that's true I just checked it out, take a look:
PHP Code:
CMD:pw(playerid,params[]){
format(String,sizeof(String),"PW: %s",DB[playerid][Password]);
MSG(playerid,-1,String);
return 
1;} 
and when I was IG and tried to use it the return was "PW: " without any password string, how can I fix it?
See what I told you? You should learn how to listen to others and how to debug a script, well done.

Well, take a look at the code I gave you. That's how you will be able to fix yours, if you do not want to use it without that much hassle.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)