Advertisement
cL_

SQLite SA-MP ~cL-

cL_
Oct 5th, 2022
2,241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 6.92 KB | None | 0 0
  1. /*
  2.  
  3. Sistema básico de salvamento de dados em SQLite no SA-MP.
  4.  
  5. O sistema é simples e salva as seguintes informações: ID Fixo, nome, senha, IP, skin, dinheiro, nivel.
  6. OBS: Apenas tem o salvamento, a parte simples que é anexar isso em sua gamemode fica por sua parte.
  7.  
  8. Pode usar? Pode, portanto eu recomendo que você estude e crie um do zero pra si com suas mãos etc...
  9.  
  10.  
  11. O sistema cria automaticamente a database que ficará localizada em 'scriptfiles/database.db' que também poderá ser acessada através de um DB Browser.
  12.  
  13. by: Carlos Victor#6045
  14. -> Eu não coloquei o sistema em prática, mas visualmente é funcional, só basta uma adaptação.
  15.  
  16. */
  17.  
  18. #include <a_samp>
  19.  
  20. enum
  21. {
  22.     dialog_register,
  23.     dialog_login
  24. };
  25.  
  26. enum E_PLAYER
  27. {
  28.     E_ID,
  29.     E_NAME[24],
  30.     E_PASSWORD[32],
  31.     E_IP[16],
  32.     E_SKIN,
  33.     E_MONEY,
  34.     E_SCORE,
  35.  
  36.     E_WRONG,
  37.     bool:E_LOGGED
  38. };
  39. new E_DATA[MAX_PLAYERS][E_PLAYER];
  40.  
  41. new DB:database;
  42.  
  43. main(){}
  44.  
  45. public OnGameModeInit()
  46. {      
  47.     if((database = db_open("database.db")) == DB:0)
  48.     {
  49.         print("Falha ao conectar com o banco de dados.");
  50.     }
  51.     else
  52.     {
  53.         print("Sucesso ao conectar com o banco de dados.");
  54.  
  55.         db_free_result(db_query(database, "CREATE TABLE IF NOT EXISTS `accounts`(\
  56.             `id` INTEGER PRIMARY KEY AUTOINCREMENT,\
  57.             `name` TEXT NOT NULL,\
  58.             `password` TEXT NOT NULL,\
  59.             `ip` TEXT NOT NULL,\
  60.             `skin` INTEGER DEFAULT 60,\
  61.             `money` INTEGER DEFAULT 250,\
  62.             `score` INTEGER DEFAULT 0)"));
  63.     }  
  64.     return 1;
  65. }
  66.  
  67. public OnGameModeExit()
  68. {
  69.     db_close(database);
  70.     return 1;
  71. }
  72.  
  73. public OnPlayerRequestClass(playerid, classid)
  74. {  
  75.     SetSpawnInfo(playerid, NO_TEAM, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  76.     SpawnPlayer(playerid);
  77.  
  78.     TogglePlayerSpectating(playerid, true);
  79.     return 1;
  80. }
  81.  
  82. public OnPlayerConnect(playerid)
  83. {      
  84.     GetPlayerName(playerid, E_DATA[playerid][E_NAME], 24);
  85.     GetPlayerIp(playerid, E_DATA[playerid][E_IP], 16);
  86.  
  87.     SetTimerEx("OnPlayerMessage", 100, false, "i", playerid);
  88.     return 1;
  89. }
  90.  
  91. public OnPlayerDisconnect(playerid, reason)
  92. {
  93.     destroyAllPlayerTextDraw(playerid);
  94.  
  95.     saveData(playerid);
  96.     return 1;
  97. }
  98.  
  99. function OnPlayerMessage(playerid)
  100. {
  101.     clearChat(playerid);
  102.     SendClientMessage(playerid, -1, "* Carregando informações, aguarde...");
  103.  
  104.     SetTimerEx("OnLoadingScreen", 1000 * 2, false, "i", playerid)
  105.     return 1;
  106. }
  107.  
  108. function OnLoadingScreen(playerid)
  109. {
  110.     new query[90];
  111.     format(query, sizeof(query), "SELECT * FROM `accounts` WHERE `name`='%q'", E_DATA[playerid][E_NAME]);
  112.  
  113.     new DBResult:result = db_query(database, query);
  114.     if(db_num_rows(result))
  115.     {    
  116.         db_get_field_assoc(result, "password", E_DATA[playerid][E_PASSWORD], 32);
  117.         E_DATA[playerid][E_ID] = db_get_field_assoc_int(result, "id");
  118.  
  119.         ShowPlayerDialog(playerid, dialog_login, DIALOG_STYLE_PASSWORD, "Entrando...", "{FFFFFF}Sua conta está {90EE90}REGISTRADA {FFFFFF}no servidor, digite sua senha no campo abaixo:", "Confirmar", "X");
  120.     }
  121.     else
  122.     {
  123.         ShowPlayerDialog(playerid, dialog_register, DIALOG_STYLE_INPUT, "Entrando...", "{FFFFFF}Sua conta não está {FF6347}REGISTRADA {FFFFFF}no servidor, portanto digite uma senha de 6-32 caracateres no campo abaixo:", "Confirmar", "X");
  124.     }
  125.     db_free_result(result);
  126.     return 1;
  127. }
  128.  
  129. public OnPlayerSpawn(playerid)
  130. {
  131.     SetPlayerSkin(playerid, E_DATA[playerid][E_SKIN]);
  132.  
  133.     SetPlayerPos(playerid, 1088.2767, 1074.3389, 10.8382);     
  134.     SetPlayerFacingAngle(playerid, 126.0655);
  135.     return 0;
  136. }
  137.  
  138. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  139. {
  140.     switch(dialogid)
  141.     {
  142.         case dialog_register:
  143.         {
  144.             if(!response)
  145.                 return Kick(playerid);
  146.  
  147.             if(!strlen(inputtext))
  148.                 return ShowPlayerDialog(playerid, dialog_register, DIALOG_STYLE_INPUT, "Entrando...", "{FFFFFF}Sua conta não está {FF6347}REGISTRADA {FFFFFF}no servidor, portanto digite uma senha de 6-32 caracateres no campo abaixo:", "Confirmar", "X");
  149.  
  150.             if(strlen(inputtext) < 6 || strlen(inputtext) > 32)
  151.                 return ShowPlayerDialog(playerid, dialog_register, DIALOG_STYLE_INPUT, "Entrando...", "{FFFFFF}Sua conta não está {FF6347}REGISTRADA {FFFFFF}no servidor, portanto digite uma senha de 6-32 caracateres no campo abaixo:", "Confirmar", "X");
  152.  
  153.             new query[256];
  154.             format(query, sizeof(query), "INSERT INTO `accounts`(name, password, ip) VALUES('%q', '%q', '%q')", E_DATA[playerid][E_NAME], inputtext, E_DATA[playerid][E_IP]);
  155.             db_query(database, query);
  156.  
  157.             loadData(playerid);
  158.         }
  159.         case dialog_login:
  160.         {
  161.             if(!response)
  162.                 return Kick(playerid);
  163.  
  164.             if(!strlen(inputtext))
  165.                 return ShowPlayerDialog(playerid, dialog_login, DIALOG_STYLE_PASSWORD, "Entrando...", "{FFFFFF}Sua conta está {90EE90}REGISTRADA {FFFFFF}no servidor, digite sua senha no campo abaixo:", "Confirmar", "X");
  166.  
  167.             if(!strcmp(E_DATA[playerid][E_PASSWORD], inputtext, true))
  168.             {
  169.                 loadData(playerid);
  170.             }
  171.             else
  172.             {
  173.                 ShowPlayerDialog(playerid, dialog_login, DIALOG_STYLE_PASSWORD, "Entrando...", "{FFFFFF}Sua conta está {90EE90}REGISTRADA {FFFFFF}no servidor, digite sua senha no campo abaixo:", "Confirmar", "X");
  174.  
  175.                 E_DATA[playerid][E_WRONG]++;
  176.                 SendErrorMessage(playerid, "Você errou sua senha, portanto possui %d tentativas restantes.", 4 - E_DATA[playerid][E_WRONG]);
  177.  
  178.                 if(E_DATA[playerid][E_WRONG] >= 4)
  179.                     return Kick(playerid);
  180.             }
  181.         }
  182.     }
  183.     return 1;
  184. }
  185.  
  186. stock loadData(playerid)
  187. {  
  188.     TogglePlayerSpectating(playerid, false);   
  189.  
  190.     clearChat(playerid);
  191.  
  192.     new query[140], DBResult:result;
  193.     format(query, sizeof(query), "SELECT * FROM `accounts` WHERE `name`='%q'", E_DATA[playerid][E_NAME]);
  194.  
  195.     result = db_query(database, query);
  196.  
  197.     E_DATA[playerid][E_LOGGED] = true;
  198.  
  199.     E_DATA[playerid][E_SKIN] = db_get_field_assoc_int(result, "skin");
  200.     E_DATA[playerid][E_MONEY] = db_get_field_assoc_int(result, "money");   
  201.     E_DATA[playerid][E_SCORE] = db_get_field_assoc_int(result, "score");   
  202.  
  203.     db_free_result(result);
  204.    
  205.     SetPlayerSkin(playerid, E_DATA[playerid][E_SKIN]);
  206.     GivePlayerMoney(playerid, E_DATA[playerid][E_MONEY]);
  207.     SetPlayerColor(playerid, 0xFFFFFFFF);
  208.  
  209.     SendClientMessage(playerid, -1, "* Seus dados foram carregados com sucesso.");
  210.     return 1;
  211. }
  212.  
  213. stock saveData(playerid)
  214. {
  215.     if(!E_DATA[playerid][E_LOGGED])
  216.         return 1;
  217.  
  218.     new query[140];
  219.     format(query, sizeof(query), "UPDATE `accounts` SET \
  220.         `ip`='%q',\
  221.         `skin`='%d',\
  222.         `money`='%d',\
  223.         `score`='%d' WHERE `id`='%d'",
  224.                                         E_DATA[playerid][E_IP],
  225.                                         E_DATA[playerid][E_ADMIN],
  226.                                         E_DATA[playerid][E_SKIN],
  227.                                         E_DATA[playerid][E_MONEY],
  228.                                         E_DATA[playerid][E_SCORE],
  229.                                         E_DATA[playerid][E_KILLS],
  230.                                         E_DATA[playerid][E_FIGHT],
  231.                                         E_DATA[playerid][E_DEATH],
  232.                                         E_DATA[playerid][E_ID]);
  233.  
  234.     db_free_result(db_query(database, query));
  235.  
  236.     resetData(playerid);
  237.     return 1;
  238. }
  239.  
  240. stock resetData(playerid)
  241. {
  242.     new dummy[E_PLAYER];
  243.     E_DATA[playerid] = dummy;
  244.     return 1;
  245. }
  246.  
  247. stock clearChat(playerid)
  248. {
  249.     for(new i; i != 30; i++)
  250.         SendClientMessage(playerid, -1, " ");
  251.  
  252.     return 1;
  253. }
  254.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement