08.08.2011, 17:55
Here, untested: (You have some dialogids messed up BTW)
+ I don't think it's a good idea to use single global variable to format and use it as the userfile path.
+ I don't think it's a good idea to use single global variable to format and use it as the userfile path.
pawn Код:
/*
-------------------------------------*
Server Adminstrator Script. *
-------------------------------------*
*/
#include <a_samp>
#include <YSI/y_ini>
#include <zcmd>
#include <sscanf2>
new IsLoggedIn[MAX_PLAYERS];
new userfile[256];
enum pInfo
{
pPassword[64],
pLevel,
pCash,
pKills,
pDeaths,
pColor,
pScore,
pSkin
}
new PlayerInfo[MAX_PLAYERS][pInfo];
forward load_userfile(playerid, name[], value[]);
public load_userfile(playerid, name[], value[])
{
INI_String("pPassword", PlayerInfo[playerid][pPassword], 64);
INI_Int("pLevel", PlayerInfo[playerid][pLevel]);
INI_Int("pCash", PlayerInfo[playerid][pCash]);
INI_Int("pKills", PlayerInfo[playerid][pKills]);
INI_Int("pDeaths", PlayerInfo[playerid][pDeaths]);
INI_Int("pColor", PlayerInfo[playerid][pColor]);
INI_Int("pScore", PlayerInfo[playerid][pScore]);
INI_Int("pSkin", PlayerInfo[playerid][pSkin]);
return true;
}
public OnFilterScriptInit()
{
print("\n--------------------------------------");
print(" Server Adminstrator Script.");
print("--------------------------------------\n");
return 1;
}
public OnPlayerConnect(playerid)
{
IsLoggedIn[playerid] = 0;
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
format(userfile, sizeof(userfile), "Server/Users/%s.ini", name);
if (!fexist(userfile))
{
ShowPlayerDialog(playerid, 2196, DIALOG_STYLE_INPUT, "Register Account.", "Welcome,\n\nYour Account is currently not registered in our Database, So if you feel glad to register you may register please.\n\nEnter your Desired Password Below:", "Register", "Later");
} else {
INI_ParseFile(userfile, "load_userfile", .bExtra = true, .extra = playerid);
ShowPlayerDialog(playerid, 7407, DIALOG_STYLE_INPUT, "Login Account", "Welcome,\n\nYour Account is currently registered in our Database, So if you feel glad to login you may login please.\n\nEnter your Desired Password Below:", "Login", "Later");
}
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if (dialogid == 2196)
{
new name[MAX_PLAYER_NAME], string[128];
GetPlayerName(playerid, name, sizeof(name));
format(userfile, sizeof(userfile), "Server/Users/%s.ini", name);
if(!response)
return SendClientMessage(playerid, 0xFF0000FF, "You skiped to Register an account on our Database, Please Makesure your Kills/Deaths/Cash/Level/Color and Skin won't be saved.");
if(!strlen(inputtext))
return ShowPlayerDialog(playerid, 2196523, DIALOG_STYLE_INPUT, "Register Account.", "Welcome,\n\nYour Account is currently not registered in our Database, So if you feel glad to register you may register please.\n\nEnter your Desired Password Below:", "Register", "Later");
SaveStats(playerid);
format(string, 256, "Server: You succesfully registered the nickname %s with password %s.. You have been AutoLogged In.", name, inputtext);
SendClientMessage(playerid, 0x00FF00FF, string);
IsLoggedIn[playerid] = 1;
}
if (dialogid == 7407)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
format(userfile, sizeof(userfile), "Server/Users/%s.ini", name);
if(!response) return SendClientMessage(playerid, 0xFF0000FF, "You skiped to Login your account, Please Makesure your Kills/Deaths/Cash/Level/Color and Skin won't be saved.");
if (!strlen(inputtext)) return ShowPlayerDialog(playerid, 2196, DIALOG_STYLE_INPUT, "Hi your registered", "You are registred, please login.", "Login", "Leave");
if(!strcmp(udb_hash(inputtext),PlayerInfo[playerid][pPassword],false)
{
IsLoggedIn[playerid] = 1;
SetPlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
SetPlayerScore(playerid, PlayerInfo[playerid][pScore]);
SetPlayerColor(playerid, PlayerInfo[playerid][pColor]);
SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
SendClientMessage(playerid,0x00FF00FF, "Server: You have logged in your account!");
} else {
SendClientMessage(playerid, 0xFF0000FF, "The Password you entered it feels like wrong, Try again..");
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Login Account", "Welcome,\n\nYour Account is currently registered in our Database, So if you feel glad to login you may login please.\n\nEnter your Desired Password Below:", "Login", "Later");
}
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
new name[24];
GetPlayerName(playerid,name,24);
format(userfile,sizeof(userfile),"Server/Users/%s.ini",name);
if(fexist(userfile))
{
SaveStats(playerid);
IsLoggedIn[playerid] = 0;
}
return 1;
}
COMMAND:register(playerid, params[])
{
if (!fexist(userfile))
{
ShowPlayerDialog(playerid, 2196, DIALOG_STYLE_INPUT, "Register Account.", "Welcome,\n\nYour Account is currently not registered in our Database, So if you feel glad to register you may register please.\n\nEnter your Desired Password Below:", "Register", "Later");
} else {
ShowPlayerDialog(playerid, 7407, DIALOG_STYLE_INPUT, "Login Account", "Welcome,\n\nYour Account is currently registered in our Database, So if you feel glad to login you may login please.\n\nEnter your Desired Password Below:", "Login", "Later");
}
return 1;
}
forward SaveStats(playerid);
public SaveStats(playerid)
{
new name[24];
GetPlayerName(playerid,name,24);
format(userfile,sizeof(userfile),"Server/Users/%s.ini",name);
new INI:file = INI_Open(userfile);
INI_WriteString(file, "pPassword", udb_hash(PlayerInfo[playerid][pPassword]));
INI_WriteInt(file, "pLevel", PlayerInfo[playerid][pLevel]);
INI_WriteInt(file, "pCash", PlayerInfo[playerid][pCash]);
INI_WriteInt(file, "pKills", PlayerInfo[playerid][pKills]);
INI_WriteInt(file, "pDeaths", PlayerInfo[playerid][pDeaths]);
INI_WriteInt(file, "pColor", PlayerInfo[playerid][pColor]);
INI_WriteInt(file, "pScore", PlayerInfo[playerid][pScore]);
INI_WriteInt(file, "pSkin", PlayerInfo[playerid][pSkin]);
INI_Close(file);
return true;
}