Advertisement
Guest User

SAMP example

a guest
Jun 17th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 1.94 KB | None | 0 0
  1. // Inside admin system (the functions are bellow):
  2. hook OnPlayerLoad(playerid)
  3. {
  4.     new string[40];
  5.     mysql_format(db, string, sizeof(string), "SELECT admin FROM admins WHERE id=%i", GetPlayerId(playerid));
  6.     SendPlayerQuery(playerid, string, "_adm_Palyer_load"); //Send a query and increment an internal counter
  7.     return 1;
  8. }
  9. forward _adm_Palyer_load(playerid, checker);
  10. public _adm_Palyer_load(playerid, checker)
  11. {
  12.     if(checker != DataLoadChecker(playerid)) return 1; //check for race condition & decrement the counter
  13.     if(!IsAnyData()) return 1;
  14.  
  15.     //finally load the data
  16.     cache_get_value_name_int(0, "admin", AdminLevel[playerid]);
  17.     if(AdminLevel[playerid] > 0)
  18.         Iter_Add(admins, playerid);
  19.     return 1;
  20. }
  21.  
  22. // This are the functions used
  23. #define     IsAnyData()         (cache_is_any_active() && cache_num_rows())
  24. SendPlayerQuery(playerid, str[], func[])
  25. {
  26.     DataToLoad[playerid]++; //DataToLoad is used to cound how many queries were sent
  27.     mysql_pquery(db, str, func, "ii", playerid, PlayerChecker[playerid]); //PlayerChecker is used for race condition
  28.     return 1;
  29. }
  30. DataLoadChecker(playerid)
  31. {
  32.     if(--DataToLoad[playerid] < 1) //If this was the last query, we can spawn the player
  33.     {
  34.         SetTimerEx("OnPlayerFirstSpawn", 50, false, "i", playerid);
  35.         SpawnPlayer(playerid);
  36.     }
  37.     return PlayerChecker[playerid];
  38. }
  39.  
  40. //Another example:
  41. hook OnPlayerLoad(playerid)
  42. {
  43.     new string[40];
  44.     mysql_format(db, string, sizeof(string), "SELECT * FROM users WHERE id=%i LIMIT 1", GetPlayerId(playerid));
  45.     SendPlayerQuery(playerid, string, "OnAccountLoad");
  46.     return 1;
  47. }
  48. hook OnAccountLoad(playerid, checker) //On top of my gamemode (used only to check for race condition)
  49. {
  50.     if(DataLoadChecker(playerid) != checker) return stop(1); //stop further execution and return 1
  51.     if(!IsAnyData()) return stop(1);
  52.  
  53.     return 1;
  54. }
  55. hook OnAccountLoad(playerid) //In any other file
  56. {
  57.     new string[41];
  58.     cache_get_value_name(0, "gpci", string); //Load something..
  59.     return 1;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement