Guest User

Base Registro/Login SQLite (s/ Hash & s/ explicação)

a guest
Mar 5th, 2016
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.73 KB | None | 0 0
  1. /* ______________________________________
  2. |__SISTEMA_BASE_DE_REGISTRO_&_LOGIN__|
  3. |______________BY_F1N4L______________|
  4. |_____________05_03_2016_____________|
  5. |_______________v_0.3z_______________|
  6. */
  7.  
  8. #include < a_samp > // By SA:MP Team
  9. #include < sscanf2 > // By Y_Less
  10. #include < zcmd > // By Zeex
  11.  
  12. #undef MAX_PLAYERS
  13. #define MAX_PLAYERS ( 50 )
  14.  
  15. #define DIALOG_LOGIN ( 100 )
  16. #define DIALOG_REGISTER ( 101 )
  17.  
  18. #define _UDB_ "Server.db"
  19. #define USER_DB "Users"
  20.  
  21. enum pInfo
  22. {
  23. pID,
  24. tkNOME[ MAX_PLAYER_NAME ],
  25. pSENHA[ 129 ],
  26. pADMIN,
  27.  
  28. bool: pLOGADO
  29. };
  30. new
  31. USER[ MAX_PLAYERS ][ pInfo ]
  32. ;
  33. new
  34. DB: User_Database
  35. ;
  36.  
  37. public OnFilterScriptInit ( )
  38. {
  39. new
  40. Query_User [ 500 ]
  41. ;
  42.  
  43. if ( ( User_Database = db_open ( _UDB_ ) ) == DB:0 )
  44. {
  45. SendRconCommand ( "exit" );
  46. }
  47. else
  48. {
  49. strcat ( Query_User, "CREATE TABLE IF NOT EXISTS `"USER_DB"`" );
  50. strcat ( Query_User, "(`ID` INTEGER PRIMARY KEY AUTOINCREMENT," );
  51. strcat ( Query_User, "`NOME` TEXT," );
  52. strcat ( Query_User, "`SENHA` TEXT," );
  53. strcat ( Query_User, "`ADMIN` NUMERIC )" );
  54. db_query ( User_Database, Query_User );
  55. }
  56.  
  57. return 1;
  58. }
  59.  
  60. public OnFilterScriptExit ( )
  61. {
  62. db_close ( User_Database );
  63. return 1;
  64. }
  65.  
  66. public OnPlayerConnect ( playerid )
  67. {
  68. new Reset[ pInfo ];
  69. USER[ playerid ] = Reset;
  70.  
  71. new
  72. Query_User [ 200 ],
  73. DBResult: Resultado
  74. ;
  75.  
  76. format ( Query_User, sizeof ( Query_User ) , "SELECT `SENHA` FROM `"USER_DB"` WHERE `NOME` = '%s'", DB_Escape ( pName ( playerid ) ) );
  77. Resultado = db_query ( User_Database, Query_User );
  78. if ( db_num_rows ( Resultado ) )
  79. {
  80. db_get_field_assoc ( Resultado, "SENHA", USER[ playerid ][ pSENHA ], 129 );
  81.  
  82. ShowPlayerDialog ( playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Painel de Login", "Bem Vindo novamente ao nosso servidor\nLogue-se para continuar de onde parou:", "LOGAR","SAIR" );
  83. }
  84. else
  85. {
  86. ShowPlayerDialog ( playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Painel de Registro", "Bem Vindo ao nosso servidor\nRegistre-se para salvar seu dados:", "REGISTRAR","SAIR" );
  87. }
  88. db_free_result ( db_query ( User_Database, Query_User ) );
  89.  
  90. return 1;
  91. }
  92.  
  93. public OnPlayerDisconnect ( playerid, reason )
  94. {
  95. new
  96. Query_User [ 500 ]
  97. ;
  98.  
  99. format ( Query_User, sizeof ( Query_User ) , "UPDATE `"USER_DB"` SET `ADMIN` = '%i' WHERE `NOME` = '%s'", USER[ playerid ][ pADMIN ], DB_Escape ( pName ( playerid ) ) );
  100. db_query ( User_Database, Query_User );
  101.  
  102. new Reset[ pInfo ];
  103. USER[ playerid ] = Reset;
  104.  
  105. return 1;
  106. }
  107.  
  108. public OnDialogResponse ( playerid, dialogid, response, listitem, inputtext[ ] )
  109. {
  110. if ( dialogid == DIALOG_REGISTER )
  111. {
  112. if ( response )
  113. {
  114. if ( !IsValidPassword ( inputtext ) )
  115. {
  116. ShowPlayerDialog ( playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Painel de Registro", "Bem Vindo ao nosso servidor\nRegistre-se para salvar seu dados:", "REGISTRAR","SAIR" );
  117. SendClientMessage ( playerid, -1, "Utilize apenas LETRAS e NÚMEROS." );
  118. return 0;
  119. }
  120. if ( strlen ( inputtext ) < 3 || strlen ( inputtext ) > 20 )
  121. {
  122. ShowPlayerDialog ( playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Painel de Registro", "Bem Vindo ao nosso servidor\nRegistre-se para salvar seu dados:", "REGISTRAR","SAIR" );
  123. SendClientMessage ( playerid, -1, "A senha deve ser entre 3-20." );
  124. return 0;
  125. }
  126.  
  127. new
  128. Query_User [ 500 ]
  129. ;
  130.  
  131. format ( Query_User, sizeof ( Query_User ) , "INSERT INTO `"USER_DB"` ( `NOME` ) VALUES ( '%s' ) ", DB_Escape ( pName ( playerid ) ) );
  132. db_query ( User_Database, Query_User );
  133. format ( Query_User, sizeof ( Query_User ) , "UPDATE `"USER_DB"` SET `SENHA` = '%s' WHERE `NOME` = '%s'", DB_Escape ( inputtext ) , DB_Escape ( pName ( playerid ) ) );
  134. db_query ( User_Database, Query_User );
  135. format ( Query_User, sizeof ( Query_User ) , "UPDATE `"USER_DB"` SET `ADMIN` = '0' WHERE `NOME` = '%s'", DB_Escape ( pName ( playerid ) ) );
  136. db_query ( User_Database, Query_User );
  137.  
  138. USER[playerid][pLOGADO] = true;
  139.  
  140. SendClientMessage ( playerid, -1, "Sua conta foir criada com sucesso e você foi automaticamente logado!" );
  141. }
  142. else
  143. {
  144. Kick(playerid);
  145. }
  146. }
  147. if ( dialogid == DIALOG_LOGIN )
  148. {
  149. if ( response )
  150. {
  151. new
  152. Query_User[ 500 ],
  153. DBResult: Resultado
  154. ;
  155.  
  156. if ( !strcmp ( inputtext, USER[ playerid ][ pSENHA ], false ) )
  157. {
  158. format ( Query_User, sizeof ( Query_User ) , "SELECT * FROM `"USER_DB"` WHERE `NOME` = '%s'", DB_Escape ( pName ( playerid ) ) );
  159. Resultado = db_query ( User_Database, Query_User );
  160. if ( db_num_rows ( Resultado ) )
  161. {
  162. db_get_field_assoc ( Resultado, "ID", Query_User, 3 );
  163. USER[ playerid ][ pID ] = strval ( Query_User );
  164.  
  165. db_get_field_assoc ( Resultado, "ADMIN", Query_User, 6 );
  166. USER[ playerid ][ pADMIN ] = strval ( Query_User );
  167. }
  168. db_free_result ( db_query ( User_Database, Query_User ) );
  169.  
  170. SendClientMessage ( playerid, -1, "Você logou com sucesso!" );
  171.  
  172. USER[playerid][pLOGADO] = true;
  173. }
  174. else
  175. {
  176. SendClientMessage ( playerid, -1, "Você errou a senha!" );
  177. ShowPlayerDialog ( playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Painel de Login", "Bem Vindo novamente ao nosso servidor\nLogue-se para continuar de onde parou:", "LOGAR","SAIR" );
  178. }
  179. }
  180. else
  181. {
  182. Kick(playerid);
  183. }
  184. }
  185.  
  186. return 1;
  187. }
  188.  
  189. CMD:setlevel ( playerid, params[] )
  190. {
  191. new
  192. Target,
  193. Level,
  194. String[129]
  195. ;
  196.  
  197. if ( sscanf ( params, "ui", Target, Level ) ) return SendClientMessage(playerid, -1, "/SETLEVEL [ID] [LEVEL]");
  198.  
  199. format ( String, sizeof ( String ), "Admin %s setou level admin %i para o player %s", pName ( playerid ), Level, pName ( Target ) );
  200. SendClientMessageToAll(-1, String);
  201. format ( String, sizeof ( String ), "Admin %s setou seu level admin para %i", pName ( playerid ), Level );
  202. SendClientMessageToAll(-1, String);
  203.  
  204. USER[playerid][pADMIN] = Level;
  205.  
  206. return 1;
  207. }
  208.  
  209. stock pName ( playerid )
  210. {
  211. new
  212. GetName[ MAX_PLAYER_NAME ]
  213. ;
  214.  
  215. GetPlayerName ( playerid, GetName, sizeof ( GetName ) );
  216.  
  217. return GetName;
  218. }
  219.  
  220. stock DB_Escape ( text[ ] )
  221. {
  222. new
  223. ret[ 80 * 2 ],
  224. ch,
  225. i,
  226. j;
  227. while ( ( ch = text[ i++ ] ) && j < sizeof ( ret ) )
  228. {
  229. if ( ch == '\'' ) //'
  230. {
  231. if ( j < sizeof ( ret ) - 2 )
  232. {
  233. ret[ j++ ] = '\'';
  234. ret[ j++ ] = '\'';
  235. }
  236. }
  237. else if ( j < sizeof ( ret ) )
  238. {
  239. ret[ j++ ] = ch;
  240. }
  241. else
  242. {
  243. j++;
  244. }
  245. }
  246. ret[ sizeof ( ret ) - 1 ] = '\0';
  247. return ret;
  248. }
  249.  
  250. stock IsValidPassword ( const numeric[ ] )
  251. {
  252. for ( new i = 0; numeric[ i ] != EOS; ++i )
  253. {
  254. switch ( numeric[ i ] )
  255. {
  256. case '0'..'9', 'A'..'Z', 'a'..'z': continue;
  257. default: return 0;
  258. }
  259. }
  260. return 1;
  261. }
Add Comment
Please, Sign In to add comment