Advertisement
Guest User

DGates

a guest
Feb 28th, 2020
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 5.38 KB | None | 0 0
  1. /*
  2.     * Filterscript: Dynamic Gates - MySQL
  3.     * Author: YumikoJR
  4.     * Date: 29th February
  5.     * Copyright (C) 2020
  6.     * Download: github.com/YumikoJR/Dynamic-Gates
  7. */
  8.  
  9. #include <a_samp>
  10. #include <a_mysql>
  11. #include <sscanf2>
  12.  
  13. #include <easyDialog>
  14.  
  15. #include <Pawn.CMD>
  16.  
  17. #define YSI_YES_HEAP_MALLOC
  18. #include <YSI_Coding\y_timers>
  19. #include <YSI_Data\y_iterate>
  20.  
  21. // > MySQL
  22. static
  23.     MySQL:dbHandler;
  24.  
  25. stock const SQL_HOST[20] = "localhost";
  26. stock const SQL_USER[20] = "root";
  27. stock const SQL_DB[20] = "gates_db";
  28.  
  29. #define TABLE_GATES "gates"
  30.  
  31. // > Constant
  32. const
  33.     MAX_GATES = (2000);
  34.  
  35. enum e_GATES_DATA
  36. {
  37.     gSQLID,
  38.     gObject,
  39.  
  40.     Float:gX,
  41.     Float:gY,
  42.     Float:gZ,
  43.     Float:gRX,
  44.     Float:gRY,
  45.     Float:gRZ
  46. };
  47.  
  48. static
  49.     e_GATE_INFO[MAX_GATES][e_GATES_DATA],
  50.     Iterator:GatesIter<MAX_GATES char>;
  51.  
  52.  
  53. public OnGameModeInit()
  54. {
  55.     new
  56.         MySQLOpt: option_id = mysql_init_options();
  57.     dbHandler = mysql_connect(SQL_HOST, SQL_USER, "", SQL_DB, option_id);
  58.  
  59.     if (dbHandler == MYSQL_INVALID_HANDLE || mysql_errno(dbHandler) != 0)
  60.     {
  61.         print("[MySQL]: Can't connect to database!");
  62.         SendRconCommand("exit");
  63.         return 1;
  64.     }
  65.    
  66.     printf(
  67.         "[MySQL]: Connection successfully - [%s/%s/%s]",
  68.         SQL_HOST, SQL_USER, SQL_DB
  69.     );
  70.  
  71.     mysql_tquery(dbHandler, "SELECT * FROM `"TABLE_GATES"`", "g_loadGates");
  72.     return 1;
  73. }
  74.  
  75. // > Load gates
  76. forward g_loadGates();
  77. public g_loadGates()
  78. {
  79.     if (!cache_num_rows())
  80.         return print("0 gates in db!");
  81.  
  82.     for (new i; i < cache_num_rows(); ++i)
  83.     {
  84.         new
  85.             id = Iter_Free(GatesIter);
  86.  
  87.         cache_get_value_name_int(i, "gSQLID", e_GATE_INFO[id][gSQLID]);
  88.         cache_get_value_name_int(i, "gObject", e_GATE_INFO[id][gObject]);
  89.  
  90.         cache_get_value_name_float(i, "gX", e_GATE_INFO[id][gX]);
  91.         cache_get_value_name_float(i, "gY", e_GATE_INFO[id][gY]);
  92.         cache_get_value_name_float(i, "gZ", e_GATE_INFO[id][gZ]);
  93.         cache_get_value_name_float(i, "gRX", e_GATE_INFO[id][gRX]);
  94.         cache_get_value_name_float(i, "gRY", e_GATE_INFO[id][gRY]);
  95.         cache_get_value_name_float(i, "gRZ", e_GATE_INFO[id][gRZ]);
  96.  
  97.         CreateObject(
  98.             e_GATE_INFO[id][gObject], e_GATE_INFO[id][gX], e_GATE_INFO[id][gY], e_GATE_INFO[id][gZ], e_GATE_INFO[id][gRX], e_GATE_INFO[id][gRY], e_GATE_INFO[id][gRZ], 300.0);
  99.  
  100.         Iter_Add(GatesIter, id);
  101.     }
  102.     return 1;
  103. }
  104.  
  105. // > Delete gates
  106. stock g_destroyGates()
  107. {
  108.     foreach (new i: MAX_GATES)
  109.     {
  110.         DestroyDynamicObject(e_GATE_INFO[i][gObject]);
  111.     }
  112.     return 1;
  113. }
  114.  
  115. // > Commands
  116. CMD:gate(playerid)
  117. {
  118.     if (!IsPlayerAdmin(playerid))
  119.         return SendClientMessage(playerid, 0xFF0000AA, "Niste ovlasceni!");
  120.  
  121.     Dialog_Show(playerid, "DialogGates", DIALOG_STYLE_LIST,
  122.         "Gates >> Select",
  123.         "Create gate\n\
  124.         Edit gate\n\
  125.         Delete gate",
  126.         "Select", "Close"
  127.     );
  128.     return 1;
  129. }
  130.  
  131. // > Dialogs
  132. Dialog:DialogGates(const playerid, response, listitem, inputtext[])
  133. {
  134.     if (!response)
  135.         return 1;
  136.  
  137.     switch (listitem)
  138.     {
  139.         case 0:
  140.         {
  141.             Dialog_Show(playerid, "DialogCGate", DIALOG_STYLE_INPUT,
  142.                 "Gates >> Create",
  143.                 "Enter: Gate Object ID",
  144.                 "Input", "Close"
  145.             );
  146.         }
  147.  
  148.         case 1:
  149.             SelectObject(playerid);
  150.  
  151.         case 2:
  152.         {
  153.             Dialog_Show(playerid, "DialogDGate", DIALOG_STYLE_INPUT,
  154.                 "Gates >> Delete",
  155.                 "Enter: Gate SQL ID",
  156.                 "Input", "Close"
  157.             );
  158.         }
  159.     }
  160.     return 1;
  161. }
  162.  
  163. Dialog:DialogCGate(const playerid, response, listitem, inputtext[])
  164. {
  165.     if (!response)
  166.         return 1;
  167.  
  168.     new
  169.         Float:x,
  170.         Float:y,
  171.         Float:z,
  172.         i = Iter_Free(GatesIter);
  173.  
  174.     GetPlayerPos(playerid, x, y, z);
  175.  
  176.     // pp-mysql :(
  177.     static query[200];
  178.  
  179.     mysql_format(dbHandler, query, sizeof query, "\
  180.         INSERT INTO `"TABLE_GATES"` \
  181.         (`gObject`, `gX`, `gY`, `gZ`) \
  182.         VALUES ('%d', '%f', '%f', '%f')", strval(inputtext), x, y, z
  183.     );
  184.     mysql_tquery(dbHandler, query);
  185.  
  186.     e_GATE_INFO[i][gSQLID] = (cache_insert_id());
  187.     e_GATE_INFO[i][gObject] = (strval(inputtext));
  188.     e_GATE_INFO[i][gX] = (x);
  189.     e_GATE_INFO[i][gY] = (y);
  190.     e_GATE_INFO[i][gZ] = (z);
  191.     e_GATE_INFO[i][gRX] = (0.0);
  192.     e_GATE_INFO[i][gRY] = (0.0);
  193.     e_GATE_INFO[i][gRZ] = (0.0);
  194.  
  195.     e_GATE_INFO[i][gObject] = CreateObject(
  196.         strval(inputtext), x, y, z, 0.0, 0.0, 0.0, 300.0);
  197.  
  198.     EditObject(playerid, e_GATE_INFO[i][gObject]);
  199.  
  200.     Iter_Add(GatesIter, i);
  201.     return 1;
  202. }
  203.  
  204. // > Editing gate
  205. public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
  206. {
  207.     if(type == SELECT_OBJECT_GLOBAL_OBJECT)
  208.     {
  209.         EditObject(playerid, objectid);
  210.     }
  211.     else
  212.     {
  213.         EditPlayerObject(playerid, objectid);
  214.     }
  215.     return 1;
  216. }
  217.  
  218. public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ )
  219. {
  220.     if(response == EDIT_RESPONSE_CANCEL)
  221.         return 1;
  222.    
  223.     if(response == EDIT_RESPONSE_FINAL)
  224.     {
  225.         MoveObject(objectid, fX, fY, fZ, 10.0, fRotX, fRotY, fRotZ);
  226.        
  227.         e_GATE_INFO[objectid][gX] = (fX);
  228.         e_GATE_INFO[objectid][gY] = (fY);
  229.         e_GATE_INFO[objectid][gZ] = (fZ);
  230.         e_GATE_INFO[objectid][gRX] = (fRotX);
  231.         e_GATE_INFO[objectid][gRY] = (fRotY);
  232.         e_GATE_INFO[objectid][gRZ] = (fRotZ);
  233.  
  234.         static query[200];
  235.         mysql_format(dbHandler, query, sizeof query, "\
  236.             UPDATE `"TABLE_GATES"` SET \
  237.             `gX` = '%f', `gY` = '%f', `gZ` = '%f', `gRX` = '%f', `gRY` = '%f', `gRZ` = '%f' WHERE `gSQLID` = '%d'",
  238.             fX, fY, fZ, fRotX, fRotY, fRotZ, e_GATE_INFO[objectid][gSQLID]
  239.         );
  240.         mysql_tquery(dbHandler, query);
  241.     }
  242.     return 1;
  243. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement