SA-MP Forums Archive
Login & Registration system wrong - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+---- Forum: Help Archive (https://sampforum.blast.hk/forumdisplay.php?fid=89)
+---- Thread: Login & Registration system wrong (/showthread.php?tid=244000)



Login & Registration system wrong - BizzyD - 25.03.2011

Hello, i got some problems with my account system. I created one from this tutorial.

http://forum.sa-mp.com/showthread.ph...light=Register
Quote:

Credits to:Lorenc_

Anyways, The stats dosent save. The money and so on.

This is my OnPlayerConnect code

pawn Код:
gPlayerLogged[playerid] = 0;
    new name[MAX_PLAYER_NAME], file[256];
    GetPlayerName(playerid, name, sizeof(name));
    format(file, sizeof(file), SERVER_USER_FILE, name);
    if (!dini_Exists(file))
    {
        ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Hi your not registered", "Welcome, your not registered mate, input your registration pw below", "Register", "Leave");
    }
    if(fexist(file))
    {
        ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Hi your registered", "Fucken awesome mate, your registered :D. Inpute your pw below", "Login", "Leave");
    }
And OnPlayerDisconnect

pawn Код:
new name[MAX_PLAYER_NAME], file[256];
    GetPlayerName(playerid, name, sizeof(name));
    format(file, sizeof(file), SERVER_USER_FILE, name);
    if(gPlayerLogged[playerid] == 1)
    {
        dini_IntSet(file, "Score", PlayerInfo[playerid][pScore]);
        dini_IntSet(file, "Money", PlayerInfo[playerid][pCash]);
        dini_IntSet(file, "AdminLevel",PlayerInfo[playerid][pAdminLevel]);
    }
    gPlayerLogged[playerid] = 0;
I even made a /givemoney cmd wich sets your
Код:
pCash
wich this system use.

This is the Login Dialog

pawn Код:
if (dialogid == LOGIN)
    {
        new name[MAX_PLAYER_NAME], file[256], string[128];
        GetPlayerName(playerid, name, sizeof(name));
        format(file, sizeof(file), SERVER_USER_FILE, name);
        if(!response) return Kick(playerid);
        if (!strlen(inputtext)) return ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Hi your registered", "Fucken awesome mate, your registered :D. Inpute your pw below", "Login", "Leave");
        new tmp;
        tmp = dini_Int(file, "Password");
        if(udb_hash(inputtext) != tmp) {
            SendClientMessage(playerid, COLOR_RED, "Wrong PW sir.");
            ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Hi your registered", "Fucken awesome mate, your registered :D. Inpute your pw below", "Login", "Leave");
        }
        else
        {
            gPlayerLogged[playerid] = 1;
            PlayerInfo[playerid][pAdminLevel] = dini_Int(file, "AdminLevel");
            SetPlayerScore(playerid, PlayerInfo[playerid][pScore]);
            GivePlayerMoney(playerid, dini_Int(file, "Money")-GetPlayerMoney(playerid));
            SendClientMessage(playerid,COLOR_RED, "[SYSTEM]: Successfully logged in!");
        }
    }
And register dialog

pawn Код:
if (dialogid == REGISTER)
    {
        new name[MAX_PLAYER_NAME], file[256], string[128];
        GetPlayerName(playerid, name, sizeof(name));
        format(file, sizeof(file), SERVER_USER_FILE, name);
        if(!response) return Kick(playerid);
        if (!strlen(inputtext)) return
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Hi your not registered", "Welcome, your not registered mate, input your registration pw below", "Register", "Leave");
        dini_Create(file);
        dini_IntSet(file, "Password", udb_hash(inputtext));
        dini_IntSet(file, "AdminLevel",PlayerInfo[playerid][pAdminLevel] = 0);
        dini_IntSet(file, "Money",PlayerInfo[playerid][pCash] = 500);
        dini_IntSet(file, "Score",PlayerInfo[playerid][pScore] = 0);
        format(string, 128, "[SYSTEM]: You succesfully registered the nickname %s with password %s, you have been auto logged in.", name, inputtext);
        SendClientMessage(playerid, COLOR_YELLOW, string);
        gPlayerLogged[playerid] = 1;
    }
Some other information, dont think its needed.
pawn Код:
enum pInfo
{
    pAdminLevel,
    pCash,
    pScore,
}
new PlayerInfo[MAX_PLAYERS][pInfo];
pawn Код:
new gPlayerLogged[MAX_PLAYERS];
#define SERVER_USER_FILE "accounts/%s.ini"
Cant figure out whats the problem. It dosent load your cash somewhy.

Hope you guys can help me.

Thanks,Alex


Re: Login & Registration system wrong - GaudenasLT - 25.03.2011

Using timers as OnPlayerDisconnect sometimes does not save info...


Re: Login & Registration system wrong - MadeMan - 25.03.2011

It doesn't save or it doesn't load?


Re: Login & Registration system wrong - [ProX]BlueFire - 25.03.2011

1)try this:

Код:
#include <zcmd>
public OnPlayerCommandText(playerid, cmdtext[])
{
	dcmd(givecash, 8, cmdtext);
	return 0;
}
 
dcmd_givecash(playerid, params[])
{
	new
		giveplayerid,
		amount;
	if (sscanf(params, "ud", giveplayerid, amount)) SendClientMessage(playerid, 0xFF0000AA, "Usage: /givecash [playerid/partname] [amount]");
	else if (giveplayerid == INVALID_PLAYER_ID) SendClientMessage(playerid, 0xFF0000AA, "Player not found");
	else if (amount > GetPlayerMoney(playerid)) SendClientMessage(playerid, 0xFF0000AA, "Insufficient Funds");
	else
	{
		GivePlayerMoney(giveplayerid, amount);
		GivePlayerMoney(playerid, 0 - amount);
		SendClientMessage(playerid, 0x00FF00AA, "Money sent");
		SendClientMessage(giveplayerid, 0x00FF00AA, "Money received");
	}
	return 1;
}
2)try this out:

Код:
#include <a_samp>
#include <dini>
 
#if !defined floatstr
  native Float:floatstr(const string[]);
#endif
 
#define SLOTS 8
new player_level[SLOTS] = {-1, ...}; // Saves the player's level - the default
// one is -1 for not connected, 0 for not logged in and others for logged in
 
new player_names[SLOTS][MAX_PLAYER_NAME]; // Saves the player's names
#define USERFILE "users.txt"
 
#define dcmd(%1,%2,%3) if ((strcmp(%3, "/%1", true, %2+1) == 0)&&(((%3[%2+1]==0)&&(dcmd_%1(playerid,"")))||((%3[%2+1]==32)&&(dcmd_%1(playerid,%3[%2+2]))))) return 1
 
public OnPlayerCommandText(playerid, cmdtext[]) {
  dcmd(login,5,cmdtext);
  // dcmd(command-name (without /),   length of the command,   cmdtext);
  return 0; // This shows SERVER: Unknown Command
}
 
 
dcmd_login(playerid, params[]) {
  if(player_level[playerid] != 0) { // User is logged in
    SendClientMessage(playerid, 0xFFFFFFFF, "You are already logged in.");
	return 1; // We dont need to execute the rest of the function, do we?
  }
  else if(strlen(params) == 0) { // There is no password specified, only /login
    SendClientMessage(playerid, 0xFFFFFFFF, "Please use /login [password]");
    return 1;
  }
  else if(!dini_Isset(USERFILE,player_names[playerid])) { // not registered
    SendClientMessage(playerid, 0xFFFFFFFF, "Your nick is not registered.");
    SendClientMessage(playerid, 0xFFFFFFFF, "Use /register [password] first.");
    return 1;
  }
  else if(adler32_hash(params) != dini_Int(USERFILE,player_names[playerid])) {
	// There's a password hash generated and compared to the one from the config file
    SendClientMessage(playerid, 0xFFFFFFFF, "Password mismatch.");
    return 1;
  }
  player_level[playerid] = 1; // Logged in successfully
  SendClientMessage(playerid, 0xFFFFFFFF, "You are now logged in. Have a nice day.");
 
  return 1;
}
 
adler32_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 OnPlayerConnect(playerid) {
  if(player_level[playerid] == -1) {
    player_level[playerid] = 0;
    GetPlayerName(playerid,player_names[playerid],MAX_PLAYER_NAME); // Getting the playername and saving it
  }
  return 1;
}
public OnPlayerDisconnect(playerid) {
  player_level[playerid] = -1;
  return 1;
}



Re: Login & Registration system wrong - BizzyD - 25.03.2011

Quote:
Originally Posted by MadeMan
Посмотреть сообщение
It doesn't save or it doesn't load?
The admin level & such saves. But not the cash