F1N4L_

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

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