What's the best way to store player variables via MySQL
#1

I have been trying to store my players variables inside MySQL database, but no luck.. but thought of two ways that i think would work:

One way:

Код:
format(query, sizeof(query), "UPDATE playerdata SET Admin=%d", PlayerData[playerid][pAdmin);
mysql_query(query);
This way ^^ for each variable..


Another way:

Код:
		new query[750], query1[750], query2[750], query3[750], query4[750], query5[750], query6[750], query7[750], query8[3500];
 		format(query, sizeof(query), "UPDATE playerdata SET bank=%d, playerlvl=%d, rpoints=%d, playertime=%d, jail=%d, jailreason='%s', jailtime=%d",PlayerInfo[playerid][bank],
		PlayerInfo[playerid][playerlvl],
		PlayerInfo[playerid][rpoints],
		PlayerInfo[playerid][playertime],
		PlayerInfo[playerid][jail],
		PlayerInfo[playerid][jailreason],
		PlayerInfo[playerid][jailtime]);

		format(query, sizeof(query1), "banned=%d, banreason='%s', whobannedme='%s', whenigotbanned='%s', Skin=%d, ranklvl=%d, rentprice=%d, driverlic=%d",
		PlayerInfo[playerid][banned],
		PlayerInfo[playerid][banreason],
		PlayerInfo[playerid][whobannedme],
		PlayerInfo[playerid][whenigotbanned],
		PlayerInfo[playerid][Skin],
		PlayerInfo[playerid][ranklvl],
		PlayerInfo[playerid][rentprice],
		PlayerInfo[playerid][driverlic]);
		
		format(query, sizeof(query2), "flylic=%d, boatlic=%d, weaplic=%d, jobtime=%d, jobskill=%d, totalpayt=%d, kills=%d, deaths=%d, housenum=%d",
		PlayerInfo[playerid][flylic],
		PlayerInfo[playerid][boatlic],
  		PlayerInfo[playerid][weaplic],
        PlayerInfo[playerid][jobtime],
        PlayerInfo[playerid][jobskill],
        PlayerInfo[playerid][totalpayt],
		PlayerInfo[playerid][kills],
		PlayerInfo[playerid][deaths],
		PlayerInfo[playerid][housenum]);
		
		format(query, sizeof(query3), "loan=%d, drugs=%d, guns=%d, sguns=%d, sdrugs=%d, nreports=%d, power=%d, spawnX=%f, spawnY=%f, spawnZ=%f, spawnInter=%d",
		PlayerInfo[playerid][loan],
		PlayerInfo[playerid][drugs],
		PlayerInfo[playerid][guns],
		PlayerInfo[playerid][sguns],
		PlayerInfo[playerid][sdrugs],
		PlayerInfo[playerid][nreports],
		PlayerInfo[playerid][power],
		PlayerInfo[playerid][spawnX],
		PlayerInfo[playerid][spawnY],
		PlayerInfo[playerid][spawnZ],
		PlayerInfo[playerid][spawnInter]);
		
		format(query, sizeof(query4), "factnumber=%d, head=%d, headby='%s', famnumber=%d, female=%d, bail=%d, premium=%d, gotphone=%d, phonenumber=%d",
		PlayerInfo[playerid][factnumber],
		PlayerInfo[playerid][head],
  		PlayerInfo[playerid][headby],
        PlayerInfo[playerid][famnumber],
        PlayerInfo[playerid][female],
        PlayerInfo[playerid][bail],
  		PlayerInfo[playerid][premium],
		PlayerInfo[playerid][gotphone],
		PlayerInfo[playerid][phonenumber]);
		
		format(query, sizeof(query5), "phonebook=%d, laptop=%d, virworld=%d, age=%d, premiumexpire=%d, playerteam=%d, playerBarrierKeys=%d, radio=%d, freq1=%d",
		PlayerInfo[playerid][phonebook],
		PlayerInfo[playerid][laptop],
		PlayerInfo[playerid][virworld],
		PlayerInfo[playerid][age],
		PlayerInfo[playerid][premiumexpire],
		PlayerInfo[playerid][playerteam],
		PlayerInfo[playerid][playerBarrierKeys],
		PlayerInfo[playerid][radio],
		PlayerInfo[playerid][freq1]);
		
		format(query, sizeof(query6), "freq2=%d, freq3=%d, tutorial=%d, tbanned=%d, city='%s', married='%s', family='%s', faction='%s, PTeamName='%s'",
		PlayerInfo[playerid][freq2],
		PlayerInfo[playerid][freq3],
		PlayerInfo[playerid][tutorial],
		PlayerInfo[playerid][tbanned],
		PlayerInfo[playerid][city],
		PlayerInfo[playerid][married],
    	PlayerInfo[playerid][family],
    	PlayerInfo[playerid][faction],
    	PlayerInfo[playerid][PTeamName]);
    	
		format(query, sizeof(query7), "job='%s', totalruns=%d, fpay=%d, warns=%d, helper=%d, curfreq=%d, rankname='%s', pdspawn=%d, phonechanges=%d, lastonline=%d WHERE user='%s'",
		PlayerInfo[playerid][job],
		PlayerInfo[playerid][totalruns],
		PlayerInfo[playerid][fpay],
		PlayerInfo[playerid][warns],
		PlayerInfo[playerid][helper],
		PlayerInfo[playerid][curfreq],
		PlayerInfo[playerid][rankname],
		PlayerInfo[playerid][pdspawn],
		PlayerInfo[playerid][phonechanges],
		PlayerInfo[playerid][lastonline], pname);
		
		format(query8, sizeof(query8), query,query1,query2,query3,query4,query5,query6,query7);
		mysql_query(query8);
I wanted to get the communities opinion on it.. what way would work better or would they work at all...?
Reply
#2

enumerators:

pawn Код:
enum pData
{
    pLevel
    pBusiness
    pHouse
    pCash
    pBank
};
new PlayerData[MAX_PLAYERS][pData];
And then upon the player logging in, save all the variables from MySQL to the enumerator:

pawn Код:
new query[200];
format(query, sizeof(query), "SELECT * FROM `userdata` WHERE `username`='%s'", username);
mysql_query(query);
mysql_store_result();
// save the variables there either with sscanf or mysql_fetch_field_row
And then under where you are using these variables, you can just use:

pawn Код:
if(PlayerData[playerid][pLevel] < 1) return ...
And then under the player disconnect, save their variables to the MySQL database again.
Reply
#3

This for OnPlayerDisconnect, to save upon leaving the server :/ I have added all that and It works fine it's just when I am IG and I change a variable IG it dosen't save when you leave :/
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)