Advertisement
blankkor

MySQL GM Skeleton for [MP]Ditch

Apr 5th, 2012
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 2.95 KB | None | 0 0
  1. #include <a_samp>
  2. #include <a_mysql>
  3. #include <sscanf2>
  4. // Modify below as needed.
  5. #define MYSQL_HOST "localhost"
  6. #define MYSQL_USER "root"
  7. #define MYSQL_DB "dbname"
  8. #define MYSQL_PASS ""
  9. enum P_ENUM
  10.     {
  11.     pUID,
  12.     pPWHash[129], // Suited for Whirlpool, modify as needed.
  13.     pMoney,
  14.     pALevel,
  15.     pScore
  16.     }
  17. new pData[MAX_PLAYERS][P_ENUM];
  18. forward LoadPlayerData(playerid);
  19. forward LoadPlayerData_THREAD(query[], index, extraid, connectionHandle);
  20. forward SavePlayerData(playerid);
  21. forward SavePlayerData_THREAD(query[], index, extraid, connectionHandle);
  22. forward ClearPlayerData(playerid);
  23. main() {}
  24. public OnGameModeInit()
  25.     {
  26.     mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_DB,MYSQL_PASS); // Connecting to the database.
  27.     }
  28. public OnPlayerConnect(playerid)
  29.     {
  30.     LoadPlayerData(playerid); // Load data when the player connects.
  31.     }
  32. public OnPlayerDisconnect(playerid,reason)
  33.     {
  34.     SavePlayerData(playerid); // Save data on disconnect apart from the password hash & constant UID
  35.     ClearPlayerData(playerid); // Clear the data from the server
  36.     }
  37. public ClearPlayerData(playerid)
  38.     {
  39.     new name[MAX_PLAYER_NAME];
  40.     GetPlayerName(playerid,name,MAX_PLAYER_NAME);
  41.     strdel(pData[playerid][pPWHash],0,129);
  42.     for(new i = 0;i<sizeof(pData[]);i++)
  43.         {
  44.         pData[playerid][P_ENUM:i] = 0;
  45.         }
  46.     printf("Cleared data for %s",name);
  47.     }
  48. public LoadPlayerData(playerid)
  49.     {
  50.     new name[MAX_PLAYER_NAME],escaped[32];
  51.     GetPlayerName(playerid,name,MAX_PLAYER_NAME);
  52.     if(!mysql_ping()) { return printf("Error loading user data for %s",name); }
  53.     new query[128];
  54.     mysql_real_escape_string(name,escaped);
  55.     format(query,sizeof(query),"SELECT * FROM users WHERE username = '%s'",escaped);
  56.     mysql_query_callback(playerid,query,"LoadPlayerData_THREAD");
  57.     return 1;
  58.     }
  59. public LoadPlayerData_THREAD(query[], index, extraid, connectionHandle)
  60.     {
  61.     new name[MAX_PLAYER_NAME],result[512];
  62.     GetPlayerName(index,name,MAX_PLAYER_NAME);
  63.     mysql_store_result();
  64.     if(!mysql_num_rows()) { mysql_free_result();return printf("User %s does not exist",name); }
  65.     mysql_fetch_row_format(result);
  66.     sscanf(result,"e<p<|>d{s[20]}s[129]ddd>",pData[index]);
  67.     printf("Data loaded for %s",name);
  68.     mysql_free_result();
  69.     return 1;
  70.     }
  71. public SavePlayerData(playerid)
  72.     {
  73.     new query[128],name[MAX_PLAYER_NAME];
  74.     GetPlayerName(playerid,name,MAX_PLAYER_NAME);
  75.     if(!mysql_ping()) { return printf("Error saving user data for %s",name); }
  76.     format(query,sizeof(query),"UPDATE users SET money=%d,level=%d,score=%d WHERE username='%s'",
  77.     pData[playerid][pMoney],pData[playerid][pALevel],pData[playerid][pScore],name);
  78.     mysql_query_callback(playerid,query,"SavePlayerData_THREAD");
  79.     return 1;
  80.     }
  81. public SavePlayerData_THREAD(query[], index, extraid, connectionHandle)
  82.     {
  83.     new name[MAX_PLAYER_NAME];
  84.     GetPlayerName(index,name,MAX_PLAYER_NAME);
  85.     mysql_store_result();
  86.     if(!mysql_errno())
  87.         {
  88.         printf("Data saved for %s",name);
  89.         }
  90.     else
  91.         {
  92.         printf("Could not save data for %s",name);
  93.         }
  94.     mysql_free_result();
  95.     return 1;
  96.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement