Invalid Password - y-ini
#1

pawn Код:
#include <a_samp>
#include <YSI\y_ini>
#include <ZCMD>
#include <sscanf2>

#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2

#define PATH "/Accounts/%s.ini"

#define COL_WHITE "{FFFFFF}"
#define COL_RED "{F81414}"
#define COL_GREEN "{00FF22}"
#define COL_LIGHTBLUE "{00CED1}"

#define COLOR_FADE1 0xFFFFFFFF
#define COLOR_FADE2 0xC8C8C8C8
#define COLOR_FADE3 0xAAAAAAAA
#define COLOR_FADE4 0x8C8C8C8C
#define COLOR_FADE5 0x6E6E6E6E
#define COLOR_WHITE  0xFFFFFFFF
#define TCOLOR_ADMIN 0x25FE41FF
#define TCOLOR_TAXI 0xFFFF00AA
#define TCOLOR_POLICE 0x8080FFFF
#define COLOR_PURPLE 0xC2A2DAAA
#define COLOR_PURPLE1 0xFF0080FF
#define COLOR_PURPLE2 0xE10071FF
#define COLOR_PURPLE3 0xC10061FF
#define COLOR_PURPLE4 0xAE0057FF
#define COLOR_PURPLE5 0x840042FF
#define COLOR_LIGHTRED 0xFF8080FF
#define COLOR_LIGHTBLUE 0x33CCFFAA
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_GREEN 0x3CCA75FF
#define COLOR_GRAD2 0xBFC0C2FF
#define TCOLOR_NORMAL 0xB0FFF3FF
#define COLOR_RED 0xAA3333AA

new Logged[MAX_PLAYERS];

enum pInfo
{
    pPass,
    pCash,
    pAdmin,
    pKills,
    pDeaths,
    pMember,
    pRank,
    pHealth,
    pArmor,
    Float:pPos[4],
    pVW,
    pINT
}
new PlayerInfo[MAX_PLAYERS][pInfo];

forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
    INI_Int("Password",PlayerInfo[playerid][pPass]);
    INI_Int("Cash",PlayerInfo[playerid][pCash]);
    INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
    INI_Int("Kills",PlayerInfo[playerid][pKills]);
    INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
    INI_Float("PositionX",PlayerInfo[playerid][pPos][0]);
    INI_Float("PositionY",PlayerInfo[playerid][pPos][1]);
    INI_Float("PositionZ",PlayerInfo[playerid][pPos][2]);
    INI_Float("Angle",PlayerInfo[playerid][pPos][3]);
    INI_Int("Virtual World",PlayerInfo[playerid][pVW]);
    INI_Int("Interior",PlayerInfo[playerid][pINT]);
    return 1;
}
/*Credits to Dracoblue*/
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;
}

main()
{
    print("\n----------------------------------");
    print(" Prison Break Roleplay - Script by Stevolas");
    print("----------------------------------\n");
}

public OnGameModeInit()
{
    SetGameModeText("PB-RP v1.0");
    return 1;
}

public OnGameModeExit()
{
    return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
    return 1;
}

public OnPlayerConnect(playerid)
{
    SetPlayerColor(playerid, COLOR_WHITE);
    Logged[playerid] = 0;
    if(fexist(UserPath(playerid)))
    {
        INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_WHITE"This account is currently registered\nPlease type in the account's password below.","Login","Quit");
    }
    else
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,""COL_WHITE"Register",""COL_WHITE"This account is not registered\nPlease type in the wanted password below to reigster the account.","Register","Quit");
    }
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    if(Logged[playerid] == 1)
    {
        SavePlayer(playerid);
    }
    return 1;
}

public OnPlayerSpawn(playerid)
{
    SetCameraBehindPlayer(playerid);
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    PlayerInfo[killerid][pKills]++;
    PlayerInfo[playerid][pDeaths]++;
    return 1;
}

public OnVehicleSpawn(vehicleid)
{
    return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
    return 1;
}

public OnPlayerText(playerid, text[])
{
    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/mycommand", cmdtext, true, 10) == 0)
    {
        // Do something here
        return 1;
    }
    return 0;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
    return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
    return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
    return 1;
}

public OnRconCommand(cmd[])
{
    return 1;
}

public OnPlayerRequestSpawn(playerid)
{
    return 1;
}

public OnObjectMoved(objectid)
{
    return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
    return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
    return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
    return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
    return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
    return 1;
}

public OnPlayerExitedMenu(playerid)
{
    return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
    return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
    return 1;
}

public OnPlayerUpdate(playerid)
{
    return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
    return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
    return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
    return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
    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_INPUT, ""COL_WHITE"Registering...",""COL_RED"You have entered an invalid password.\n"COL_WHITE"Type your password below to register a new account.","Register","Quit");
                new INI:File = INI_Open(UserPath(playerid));
                INI_SetTag(File,"General Data");
                INI_WriteInt(File,"Password",udb_hash(inputtext));
                INI_WriteInt(File,"Cash",0);
                INI_WriteInt(File,"Admin",0);
                INI_WriteInt(File,"Kills",0);
                INI_WriteInt(File,"Deaths",0);
                INI_SetTag(File, "Player Position");
                INI_WriteFloat(File, "PositionX", 0);
                INI_WriteFloat(File, "PositionY", 0);
                INI_WriteFloat(File, "PositionZ", 0);
                INI_WriteFloat(File, "Angle", 0);
                INI_WriteInt(File, "Interior", 0);
                INI_WriteInt(File, "VirtualWorld", 0);
                INI_Close(File);

                SetSpawnInfo(playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0);
                SpawnPlayer(playerid);
                Logged[playerid] = 1;
            }
        }

        case DIALOG_LOGIN:
        {
            if(!response) return Kick (playerid);
            if(response)
            {
                if(udb_hash(inputtext) == PlayerInfo[playerid][pPass])
                {
                    INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
                    GivePlayerMoney(playerid, PlayerInfo[playerid][pCash]);
                    SetSpawnInfo(playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0);
                    SpawnPlayer(playerid);
                    Logged[playerid] = 1;
                }
                else
                {
                    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_RED"You have entered an incorrect password.\n"COL_WHITE"Type your password below to login.","Login","Quit");
                }
                return 1;
            }
        }
    }
    return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
    return 1;
}

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

stock SavePlayer(playerid)
{
    new INI:File = INI_Open(UserPath(playerid));
    GetPlayerPos(playerid, PlayerInfo[playerid][pPos][0], PlayerInfo[playerid][pPos][1], PlayerInfo[playerid][pPos][2]);
    GetPlayerFacingAngle(playerid, PlayerInfo[playerid][pPos][3]);
    PlayerInfo[playerid][pVW] = GetPlayerVirtualWorld(playerid);
    PlayerInfo[playerid][pINT] = GetPlayerInterior(playerid);
    INI_SetTag(File, "General Data");
    INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));
    INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
    INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]);
    INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
    INI_SetTag(File, "Player Position");
    INI_WriteFloat(File, "PositionX", PlayerInfo[playerid][pPos][0]);
    INI_WriteFloat(File, "PositionY", PlayerInfo[playerid][pPos][1]);
    INI_WriteFloat(File, "PositionZ", PlayerInfo[playerid][pPos][2]);
    INI_WriteFloat(File, "Angle", PlayerInfo[playerid][pPos][3]);
    INI_WriteInt(File, "Interior", PlayerInfo[playerid][pINT]);
    INI_WriteInt(File, "VirtualWorld", PlayerInfo[playerid][pVW]);
    INI_Close(File);
}
Hello, the above is my entire code I made through Kush's login/register tutorial and some of my own crap.

I've tested one of my old scripts that look almost identical ((With much more stuff added in the other one)) it seems to be working. I just don't see why this isn't. If someone could help me figure out the problem, and possibly fix it, it would be appreciated.

Thanks,
Kindred.
Reply
#2

In the login, why are you comparing the hashed input text to to an integer?

I have never used udb_hash, but I would assume that the hashed result is a string (not just integers). You can only save integers to an array. You attempted to save a string into the PInfo[playerid][pPass].

You want to do INI_WriteString(File,"Password",udb_hash(inputtext ); in the register dialog, then compare udb_hash(inputtext) to INI_String(File,"Password) under login.
Reply
#3

udb_hash converts the password into a set of integers ((No letters)). So I think the code would be correct.

The other script I have (the one that works) has the same method to compare the string and the same saving process.
Reply
#4

Make sure you type the correct password.
Try checking the .ini file check if the password is reset to 0.
Sometimes the reason why 'Invalid Password' happens is because of the password resetting to 0
Reply
#5

I've done all of this. Different passwords output different number combinations. I tested different passwords, of which output different numbers. Yet, the same passwords output the same numbers, obviously. But they never reset to 0, I've checked the .ini file numerous amount of times to make sure it was working how it was suppose to be working. I've updated all my plugins and includes, and everything.

Thanks to whoever can help.
Reply
#6

Add a debug message to see if the password is being parsed correctly.
pawn Код:
public OnPlayerConnect(playerid)
{
    SetPlayerColor(playerid, COLOR_WHITE);
    Logged[playerid] = 0;
    if(fexist(UserPath(playerid)))
    {
        INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_WHITE"This account is currently registered\nPlease type in the account's password below.","Login","Quit");
        printf("Pass: %d", PlayerInfo[playerid][pPass]); // this
    }
    else
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,""COL_WHITE"Register",""COL_WHITE"This account is not registered\nPlease type in the wanted password below to reigster the account.","Register","Quit");
    }
    return 1;
}
Reply
#7

Try comparing the login password directly to the saved password in the .ini (without going through PInfo[playerid][pPass])
Reply
#8

I did what VincentDunn said, and apparently when the login screen appears, the password is shown as 0. I don't see why this would happen. Does anyone possibly have a solution? All seems fine in my point of view.
Reply
#9

SORRY FOR DIGGING UP OLD GRAVES!

I have this problem, the exact same one. What is the solution!?
Reply
#10

Quote:
Originally Posted by Kindred
Посмотреть сообщение
the password is shown as 0.
There is your answer.

The password isn't being parsed correctly. I'm guessing you need to tripple-check your code.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)