Register/Login problem, Help[+REP]
#1

Hello all!

I've made a simple register/login system.No errors works.The problem is when I go in-game to test it it asks for me to register,ok.I enter my password and leave the game.When I come back to ask for login, ok.I enter password and here's were it goes wrong,I enter my pass and it says incorrect password.I asked my friend to join and it asked him for a Login even doh he just came?I managed to edit something and get it to work but it still doesn't let me log in.When I go in scriptfiles it has my acc saved but where it says password=10572575, some random numbers?!?

Here is the code:
Код:
#include <a_samp>
#include <YSI\y_ini>
#include <zcmd>
#include <sscanf2>

#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2

#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_BLUE 0x0000BBAA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_LIGTHBLUE 0x3300FFAA
#define COLOR_WHITE "(FFFFFF)"
#define COLOR_RED "(F81414)"
#define COLOR_GREEN "(00FF22)"
#define COLOR_LIGHTBLUE "(00CED1)"

#define PATH "/accounts/&s.ini"
#pragma tabsize 0

enum pInfo
{
	pPass,
	pCash,
	pAdmin,
	pScore,
	pBankMoney,
	pBanned
}
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("Score",PlayerInfo[playerid] [pScore]);
	INI_Int("BankMoney",PlayerInfo[playerid] [pBankMoney]);
	INI_Int("Banned",PlayerInfo[playerid] [pBanned]);
	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 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("Something stupid");
	print("----------------------------------\n");
}



public OnGameModeInit()
{
	// Don't use these lines if it's a filterscript
	SetGameModeText("Blank Script");
	AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
	return 1;
}

public OnGameModeExit()
{
	return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
	SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
	return 1;
}

public OnPlayerConnect(playerid)
{
	if(fexist(UserPath(playerid)))
	{
	    INI_ParseFile(UserPath(playerid),"LoadUser_%s",.bExtra = true,.extra = playerid);
	    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login:","Enter your password to login in your account.","Login","Exit");
	}
	else
	{
	    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Register:","Enter a password to register your account.","Register","Exit");
	}

	return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
	new INI:File = INI_Open(UserPath(playerid));
	INI_SetTag(File,"data");
	INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));
	INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
	INI_WriteInt(File,"Score",GetPlayerScore(playerid));
	INI_WriteInt(File,"BankMoney",PlayerInfo[playerid][pBankMoney]);
	INI_WriteInt(File,"Banned",PlayerInfo[playerid][pBanned]);
	INI_Close(File);
	return 1;
}

public OnPlayerSpawn(playerid)
{
	return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
	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,"Register:","Password invalid, type new password.","Register","Exit");
				new INI:File = INI_Open(UserPath(playerid));
				INI_SetTag(File,"data");
				INI_WriteInt(File,"Passowrd",udb_hash(inputtext));
				INI_WriteInt(File,"Cash",0);
				INI_WriteInt(File,"Admin",0);
				INI_WriteInt(File,"Score",0);
				INI_WriteInt(File,"Bankmoney",0);
				INI_WriteInt(File,"Banned",0);
				INI_Close(File);
			}
		}
	    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]);
	                SetPlayerScore(playerid,PlayerInfo[playerid][pScore]);
	                SendClientMessage(playerid,-1,"You'we successfuly logged in to your account");
				}
				else
				{
				    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login:","Password inncorrect, please try again.","Login","Exit");
				}
   			}
		}
 	}

	return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
	return 1;
}
If anyone has any ideas it would be great!
Reply
#2

Quote:
Код:
#define PATH "/accounts/&s.ini"
4 char.
Reply
#3

When I add it causes the same problem but this time it asks for login only.
Reply
#4

Bump
Reply
#5

&s to %s
Reply
#6

I actually had the code @Vince sent here but I had to remove it since it was causing more problems then now.
Example: I join it asks for register, I join again asks for login but says incorrect password then my friend joins and it asks for login..strange isnt it?
Reply
#7

pawn Код:
#define PATH "/accounts/%s.ini"
It should be like this, and nothing else.


• udb hashes converts the inputted text into a numeric form, whereas Whirlpool converts into a string of length 128(or)129, don't know the length perfectly.
• A stupid question, but something that's useful: Have you created the path already? (scriptfiles/accounts)
Reply
#8

I somehow got it to work.I reloaded the script, tried a lot of methods and I got it to work.
Thank you all for helping +REP.
Reply
#9

Quote:
Originally Posted by Godly
Посмотреть сообщение
I somehow got it to work.I reloaded the script, tried a lot of methods and I got it to work.
Thank you all for helping +REP.
I suggest using Whirlpool for hashing passwords
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)