F1N4L_

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

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