Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* ______________________________________
- |__SISTEMA_BASE_DE_REGISTRO_&_LOGIN__|
- |______________BY_F1N4L______________|
- |_____________05_03_2016_____________|
- |_______________v_0.3z_______________|
- */
- #include < a_samp > // By SA:MP Team
- #include < sscanf2 > // By Y_Less
- #include < zcmd > // By Zeex
- #undef MAX_PLAYERS // Desabilita a função nativa MAX_PLAYERS
- #define MAX_PLAYERS ( 50 ) // Habilita a função nativa MAX_PLAYERS e atribui um valor a ela
- #define DIALOG_LOGIN ( 100 ) // Atribui o valor da DIALOG_LOGIN
- #define DIALOG_REGISTER ( 101 ) // Atribui o valor da DIALOG_REGISTER
- #define _UDB_ "Server.db" // Nome do Banco de Dados a ser criado na pasta Scriptfiles
- #define USER_DB "Users" // Atribui o nome da TABLE
- enum pInfo // Define o enum
- {
- pID, // Var ID
- tkNOME[ MAX_PLAYER_NAME ], // Var NOME
- pSENHA[ 129 ], // Var SENHA
- pADMIN, // Var ADMIN
- bool:pLOGADO // Bool LOGADO (true/false)
- };
- new
- USER[ MAX_PLAYERS ][ pInfo ] // Var + enum
- ;
- new
- DB: User_Database // Nome da Var do Banco de Dados
- ;
- public OnFilterScriptInit ( )
- {
- new
- Query_User [ 500 ]
- ;
- if ( ( User_Database = db_open ( _UDB_ ) ) == DB:0 ) // Abre o banco de dados, se a caso não encontrá-lo, fecha o executável
- {
- SendRconCommand ( "exit" ); // Fecha o samp-server.exe
- }
- else
- {
- strcat ( Query_User, "CREATE TABLE IF NOT EXISTS `"USER_DB"`" ); // Cria a TABLE com o nome que você definiu no macro
- strcat ( Query_User, "(`ID` INTEGER PRIMARY KEY AUTOINCREMENT," ); // Cria a coluna ID e define-a para aumentar de 1 em 1
- strcat ( Query_User, "`NOME` TEXT," ); // Cria a coluna NOME
- strcat ( Query_User, "`SENHA` TEXT," ); // Cria a coluna SENHA
- strcat ( Query_User, "`ADMIN` NUMERIC )" ); // Cria a coluna ADMIN
- db_query ( User_Database, Query_User ); // Função usada para executar uma consulta SQL em um banco de dados SQLite aberto.
- }
- return 1;
- }
- public OnFilterScriptExit ( )
- {
- db_close ( User_Database ); // Nunca esqueça de fechar o Banco de Dados
- return 1;
- }
- public OnPlayerConnect ( playerid )
- {
- new Reset[ pInfo ];
- USER[ playerid ] = Reset; // Reseta os valores do enum
- new
- Query_User [ 200 ],
- DBResult: Resultado // Var de resultado da pesquisa
- ;
- format ( Query_User, sizeof ( Query_User ) , "SELECT `SENHA` FROM `"USER_DB"` WHERE `NOME` = '%s'", DB_Escape ( pName ( playerid ) ) ); // SELECIONA a coluna SENHA na TABLE 'USERS' ONDE NOME = Nome Do Player Conectado
- Resultado = db_query ( User_Database, Query_User ); // Função usada para executar uma consulta SQL em um banco de dados SQLite aberto.
- if ( db_num_rows ( Resultado ) ) // Condicional que verifica se o player existe no Banco de Dados (Nesta condicional existe)
- {
- db_get_field_assoc ( Resultado, "SENHA", USER[ playerid ][ pSENHA ], 129 ); // Geta o valor da SENHA e a define na Variável. OBS: Se usar Whirlpool é obrigatório o uso de 129 células
- 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" );
- }
- else // Caso não exista o player determinado, retornará a dialog REGISTRO
- {
- ShowPlayerDialog ( playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Painel de Registro", "Bem Vindo ao nosso servidor\nRegistre-se para salvar seu dados:", "REGISTRAR","SAIR" );
- }
- db_query ( User_Database, Query_User ); // Essa função é usada para executar uma consulta SQL em um banco de dados SQLite aberto.
- db_free_result ( Resultado ); // Libera o resultado da memória alocada a partir de db_query.
- return 1;
- }
- public OnPlayerDisconnect ( playerid, reason )
- {
- new
- Query_User [ 500 ]
- ;
- format ( Query_User, sizeof ( Query_User ) , "UPDATE `"USER_DB"` SET `ADMIN` = '%i' WHERE `NOME` = '%s'", USER[ playerid ][ pADMIN ], DB_Escape ( pName ( playerid ) ) );
- db_query ( User_Database, Query_User ); // Função usada para executar uma consulta SQL em um banco de dados SQLite aberto.
- new Reset[ pInfo ];
- USER[ playerid ] = Reset; // Reseta os valores do enum
- return 1;
- }
- public OnDialogResponse ( playerid, dialogid, response, listitem, inputtext[ ] )
- {
- if ( dialogid == DIALOG_REGISTER )
- {
- if ( response )
- {
- if ( !IsValidPassword ( inputtext ) ) // Checa se o player digitou caracteres válidos
- {
- ShowPlayerDialog ( playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Painel de Registro", "Bem Vindo ao nosso servidor\nRegistre-se para salvar seu dados:", "REGISTRAR","SAIR" );
- SendClientMessage ( playerid, -1, "Utilize apenas LETRAS e NÚMEROS." );
- return 0;
- }
- if ( strlen ( inputtext ) < 3 || strlen ( inputtext ) > 20 ) // Checa o tamanho da senha
- {
- ShowPlayerDialog ( playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Painel de Registro", "Bem Vindo ao nosso servidor\nRegistre-se para salvar seu dados:", "REGISTRAR","SAIR" );
- SendClientMessage ( playerid, -1, "A senha deve ser entre 3-20." );
- return 0;
- }
- new
- Query_User [ 500 ]
- ;
- format ( Query_User, sizeof ( Query_User ) , "INSERT INTO `"USER_DB"` ( `NOME` ) VALUES ( '%s' ) ", DB_Escape ( pName ( playerid ) ) ); // Insere um Linha no Banco de Dados e seta a Coluna NOME com o nome do player
- db_query ( User_Database, Query_User ); // Função usada para executar uma consulta SQL em um banco de dados SQLite aberto.
- format ( Query_User, sizeof ( Query_User ) , "UPDATE `"USER_DB"` SET `SENHA` = '%s' WHERE `NOME` = '%s'", DB_Escape ( inputtext ) , DB_Escape ( pName ( playerid ) ) ); // Atualiza a mesma Linha, porém seta a coluna SENHA com a senha Criptografada
- db_query ( User_Database, Query_User ); // Função usada para executar uma consulta SQL em um banco de dados SQLite aberto.
- format ( Query_User, sizeof ( Query_User ) , "UPDATE `"USER_DB"` SET `ADMIN` = '0' WHERE `NOME` = '%s'", DB_Escape ( pName ( playerid ) ) ); // Atualiza a mesma Linha, porém seta a coluna ADMIN para o valor de 0 (Zero)
- db_query ( User_Database, Query_User ); // Função usada para executar uma consulta SQL em um banco de dados SQLite aberto.
- USER[playerid][pLOGADO] = true;
- SendClientMessage ( playerid, -1, "Sua conta foir criada com sucesso e você foi automaticamente logado!" );
- }
- else
- {
- Kick(playerid); // Caso o player não se registrar será kickado
- }
- }
- if ( dialogid == DIALOG_LOGIN )
- {
- if ( response )
- {
- new
- Query_User[ 500 ],
- DBResult: Resultado
- ;
- if ( strcmp ( inputtext, USER[ playerid ][ pSENHA ], false ) == 0 ) // Verifica se a senha Criptografada é igual à senha digitada. (Nesta condicional, é igual)
- {
- format ( Query_User, sizeof ( Query_User ) , "SELECT * FROM `"USER_DB"` WHERE `NOME` = '%s'", DB_Escape ( pName ( playerid ) ) ); // Seleciona TODAS as colunas do Banco de Dados de determinado player
- Resultado = db_query ( User_Database, Query_User ); // Função usada para executar uma consulta SQL em um banco de dados SQLite aberto.
- if ( db_num_rows ( Resultado ) ) // Condicional que verifica se o player existe no Banco de Dados (Nesta condicional existe)
- {
- db_get_field_assoc ( Resultado, "ID", Query_User, 3 ); // Pega o valor da TABLE 'ID'
- USER[ playerid ][ pID ] = strval ( Query_User ); // Seta o valor de 'ID' para a Var 'pID'
- db_get_field_assoc ( Resultado, "ADMIN", Query_User, 6 ); // Pega o valor da TABLE 'ADMIN'
- USER[ playerid ][ pADMIN ] = strval ( Query_User ); // Seta o valor de 'ADMIN' para a Var 'pADMIN'
- }
- db_query ( User_Database, Query_User ); // Função usada para executar uma consulta SQL em um banco de dados SQLite aberto.
- db_free_result ( Resultado ); // Libera o resultado da memória alocada a partir de db_query.
- SendClientMessage ( playerid, -1, "Você logou com sucesso!" );
- USER[playerid][pLOGADO] = true; // Seta o jogador como LOGADO
- }
- else // Caso o player erra a senha
- {
- SendClientMessage ( playerid, -1, "Você errou a senha!" );
- 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" );
- }
- }
- else
- {
- Kick(playerid); // Kicka o player se ele não logar
- }
- }
- return 1;
- }
- CMD:setlevel ( playerid, params[] ) // Exemplo de comando
- {
- new
- Target,
- Level,
- String[129]
- ;
- if ( sscanf ( params, "ui", Target, Level ) ) return SendClientMessage(playerid, -1, "/SETLEVEL [ID] [LEVEL]");
- format ( String, sizeof ( String ), "Admin %s setou level admin %i para o player %s", pName ( playerid ), Level, pName ( Target ) );
- SendClientMessageToAll(-1, String);
- format ( String, sizeof ( String ), "Admin %s setou seu level admin para %i", pName ( playerid ), Level );
- SendClientMessageToAll(-1, String);
- USER[playerid][pADMIN] = Level;
- return 1;
- }
- stock pName ( playerid ) // Stock para Getar o nome do player
- {
- new
- GetName[ MAX_PLAYER_NAME ]
- ;
- GetPlayerName ( playerid, GetName, sizeof ( GetName ) );
- return GetName;
- }
- stock DB_Escape ( text[ ] ) // Stock obrigatória para guardar o valor das srings no Banco de Dados
- {
- new
- ret[ 80 * 2 ],
- ch,
- i,
- j;
- while ( ( ch = text[ i++ ] ) && j < sizeof ( ret ) )
- {
- if ( ch == '\'' ) //'
- {
- if ( j < sizeof ( ret ) - 2 )
- {
- ret[ j++ ] = '\'';
- ret[ j++ ] = '\'';
- }
- }
- else if ( j < sizeof ( ret ) )
- {
- ret[ j++ ] = ch;
- }
- else
- {
- j++;
- }
- }
- ret[ sizeof ( ret ) - 1 ] = '\0';
- return ret;
- }
- stock IsValidPassword ( const numeric[ ] ) // Checa se é número
- {
- for ( new i = 0; numeric[ i ] != EOS; ++i )
- {
- switch ( numeric[ i ] )
- {
- case '0'..'9', 'A'..'Z', 'a'..'z': continue;
- default: return 0;
- }
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment