Saving jobs ( Using Seif Admin script )
#1

Hey all, So i tried to add a job saving system with SeifAdmin .

So i did this

Код:
public OnPlayerRegister(playerid, password[])
{
	if(IsPlayerConnected(playerid))
	{
	  new name[MAX_PLAYER_NAME], str[128], ip[15];
	  GetPlayerName(playerid, name, sizeof name);
	  GetPlayerIp(playerid, ip, sizeof ip);
	  format(str, sizeof str, "/sAccounts/%s.seifadmin", name);
	  new File:account = fopen(str, io_write);
	  if (account)
		{
 			strmid(AccountInfo[playerid][Password], password, 0, strlen(password), 255);
		  	AccountInfo[playerid][Cash] = GetPlayerPCash(playerid);
		  	AccountInfo[playerid][Job] = GetPlayerJobID(playerid);
			new file[128];
			{
				format(file, sizeof file, "Password: %s\n\r", AccountInfo[playerid][Password]);
				{	fwrite(account, file); }
				format(file, sizeof file, "AdminLevel: %d\n\r", 0);
				{	fwrite(account, file); AccountInfo[playerid][AdminLevel] = 0; }
				format(file, sizeof file, "Cash: %d\n\r", AccountInfo[playerid][Cash]);
				{	fwrite(account, file); }
				format(file, sizeof file, "JobID: %d\n\r", AccountInfo[playerid][Job]);
				{	fwrite(account, file); }
				format(file, sizeof file, "Warnings: %d\n\r",AccountInfo[playerid][Warns]);
				{	fwrite(account, file); }
				format(file, sizeof file, "WarnReason1: %s\n\r",AccountInfo[playerid][WarnReason1]);
				{	fwrite(account, file); }
				format(file, sizeof file, "WarnReason2: %s\n\r",AccountInfo[playerid][WarnReason2]);
				{	fwrite(account, file); }
				format(file, sizeof file, "WarnReason3: %s\n\r",AccountInfo[playerid][WarnReason3]);
				{	fwrite(account, file); }
				format(file, sizeof file, "IPAddress: %s\n\r",ip);
				{	fwrite(account, file); }
			}
			fclose(account);
			SendClientMessage(playerid, GREEN, "|- Account successfully registered. You can now login ( /login [password] ) -|");

			
		}
	}
	return 1;
}
&

Код:
public OnPlayerLogin(playerid, password[])
{
  new name[MAX_PLAYER_NAME], str[128];
  GetPlayerName(playerid, name, sizeof name);
	format(str, sizeof str, "/sAccounts/%s.seifadmin", name);
	new File:account = fopen(str, io_read);
	if (account)
	{
	  new pass[256];
	  new passres[128], value[128];
	  fread(account, pass, sizeof pass);
	  passres = GetFileString(pass);
	  if (!strcmp("Password", passres))
		{
			value = GetFileValue(pass);
			strmid(AccountInfo[playerid][Password], value, 0, strlen(value)-1, 128);
		}
		if (!strcmp(AccountInfo[playerid][Password], password, true))
		{
		  while (fread(account, pass, 256))
			{
				passres = GetFileString(pass);
				if (strfind(passres, "AdminLevel") != -1)
				{
					value = GetFileValue(pass);
					AccountInfo[playerid][AdminLevel] = strval(value);
				}
				if (strfind(passres, "Cash") != -1)
				{
					value = GetFileValue(pass);
					AccountInfo[playerid][Cash] = strval(value);
				}
        	if (strfind(passres, "JobID") != -1)
				{
					value = GetFileValue(pass);
					AccountInfo[playerid][Job] = strval(value);
				}
        if (strfind(passres, "Warnings") != -1)
				{
					value = GetFileValue(pass);
					AccountInfo[playerid][Warns] = strval(value);
				}
				if (strfind(passres, "WarnReason1") != -1)
				{
					value = GetFileValue(pass);
					strmid(AccountInfo[playerid][WarnReason1], value, 0, strlen(value)-1, 128);
				}
				if (strfind(passres, "WarnReason2") != -1)
				{
					value = GetFileValue(pass);
					strmid(AccountInfo[playerid][WarnReason2], value, 0, strlen(value)-1, 128);
				}
				if (strfind(passres, "WarnReason3") != -1)
				{
					value = GetFileValue(pass);
					strmid(AccountInfo[playerid][WarnReason3], value, 0, strlen(value)-1, 128);
				}
			}
  			fclose(account);
      AccountInfo[playerid][Logged] = 1;
		}
		else
		{
			SendClientMessage(playerid, RED, "Incorrect Password.");
	    fclose(account);
	    return 1;
		}
		GivePlayerPCash(playerid, AccountInfo[playerid][Cash]);
		SetJob(playerid, AccountInfo[playerid][Job]);
		format(str, sizeof str, "|- You have successfully logged in as %s -|", name);
		SendClientMessage(playerid, GREEN, str);
		printf("%s has logged in", name);
 		if (AccountInfo[playerid][AdminLevel] > 0)
		{
    	format(str, sizeof str, "|» You are now logged in as a level %d admin «|", AccountInfo[playerid][AdminLevel]);
			SendClientMessage(playerid, LIGHTGREEN, str);
			ViewCmds[playerid] = 0;
		}
	}
	return 1;
}
&
Код:
public OnPlayerUpdateAccount(playerid)
{
	if(IsPlayerConnected(playerid))
	{
		if(AccountInfo[playerid][Logged] == 1)
		{
			new name[MAX_PLAYER_NAME], str[128];
		  GetPlayerName(playerid, name, sizeof name);
		  format(str, sizeof str, "/sAccounts/%s.seifadmin", name);
		  new File:account = fopen(str, io_write);
		  if (account)
  			{
			  	AccountInfo[playerid][Cash] = GetPlayerPCash(playerid);
			  	AccountInfo[playerid][Job] = GetPlayerJobID(playerid);
				new file[128];
				{
					format(file, sizeof file, "Password: %s\n\r", AccountInfo[playerid][Password]);
					{	fwrite(account, file); }
					format(file, sizeof file, "AdminLevel: %d\n\r",AccountInfo[playerid][AdminLevel]);
					{	fwrite(account, file); }
					format(file, sizeof file, "Cash: %d\n\r", AccountInfo[playerid][Cash]);
					{	fwrite(account, file); }
					format(file, sizeof file, "JobID: %d\n\r", AccountInfo[playerid][Job]);
					{	fwrite(account, file); }
					format(file, sizeof file, "Warnings: %d\n\r",AccountInfo[playerid][Warns]);
					{	fwrite(account, file); }
					format(file, sizeof file, "WarnReason1: %s\n\r",AccountInfo[playerid][WarnReason1]);
					{	fwrite(account, file); }
					format(file, sizeof file, "WarnReason2: %s\n\r",AccountInfo[playerid][WarnReason2]);
					{	fwrite(account, file); }
					format(file, sizeof file, "WarnReason3: %s\n\r",AccountInfo[playerid][WarnReason3]);
					{	fwrite(account, file); }
					format(file, sizeof file, "IPAddress: %s\n\r",AccountInfo[playerid][IP]);
					{	fwrite(account, file); }
				}
				fclose(account);
			}
		}
	}
	return 1;
}

But sometimes jobs are saving, and sometimes not
Can anyone tell me why ?

thanks ^^
Reply
#2

Seems no problem in your code
When does OnPlayerUpdateAccount get called?
Reply
#3

Quote:
Originally Posted by yezizhu
Seems no problem in your code
When does OnPlayerUpdateAccount get called?
I'm new in scripting so i really don't know exactly
Reply
#4

Quote:
Originally Posted by Seif_ [adream-rp.com
]
Quote:
Originally Posted by yezizhu
Seems no problem in your code
When does OnPlayerUpdateAccount get called?
OnPlayerDisconnect.

Are you sure the player is logged in? And that GetPlayerJobID works properly? Show us the function.

GetPlayerJobID works properly ? yes
The Function ? I'm using xJobs ( link : http://forum.sa-mp.com/index.php?topic=66362.0 )

I'm really confused
Reply
#5

I just did another test

When you change your job first time, It saves.
When you change your job second time, It saves.
When you change your job third time, It saves.

When you try to change your job for the 4th time, It doesn't save, It Stays the Job id of the third try


Reply
#6

Quote:
Originally Posted by Takumi.
I'm new in scripting so i really don't know exactly
Sorry Seif, Didn't understand, can you explain please ?
Reply
#7

add this and check if any job is returning 0.

pawn Код:
if (strcmp("/jobid", cmdtext, true, 10) == 0)
{
    new string[128];
    format(string, sizeof(string), "JobID: %d", GetPlayerJobID(playerid));
    SendClientMessage(playerid, string);
    return 1;
}
Reply
#8

Quote:
Originally Posted by Gappy
add this and check if any job is returning 0.

pawn Код:
if (strcmp("/jobid", cmdtext, true, 10) == 0)
{
    new string[128];
    format(string, sizeof(string), "JobID: %d", GetPlayerJobID(playerid));
    SendClientMessage(playerid, string);
    return 1;
}
As i said, It's not returning to 0 but sometimes it's just staying in the previous Job id
Can anyone help please ?
Reply
#9

pawn Код:
stock GetPlayerJobID(playerid){
   //do your old code here.
      new string[128];
   format(string,sizeof(string), "pJob:%d,%d",playerid, /*player job data*/);
  SendClientMessageToAll(422,string);
  return 1;
}
Reply
#10

Quote:
Originally Posted by yezizhu
pawn Код:
stock GetPlayerJobID(playerid){
  //do your old code here.
      new string[128];
  format(string,sizeof(string), "pJob:%d,%d",playerid, /*player job data*/);
  SendClientMessageToAll(422,string);
  return 1;
}
I have the old code in my include ( xJobs )
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)