Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #include <a_mysql>
- #include <sscanf2>
- // Modify below as needed.
- #define MYSQL_HOST "localhost"
- #define MYSQL_USER "root"
- #define MYSQL_DB "dbname"
- #define MYSQL_PASS ""
- enum P_ENUM
- {
- pUID,
- pPWHash[129], // Suited for Whirlpool, modify as needed.
- pMoney,
- pALevel,
- pScore
- }
- new pData[MAX_PLAYERS][P_ENUM];
- forward LoadPlayerData(playerid);
- forward LoadPlayerData_THREAD(query[], index, extraid, connectionHandle);
- forward SavePlayerData(playerid);
- forward SavePlayerData_THREAD(query[], index, extraid, connectionHandle);
- forward ClearPlayerData(playerid);
- main() {}
- public OnGameModeInit()
- {
- mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_DB,MYSQL_PASS); // Connecting to the database.
- }
- public OnPlayerConnect(playerid)
- {
- LoadPlayerData(playerid); // Load data when the player connects.
- }
- public OnPlayerDisconnect(playerid,reason)
- {
- SavePlayerData(playerid); // Save data on disconnect apart from the password hash & constant UID
- ClearPlayerData(playerid); // Clear the data from the server
- }
- public ClearPlayerData(playerid)
- {
- new name[MAX_PLAYER_NAME];
- GetPlayerName(playerid,name,MAX_PLAYER_NAME);
- strdel(pData[playerid][pPWHash],0,129);
- for(new i = 0;i<sizeof(pData[]);i++)
- {
- pData[playerid][P_ENUM:i] = 0;
- }
- printf("Cleared data for %s",name);
- }
- public LoadPlayerData(playerid)
- {
- new name[MAX_PLAYER_NAME],escaped[32];
- GetPlayerName(playerid,name,MAX_PLAYER_NAME);
- if(!mysql_ping()) { return printf("Error loading user data for %s",name); }
- new query[128];
- mysql_real_escape_string(name,escaped);
- format(query,sizeof(query),"SELECT * FROM users WHERE username = '%s'",escaped);
- mysql_query_callback(playerid,query,"LoadPlayerData_THREAD");
- return 1;
- }
- public LoadPlayerData_THREAD(query[], index, extraid, connectionHandle)
- {
- new name[MAX_PLAYER_NAME],result[512];
- GetPlayerName(index,name,MAX_PLAYER_NAME);
- mysql_store_result();
- if(!mysql_num_rows()) { mysql_free_result();return printf("User %s does not exist",name); }
- mysql_fetch_row_format(result);
- sscanf(result,"e<p<|>d{s[20]}s[129]ddd>",pData[index]);
- printf("Data loaded for %s",name);
- mysql_free_result();
- return 1;
- }
- public SavePlayerData(playerid)
- {
- new query[128],name[MAX_PLAYER_NAME];
- GetPlayerName(playerid,name,MAX_PLAYER_NAME);
- if(!mysql_ping()) { return printf("Error saving user data for %s",name); }
- format(query,sizeof(query),"UPDATE users SET money=%d,level=%d,score=%d WHERE username='%s'",
- pData[playerid][pMoney],pData[playerid][pALevel],pData[playerid][pScore],name);
- mysql_query_callback(playerid,query,"SavePlayerData_THREAD");
- return 1;
- }
- public SavePlayerData_THREAD(query[], index, extraid, connectionHandle)
- {
- new name[MAX_PLAYER_NAME];
- GetPlayerName(index,name,MAX_PLAYER_NAME);
- mysql_store_result();
- if(!mysql_errno())
- {
- printf("Data saved for %s",name);
- }
- else
- {
- printf("Could not save data for %s",name);
- }
- mysql_free_result();
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement