28.01.2015, 10:50
Scripted by me from my script:
Add in your scriptfiles folder a new one know by "info"
Under on player connect
Anywhere
Under on player disconnect
This is a full register and login system with dialogs.
PHP код:
#define DIALOG_REGISTER 500
#define DIALOG_LOGIN 501
#define PATH "/info/%s.ini"
Under on player connect
PHP код:
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"Type your password below to login.","Login","Quit");
}
else
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,""COL_WHITE"Registering...",""COL_WHITE"Type your password below to register a new account.","Register","Quit");
}
PHP код:
public LoadUser_data(playerid,name[],value[])
{ // =========================== Loading User Data from the INI File ================================ //
INI_Int("Password",PlayerInfo[playerid][pPass]);
INI_Int("Cash",PlayerInfo[playerid][pMoney]);
INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
INI_Int("Skin",PlayerInfo[playerid][pSkin]);
INI_Int("Police",PlayerInfo[playerid][pPolice]);
INI_Int("Gang",PlayerInfo[playerid][pGang]);
INI_Int("Horseshoes", PlayerInfo[playerid][pHorseshoes]);
INI_Int("Score", PlayerInfo[playerid][pScore]);
INI_Int("Warnings", PlayerInfo[playerid][pWarnings]);
INI_Int("Dealer", PlayerInfo[playerid][pDealer]);
return 1;
}
forward LoadUser_data(playerid,name[],value[]);
stock UserPath(playerid)
{ // User's Path
new string[128],playername[MAX_PLAYER_NAME];
GetPlayerName(playerid,playername,sizeof(playername));
format(string,sizeof(string),PATH,playername);
return string;
}
stock udb_hash(buf[])
{ // ========== Password Hash ================== //
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;
}
PHP код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch( dialogid )
{
case DIALOG_REGISTER:
{
if(!response) return Kick(playerid);
if(fexist(UserPath(playerid)))
{
fremove(UserPath(playerid));
}
if(response)
{
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Account","Welcome to SA-MP Server!\n\n{FF1493}Your account is not found on the server, we hope you enjoy your stay!\n{FF1493}In order to reguster account successfully, Fill in your desired password for the next login:", "Continue", "Leave");
new INI:file = INI_Open(UserPath(playerid));
INI_SetTag(file,"data");
INI_WriteInt(file,"Password",udb_hash(inputtext));
INI_WriteInt(file,"Cash",75000);
INI_WriteInt(file,"Admin",0);
INI_WriteInt(file,"Skin",0);
INI_WriteInt(file,"Score",0);
INI_WriteInt(file,"Police",0);
INI_WriteInt(file,"Gang",0);
INI_WriteInt(file, "Horseshoes", 0);
INI_WriteInt(file,"Warnings",0);
INI_WriteInt(file,"Dealer",0);
INI_Close(file);
SetSpawnInfo(playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
LoggedIn[playerid] = true;
freezed[playerid] = false;
pm[playerid] = true;
}
}
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][pMoney]);
SendClientMessage(playerid, 0xFF7F2480,"You have successfully logged in your game account!");
SetPlayerScore(playerid, PlayerInfo[playerid][pScore]);
GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
SetSpawnInfo(playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
LoggedIn[playerid] = true;
freezed[playerid] = false;
pm[playerid] = true;
if(PlayerInfo[playerid][pWarnings] == 3)
{
PlayerInfo[playerid][pWarnings] = 0;
}
}
else
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"Account","Welcome to SA-MP Server!\n\n{FF1493}Your account is registered on the server, we hope you enjoy your stay!\n{FF1493}In order to log in your account successfully, Fill in your password correctly:\n\n{FF0033}*Password you typed is incorrect","Continue","Leave");
LoggedIn[playerid] = false;
}
}
}
PHP код:
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,"Skin",GetPlayerSkin(playerid));
INI_WriteInt(FILE,"Score",GetPlayerScore(playerid));
INI_WriteInt(FILE,"Police",PlayerInfo[playerid][pPolice]);
INI_WriteInt(FILE,"Gang",PlayerInfo[playerid][pGang]);
INI_WriteInt(FILE, "Horseshoes", PlayerInfo[playerid][pHorseshoes]);
INI_WriteInt(FILE, "Dealer", PlayerInfo[playerid][pDealer]);
INI_WriteInt(FILE, "Warnings", PlayerInfo[playerid][pWarnings]);
INI_Close(FILE);