Advertisement
Hatedpain

ORM example

Aug 28th, 2013
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.47 KB | None | 0 0
  1. /*
  2. some notes:
  3. - the ORM system only works with global variables
  4. - never destroy a orm object after calling _select or _insert
  5. - destroying after calling _update or _delete is fine though
  6. - there has to be a valid key value for _select, _update or _delete
  7. - if not, OnQueryError is called
  8. - before calling _setkey, you have to call _addvar
  9. - both times they must have the identical name
  10. */
  11.  
  12. new SQL = -1;
  13.  
  14. enum e_Player
  15. {
  16.     ORM:ORM_ID,
  17.     ID,
  18.     Name[MAX_PLAYER_NAME],
  19.     Money,
  20.     Level,
  21.     Float:PosX,
  22.     Float:PosY,
  23.     Float:PosZ,
  24. };
  25. new Player[MAX_PLAYERS][e_Player];
  26.  
  27. #define DIALOG_LOGIN 1
  28. #define DIALOG_REGISTER 2
  29.  
  30.  
  31. enum e_Vehicle
  32. {
  33.     ORM:ORM_ID,
  34.     VID,
  35.     ID,
  36.     ModelID,
  37.     Color1,
  38.     Plate[32],
  39.     Float:Pos[4],
  40. };
  41. new Vehicle[MAX_VEHICLES][e_Vehicle];
  42.  
  43.  
  44. public OnGameModeInit()
  45. {
  46.     mysql_log();
  47.    
  48.     SQL = mysql_connect("127.0.0.1", "root", "test", "1234");
  49.    
  50.     //load vehicles
  51.     mysql_tquery(SQL, "SELECT * FROM `vehicles`", "OnVehiclesLoad", "");
  52.     return 1;
  53. }
  54.  
  55. forward OnVehiclesLoad();
  56. public OnVehiclesLoad()
  57. {
  58.     new rows, fields;
  59.     cache_get_data(rows, fields);
  60.     for(new r=0; r < rows; ++r) {
  61.         new ORM:ormid = Vehicle[r][ORM_ID] = orm_create("vehicles");
  62.        
  63.         orm_addvar_int(ormid, Vehicle[r][ID], "ID"); //this is the key
  64.         orm_setkey(ormid, "ID"); //here we declare it as the key
  65.         orm_addvar_int(ormid, Vehicle[r][ModelID], "ModelID");
  66.         orm_addvar_int(ormid, Vehicle[r][Color1], "Color1");
  67.         orm_addvar_string(ormid, Vehicle[r][Plate], 32, "Plate");
  68.         orm_addvar_float(ormid, Vehicle[r][Pos][0], "PosX");
  69.         orm_addvar_float(ormid, Vehicle[r][Pos][1], "PosY");
  70.         orm_addvar_float(ormid, Vehicle[r][Pos][2], "PosZ");
  71.         orm_addvar_float(ormid, Vehicle[r][Pos][3], "PosA");
  72.        
  73.         orm_apply_cache(ormid, r);
  74.        
  75.         Vehicle[r][VID] = CreateVehicle(Vehicle[r][ModelID], Vehicle[r][Pos][0], Vehicle[r][Pos][1], Vehicle[r][Pos][2], Vehicle[r][Pos][3], Vehicle[r][Color1], -1, -1);
  76.     }
  77.  
  78.     return 1;
  79. }
  80.  
  81.  
  82.  
  83. public OnPlayerConnect(playerid)
  84. {
  85.     new ORM:ormid = Player[playerid][ORM_ID] = orm_create("players");
  86.    
  87.     GetPlayerName(playerid, Player[playerid][Name], MAX_PLAYER_NAME);
  88.    
  89.    
  90.     orm_addvar_int(ormid, Player[playerid][ID], "ID");
  91.     orm_addvar_string(ormid, Player[playerid][Name], MAX_PLAYER_NAME, "Name"); //this is not the key, we don't have "ID" yet
  92.     orm_setkey(ormid, "Name"); // but we need the name for the "WHERE" part of the select query, so we set it as a key
  93.     orm_addvar_int(ormid, Player[playerid][Money], "Money");
  94.     orm_addvar_int(ormid, Player[playerid][Level], "Level");
  95.     orm_addvar_float(ormid, Player[playerid][PosX], "PosX");
  96.     orm_addvar_float(ormid, Player[playerid][PosY], "PosY");
  97.     orm_addvar_float(ormid, Player[playerid][PosZ], "PosZ");
  98.    
  99.     orm_select(ormid, "OnPlayerDataLoad", "d", playerid);
  100.     return 1;
  101. }
  102.  
  103. public OnPlayerUpdate(playerid)
  104. {
  105.     static ticks[MAX_PLAYERS];
  106.     ticks[playerid]++;
  107.     if(ticks[playerid] >= 5000) {
  108.         ticks[playerid] = 0;
  109.         orm_update(Player[playerid][ORM_ID]);
  110.     }
  111. }
  112.  
  113. forward OnPlayerDataLoad(playerid);
  114. public OnPlayerDataLoad(playerid)
  115. {
  116.     orm_setkey(Player[playerid][ORM_ID], "ID"); //now we set the real key, regardless whether there is data or not, because:
  117.     //  if there is data: cool, we don't need to call any other native now, but for future purposes set the correct key
  118.     //  if there is no data set the correct key ('ID') so orm_insert saves the key into the right variable (or else it would insert the key in the Name variable)
  119.     switch(orm_errno(Player[playerid][ORM_ID]))
  120.     {
  121.         case ERROR_OK:
  122.             ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Please insert your password.", "Login", "Abort");
  123.  
  124.         case ERROR_NO_DATA:
  125.             ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Register", "Please insert your password.", "Register", "Abort");
  126.     }
  127.     return 1;
  128. }
  129.  
  130. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  131. {
  132.     switch(dialogid)
  133.     {
  134.         case DIALOG_LOGIN:
  135.         {
  136.             //...
  137.         }
  138.        
  139.         case DIALOG_REGISTER:
  140.         {
  141.             orm_insert(Player[playerid][ORM_ID], "OnPlayerRegister", "d", playerid);
  142.         }
  143.        
  144.         default:
  145.             return 0;
  146.     }
  147.     return 1;
  148. }
  149.  
  150. forward OnPlayerRegister(playerid);
  151. public OnPlayerRegister(playerid)
  152. {
  153.     printf("Player registered with ID '%d'.", Player[playerid][ID]);
  154. }
  155.  
  156. public OnPlayerDisconnect(playerid, reason)
  157. {
  158.     orm_update(Player[playerid][ORM_ID]);
  159.     orm_destroy(Player[playerid][ORM_ID]);
  160.     return 1;
  161. }
  162.  
  163. public OnGameModeExit()
  164. {
  165.     mysql_close(SQL);
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement