SA-MP Forums Archive
[Help] Register - 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: [Help] Register (/showthread.php?tid=89578)



[Help] Register - Nerfair - 02.08.2009

I ve downloaded this script on another site, no credits were posted in so i can't told who is an author.
I ve done some changes to it, khm ... so the problem, then i type /login password my moneys are making 3x (sorry for english)
for example after logout i have 2500$ when i login i will have 2500x3=7500$ i can't spread this problem by my self, so please help me

Quote:

#include <a_samp>

#define FILTERSCRIPT

#if defined FILTERSCRIPT
#define COLOR_GREY 0xBEBEBEAA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_GREEN 0x0de90dAA
#define COLOR_RED 0xfc0303AA
#define COLOR_GRAD5 0xE3E3E3FF
#define COLOR_GRAD1 0xB4B5B7FF
#define COLOR_YELLOW 0xFFFF00AA

forward ShowStats(playerid,targetid);
forward OnPlayerUpdate(playerid);
forward Encrypt(string[]);
forward OnPlayerLogin(playerid,const string[]);

enum pInfo
{
pPassword[128],
pKills,
pDeaths,
pCash,
};

new PlayerInfo[MAX_PLAYERS][pInfo];
new gPlayerLogged[MAX_PLAYERS];
new gPlayerAccount[MAX_PLAYERS];


public OnFilterScriptInit()
{
return 1;
}

public OnFilterScriptExit()
{
return 1;
}

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

public OnPlayerRequestSpawn(playerid)
{
return 1;
}

public OnPlayerConnect(playerid)
{
new playrname[MAX_PLAYER_NAME];
new connect[128];
GetPlayerName(playerid, playrname, sizeof(playrname));
format(connect, sizeof(connect), "%s.cer", playrname);
if(fexist(connect))
{
gPlayerAccount[playerid] = 1;
SendClientMessage(playerid, COLOR_RED, "You are registered, please login with /login password");
return 1;
}
else
{
gPlayerAccount[playerid] = 0;
SendClientMessage(playerid, COLOR_RED, "You are new here or not registered, please register with /register password");
}
return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
gPlayerLogged[playerid] = 0;
return 1;
}

public OnPlayerSpawn(playerid)
{
if(gPlayerLogged[playerid] == 1)
{
SetPlayerHealth(playerid, 100.0);
}
else
{
SetPlayerHealth(playerid, 5.0);
}

return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
new kills = PlayerInfo[playerid][pKills];
SetPlayerScore(playerid, kills);
new Float:Health;
GetPlayerHealth(playerid, Health);
if(Health == 0.0)
{
PlayerInfo[playerid][pDeaths] += 1;
}
GivePlayerMoney(killerid,3000);
PlayerInfo[killerid][pKills] = PlayerInfo[killerid][pKills] + 1;
return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[256];
new idx;
cmd = strtok(cmdtext, idx);
new tmp[256];
new playername[MAX_PLAYER_NAME];
if (strcmp(cmd, "/login", true) ==0 )
{
if(IsPlayerConnected(playerid))
{
new tmppass[64];
if(gPlayerLogged[playerid] == 1)
{
SendClientMessage(playerid, COLOR_RED, " You are already logged in.");
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_RED, " USAGE: /login [password]");
return 1;
}
strmid(tmppass, tmp, 0, strlen(cmdtext), 255);
Encrypt(tmppass);
OnPlayerLogin(playerid,tmppass);
}
return 1;
}
if (strcmp(cmd, "/register", true)==0)
{
new string[265];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_RED, "USAGE: /register [password]");
return 1;
}
if (gPlayerAccount[playerid] == 1)
{
SendClientMessage(playerid, COLOR_RED, " That name is already registered");
return 1;
}

strmid(PlayerInfo[playerid][pPassword], tmp, 0, strlen(cmdtext), 255);
Encrypt(PlayerInfo[playerid][pPassword]);
GetPlayerName(playerid, playername, sizeof(playername));
format(string, sizeof(string), "%s.cer", playername);
new File: file = fopen(string, io_read);
if (file)
{
SendClientMessage(playerid, COLOR_RED, " That name is already registered");
fclose(file);
return 1;
}
new File:hFile;
hFile = fopen(string, io_append);
new var[32];//
format(var, 32, "%s\n", PlayerInfo[playerid][pPassword]);fwrite(hFile, var);
format(var, 32, "Kills=%d\n",PlayerInfo[playerid][pKills]);fwrite(hFile, var);
format(var, 32, "Deaths=%d\n",PlayerInfo[playerid][pDeaths]);fwrite(hFile, var);
PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid);
format(var, 32, "Money=%d\n",PlayerInfo[playerid][pCash]);fwrite(hFile, var);
fclose(hFile);
SendClientMessage(playerid, COLOR_GREEN, "Succesfully Registered!");
SendClientMessage(playerid, COLOR_GREY, "Next time you connect, type /login <password> to log in.");
SetPlayerHealth(playerid, 100.0);
OnPlayerLogin(playerid,PlayerInfo[playerid][pPassword]);
return 1;
}
return 0;
}

public Encrypt(string[])
{
for(new x=0; x < strlen(string); x++)
{
string[x] += (3^x) * (x % 15);
if(string[x] > (0xff))
{
string[x] -= 64;
}
}
return 1;
}


public OnPlayerLogin(playerid,const string[])
{
new pname2[MAX_PLAYER_NAME];
new pname3[MAX_PLAYER_NAME];
new string2[64];
new string3[128];
GetPlayerName(playerid, pname2, sizeof(pname2));
format(string2, sizeof(string2), "%s.cer", pname2);
new File: UserFile = fopen(string2, io_read);

if (UserFile)
{
new valtmp[128];
fread(UserFile, valtmp);strmid(PlayerInfo[playerid][pPassword], valtmp, 0, strlen(valtmp)-1, 255);

if ((strcmp(PlayerInfo[playerid][pPassword], string, true, strlen(valtmp)-1) == 0))
{
new key[128],val[128];
new Data[128];
while(fread(UserFile,Data,sizeof(Data)))
{
key = ini_GetKey(Data);
if( strcmp( key , "Kills" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pKills] = strval( val ); }
if( strcmp( key , "Deaths" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pDeaths] = strval( val ); }
if( strcmp( key , "Money" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCash] = strval( val ); }
GivePlayerMoney(playerid,PlayerInfo[playerid][pCash]);
}
fclose(UserFile);
gPlayerLogged[playerid] = 1;
gPlayerAccount[playerid] = 1;
new kills = PlayerInfo[playerid][pKills];
SetPlayerScore(playerid, kills);
GetPlayerName(playerid, pname3, sizeof(pname3));
format(string3, sizeof(string3), "Welcome %s, you have been succesfully logged in!", pname3);
SetPlayerHealth(playerid, 100.0);
SetPlayerArmour(playerid, 100.0);
SendClientMessage(playerid, COLOR_GREEN,string3);
SendClientMessage(playerid, COLOR_GREEN, "Your health is now ok, good luck & have fun.");
}
else
{
SendClientMessage(playerid, COLOR_RED, "Password does not match your name");
fclose(UserFile);
}
}
return 1;
}

public OnPlayerUpdate(playerid)
{
if(IsPlayerConnected(playerid))
{
if(gPlayerLogged[playerid])
{
new string3[32];
new pname3[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname3, sizeof(pname3));
format(string3, sizeof(string3), "%s.cer", pname3);
new File: pFile = fopen(string3, io_write);
if (pFile)
{
new var[32];
format(var, 32, "%s\n", PlayerInfo[playerid][pPassword]);fwrite(pFile, var);
fclose(pFile);
new File: hFile = fopen(string3, io_append);
PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid);
format(var, 32, "Kills=%d\n",PlayerInfo[playerid][pKills]);fwrite(hFile, var);
format(var, 32, "Deaths=%d\n",PlayerInfo[playerid][pDeaths]);fwrite(hFile, var);
format(var, 32, "Money=%d\n",PlayerInfo[playerid][pCash]);fwrite(hFile, var);
fclose(hFile);
}
}
}
return 1;
}

stock ini_GetKey( line[] )
{
new keyRes[128];
keyRes[0] = 0;
if ( strfind( line , "=" , true ) == -1 ) return keyRes;
strmid( keyRes , line , 0 , strfind( line , "=" , true ) , sizeof( keyRes) );
return keyRes;
}

stock ini_GetValue( line[] )
{
new valRes[128];
valRes[0]=0;
if ( strfind( line , "=" , true ) == -1 ) return valRes;
strmid( valRes , line , strfind( line , "=" , true )+1 , strlen( line ) , sizeof( valRes ) );
return valRes;
}


strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}

new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}

public ShowStats(playerid,targetid)
{
if(IsPlayerConnected(playerid)&&IsPlayerConnected( targetid))
{
new cash = GetPlayerMoney(targetid);
new deaths = PlayerInfo[targetid][pDeaths];
new kills = PlayerInfo[targetid][pKills];
new name[MAX_PLAYER_NAME];
GetPlayerName(targetid, name, sizeof(name));
new Floatx,Floaty,Floatz;
GetPlayerPos(targetid, px, py, pz);
new coordsstring[256];
SendClientMessage(playerid, COLOR_GREEN,"_____________________________________ __");
format(coordsstring, sizeof(coordsstring),"*** %s ***",name);
SendClientMessage(playerid, COLOR_WHITE,coordsstring);
format(coordsstring, sizeof(coordsstring), "Kills:[%d] Deaths:[%d] Cash:[$%d]",kills,deaths,cash);
SendClientMessage(playerid, COLOR_GRAD5,coordsstring);
SendClientMessage(playerid, COLOR_GREEN,"_____________________________________ __");
}
}

#endif




Re: [Help] Register - Backwardsman97 - 02.08.2009

There are much better registration systems like dudb used with dcmd. And there is no reason to save their stats under OnPlayerUpdate. You can just save them when they leave. I could make you a system using dudb that is just like this one that does the same thing just better. As for your problem with the 3 times cash thing, I can't see anything why it would do that.