SA-MP Forums Archive
[HELP] Loading player variables - MySQL - 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] Loading player variables - MySQL (/showthread.php?tid=111296)



[HELP] Loading player variables - MySQL - tom_jonez - 30.11.2009

Hey guys, im making an "auto unload variable" script to unload variables from an sql database and load them into an array for the player variables. Im having trouble tho...

Код:
//login command
.... 
		LoadPlayerVariables(playerid,query); // goes fine, prints all values how they should be
		if(Players[playerid][loggedin] == 0)
		{
		  print(Players[playerid][loggedin]); // Printed as null
.....
Код:
//Loading player variables
public LoadPlayerVariables(playerid,query[])
{
	new fval = 0;
	new field[256],update[256],date[256],day,month,year,line[1024];
	samp_mysql_query(query);
	samp_mysql_store_result();
	samp_mysql_fetch_row(line);
	print(line); // to view the sql result... appears normal
	samp_mysql_strtok(field, "|", line);
	format(Players[playerid][pInfo:fval],256,"%s",field); // loads "R4nk3d" into Players[playerid][pInfo:fval]
 	printf("%s is now stored as %s for player id (%i).",field,Players[playerid][pInfo:fval],playerid);
	fval ++;
	while(samp_mysql_strtok(field, "|", "")==1)
	{
	  //Players[playerid][pInfo:fval] =
		format(Players[playerid][pInfo:fval],256,"%s",field);
	  printf("%s is now stored as %s for player id (%i).",field,Players[playerid][pInfo:fval],playerid);
	  fval ++;
	}
.....
}
So why is it when i call Players[playerid][loggedin] it says null even though it loads it?


Re: Loading player variables - yezizhu - 30.11.2009

pawn Код:
printf("loadStaut:%s",Players[playerid][loggedin]?"loaded":"unload");



Re: Loading player variables - tom_jonez - 30.11.2009

can you explain that code a bit more please?


Re: Loading player variables - thegoliathmaster - 01.12.2009

hi,

this is a basic if test written another way....

the result is equivalent to:

Код:
if(Players[playerid][loggedin])
{
  print("loadsaut:loaded");
}
else
{
  print("loadsaut:unload");
}
++Sim++


Re: [HELP] Loading player variables - MySQL - tom_jonez - 01.12.2009

gotcha, well i got more in depth to figuring it out.

btw, loggedin == 0, means theyre banned, and 1 means theyre logged in now. it unloads it and instead of it being null/0 it now says 1.
Players[playerid][loggedin] is returned as 0/null.
But Players[playerid][pInfo:6] is returned as 1.

So how do i automatically unload the variables into the enum without putting every name in? i thought i was doing that with pInfo:0, pInfo:1, but apparently not. Thats a whole other variable.


Re: [HELP] Loading player variables - MySQL - yezizhu - 01.12.2009

That you mean?
pawn Код:
enum _Players{
  e1,
  e2,
  e3,
  e4,
  e5,
  loggedin,
  .
  .
  .
};
new
  Players[MAX_PLAYERS][_Players];
Whatever, loggedin is either 0 or 1, use print(Players[playerid][loggedin]); is alyways outputting null.
Because the code is same as
pawn Код:
print("\1");
print("\0");
//null
And you should do
pawn Код:
printf("%d",Players[playerid][loggedin]);



Re: [HELP] Loading player variables - MySQL - tom_jonez - 01.12.2009

Alright, now it prints as 0. Thank you for clearing that small bit up for me and explaining it.

let me give some more code:

heres the player info enum:
Код:
enum pInfo
{
	username[28],
	password[32],
	email[50],
	hideemail,
	datejoined[28],
	id,
	loggedin,
	score,
	money,
	bankstate,
	adminlevel,
	regular,
	armyaccess,
	robrank,
	lastseen[10],
	dlicense,
	plicense,
	dinstructor,
	pinstructor,
	bannedby[28],
	bantime[20],
	banreason[128]
};
new Players[MAX_PLAYERS][pInfo];
this conforms to the mysql table structure, every thing w/o a set value/length is an integer in the mysql table. ex: loggedin

and here is the loading part of the Loadplayerinfo command
Код:
...
samp_mysql_strtok(field, "|", line);
	format(Players[playerid][pInfo:fval],256,"%s",field);
 	printf("%s is now stored as %s for player id (%i).",field,Players[playerid][pInfo:fval],playerid);
	fval ++;
	while(samp_mysql_strtok(field, "|", "")==1)
	{
	  //Players[playerid][pInfo:fval] =
		format(Players[playerid][pInfo:fval],256,"%s",field);
	  printf("%s is now stored as %s for player id (%i).",field,Players[playerid][pInfo:fval],playerid);
	  fval ++;
	}
...
Now i just came up with an idea, make a new array that list the table fields, and for each field, select the value of it (after mysql_fetch_row) and then say format(Players[playerid][field],256,"%s",fieldvalue); would that work?


Re: [HELP] Loading player variables - MySQL - yezizhu - 02.12.2009

Not anything can be stored as "s" string, something they must stored as integer, float, etc.
Here's my untested code.
pawn Код:
if(sizeof(Players[][pInfo:fval])<2){
  Players[playerid][pInfo:fval] = strval(field);
}else{
  format(Players[playerid][pInfo:fval],sizeof(Players[][pInfo:fval]),"%s",filed);
}



Re: [HELP] Loading player variables - MySQL - tom_jonez - 02.12.2009

Код:
if(sizeof(Players[][pInfo:fval])<2){
is returning errors:

Quote:

C:\Inetpub\wwwroot\lvrcr\gameserver\gamemodes\debu g.pwn(1869) : error 001: expected token: "]", but found "-label-"
C:\Inetpub\wwwroot\lvrcr\gameserver\gamemodes\debu g.pwn(1869) : warning 221: label name "pInfo" shadows tag name
C:\Inetpub\wwwroot\lvrcr\gameserver\gamemodes\debu g.pwn(1869) : warning 215: expression has no effect
C:\Inetpub\wwwroot\lvrcr\gameserver\gamemodes\debu g.pwn(1869) : error 001: expected token: ";", but found "]"
C:\Inetpub\wwwroot\lvrcr\gameserver\gamemodes\debu g.pwn(1869) : error 029: invalid expression, assumed zero
C:\Inetpub\wwwroot\lvrcr\gameserver\gamemodes\debu g.pwn(1869) : fatal error 107: too many error messages on one line




Re: [HELP] Loading player variables - MySQL - yezizhu - 02.12.2009

Try Players[playerid][pInfo:fval]
?