SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

Participe do fórum, é rápido e fácil

SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 12 Anos online por você.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Chegou o novo tema 6.5.5 - SSGamers - Servidores online de qualidade - Aproveite e entre para nossa comunidade, inscreva-se já! - Ouça nossa web radio - Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

    [Tutorial] SQLite: Começando

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


    Steam Steam : WeslleySSGames
    Zello : WeslleySSGames
    Mensagens : 11381
    Moedas : 1031993
    Data de inscrição : 06/10/2011
    Idade : 28
    Localização : Brasil

    [Tutorial] SQLite: Começando Empty [Tutorial] SQLite: Começando

    Mensagem por Weslley_Script Sex 7 Abr 2023 - 9:45

    Aprendendo conceitos básicos de SQLite.


    • Í ndice:
      Veja o que será exatamente neste tópico.
      [list="box-sizing: border-box;"]
    • Introdução ao SQLite
      • Oque é, e sua Histуria
      • Como conectar com o banco de dados.
      • Criando meu banco de dados!


    • Conhecendo as funções do SQLite
    • Atualizando, selecionando, inserindo e excluindo dados da tabela.
    • Perguntas & Respostas
    • Sistema de login e registro em SQL
    • Conclusões finais


    [/list]


    • I ntrudução ao SQLite
      • Oque é, e sua Histуria
        SQLite é uma biblioteca em linguagem C que implementa um banco de dados SQL embutido. Programas que usam uma biblioteca SQLite podem ter acesso a um banco de dados SQL sem executar um processo SGBD separado. SQLite não é uma biblioteca cliente usada para conectar com um grande servidor de banco de dados, mas sim o próprio servidor. A biblioteca SQLite lк e escreve diretamente para e do arquivo do banco de dados no disco. O uso do SQLite é recomendado onde a simplicidade da administração, implementação e manutenção são os mais importantes que recursos incontáveis ​​que SGBDs mais voltados para aplicativos possivelmente implementam. As situações onde a simplicidade é a melhor escolha são muito mais frequentes do que pode-se imaginar. E você sabia que SQLite, faz quase, ou até o mesmo papel que o MySQL? Isto porque o SQLite foi criado,SQL ite, ou MySQL como tantos conhecem [Tutorial] SQLite: Começando Biggrin. SQL foi desenvolvido originalmente no início dos anos 70 nos laboratórios da IBM em San Jose, dentro do projeto System R, que tinha por objetivo demonstrar a viabilidade da implementação do modelo relacional proposto por EF Codd. O nome original da linguagem era SEQUEL, acrônimo para "Structured English Query Language", vindo de fato de, até hoje, a sigla, em inglês, ser comumente pronunciada "síquel" ao invés de "é-kié-él", letra a letra. No entanto, em português, a pronúncia mais corrente é a letra a letra: "йsse-quê-éle". Então gente, vamos começar a falar certo o correto é 'ésse-quê-éle'.

      • Como conectar com o banco de dados.
        No sa-mp para ter acesso às funções do SQLite nativo, basta adicionar a include padrão do sa-mp (a_samp) , pois a mesma já carrega com sigo mesmo a a_sampdb, que é responsável pelas funções do SQLite.
        Entrada:

        PHP como:
        Código:
        #include <a_samp> 
        Porém, além de incluir a a_samp precisamos também fazer a 'conexão' com o banco de dados.

        PHP como:
        Código:
        #include <a_samp>
        main(){}
        new DB:Connect;
        public OnGameModeInit()
        {
            Connect = db_open("mydb.db");  
            return 1;

        Com isto já podemos começar a usar o SQLite da forma mais básica possível.

      • Criando meu banco de dados!
        Para criarmos nosso banco de dados eu optei por usar um programa muito bom, e que muitos usam o SQLite Browser que é um programa muito bom para manipulação, e que eu uso e recomendo. Com ele você pode deletar, inserir e atualizar.. Vamos lá entгo, acompanhe o vídeo abaixo!
        [ame="https://www.youtube.com/watch?v=q-X4jLNH3i8"]Tutorial..[/ame]

        Caso queira aprender a criar seu banco de dados, manualmente sem ajuda de programas veja meu outro tutorial que © relacionado a exatamente isso, veja .



    • C onhecendo as funções do SQLite:
      Para você poder usar o SQLite em seu servidor, certamente terá funções na qual você irá utilizar para abrir, fechar um db e até mesmo inserir, atualizar, selecionar dados de uma tabela. Hoje, conheceremos algumas delas!
      • db_open: Como já vimos acima, é usado para abrir uma conexão com um banco de dados SQLite. O modo de uso, é muito simples e nós já vimos, porém vamos também aprender a aprimorar a nossa conexão, veja como:
        PHP como:
        Código:
        #include <a_samp>
        main(){}
        new DB:Connect;
        public OnGameModeInit()
        {
            if((Connect = db_open("mydb.db")) == DB:0)
            {
                return SendRconCommand("exit");
            }
            return 1;

        na função acima, verifique se a conexão foi efetuada com sucesso, e se isso for igual a falso, ou seja.. se a conexão falhar ao conectar o servidor será desligado.

      • db_close: Se temos uma função para abrir uma conexão, certamente teremos outra para fechar essa mesma conexão. A db_close, ficará responsável em fechar um banco de dados SQLite que foi aberto com db_open, como nуs fizemos acima...entгo usando o mesmo handle de conexгo(Connect) fecharemos essa conexгo..
        PHP como:
        Código:
        public OnGameModeExit()
        {
            db_close(Connect);
            return 1;

        lembrando, que nгo podemos fechar algo que nгo foi aberto, ou ao menos nem criado.

      • db_query: Essa, serб sem dъvidas a funзгo mais usado por vocк. Pois será com ela que você terá todas as possibilidades de inserir, atualizar, deletar e tudo o que o SQLite oferece. Vamos ver um exemplo simples dessa função:
        PHP como:
        Código:
        new DB:db_handle;
        // ...
        public OnGameModeInit()
        {
            // Cria uma conexгo com o banco de dados.
            if((db_handle = db_open("example.db")) == DB:0)
            {
                // Printa um erro no console caso o banco de dados nгo seja encontrado.
                print("Nao foi possivel encontrar \"example.db\".");
                SendRconCommand("exit");
            }
            else
            {
                // Se o banco foi encontrado, gera uma mensagem de sucesso.
                print("Conecao com \"example.db\" efetuada!");
            }
            // ...
            return 1;
        }
         
        public OnGameModeExit()
        {
            // Fecha a conexгo com o banco de dados...
            db_close(db_handle);
            // ...
            return 1;
        }
          
        public OnPlayerSpawn(playerid) 

            // Declara query e p_name.
            static query[98], p_name[MAX_PLAYER_NAME+1]; 
          
            // Guarda o nome do jogador na vбriavel p_nome.
            GetPlayerName(playerid, p_name, sizeof p_name); 
          
            // Formata a "query" 
            format(query, sizeof query, "INSERT INTO `spawn_log` (`PlayerID`,`PlayerName`) VALUES (%d,'%s')", playerid, p_name); 
          
            // Libera o resultado e insere um log na tabela 'spawn_log'..
            db_free_result(db_query(db_handle, query)); 
            // ... 
            return 1; 

        Vamos a outro exemplo.
        PHP como:
        Código:
        //Selecionando.
        db_query(db_handle, "SELECT * FROM `contas` WHERE `nome`='HaRdiiZin'");
        // Selecionar tudo da tabela contas onde o nome for HaRdiiZin.
        //Atualizar.
        db_query(db_handle, "UPDATE `contas` SET `nome`='HaRdiiZola' WHERE `nome`='HaRdiiZin'");
        // Atualizar a tabela colunas e alterar o nome para HaRdiiZola onde o nome for HaRdiiZin. 


      • db_free_result: Essa função, libera um resultado da memória alocada a partir de db_query. O modo de uso é suuuuper fácil, veja você mesmo: Vamos supor que estamos criando um sistema de login & registro para nosso servidor, e precisamos checar se o player já é registrado ou não.. faríamos da seguinte forma:
        PHP como:
        Código:
        //... 
        public OnPlayerConnect(playerid)
        {
            // Declara nome e query.
            new nome[MAX_PLAYERS], query[128], DBResult:Resultado;
            
            // Guarda o nome do player na vбriavel nome.
            GetPlayerName(playerid, nome, sizeof nome);
            // Formata a query.
            format(query, sizeof query, "SELECT * FROM `contas` WHERE `nome`='%q'", nome);
            // Seleciona tudo da tabela contas que conter o nome do player.
            Resultado = db_query(db_handle,query);
            // Retorna o nъmero de linhas da query, nesse caso se nгo houver nenhuma linha signfica que o player nгo tem uma conta no servidor. 
            if(db_num_rows(Resultado) == 0) 
            {
                // Nгo tem uma conta.
            }
            else 
            {
                // Tem uma conta.
            }
            db_free_result(Resultado);
            return 1;

        Explicação: Para este caso, a gente precisou salvar o resultado da consulta para saber se o jogador era registrado e depois liberamos esse resultado usando db_free_result. Também, utilizamos a db_num_rows, que a gente vai falar já,já para que serve..

      • db_num_rows: Essa função é responsável por retornar o número de linhas de uma consulta, e deve ser usado em conjunto com a db_free_result. Veja como usa-la:
        PHP como:
        Código:
        //... 
        public OnPlayerConnect(playerid)
        {
            // Declara nome e query.
            new nome[MAX_PLAYERS], query[128], DBResult:Resultado;
            
            // Guarda o nome do player na vбriavel nome.
            GetPlayerName(playerid, nome, sizeof nome);
            // Formata a query.
            format(query, sizeof query, "SELECT * FROM `contas` WHERE `nome`='%q'", nome);
            // Seleciona tudo da tabela contas que conter o nome do player.
            Resultado = db_query(db_handle,query);
            // Retorna o nъmero de linhas da query, nesse caso se nгo houver nenhuma linha signfica que o player nгo tem uma conta no servidor. 
            if(db_num_rows(Resultado) == 0) 
            {
                // Nгo tem uma conta.
            }
            else 
            {
                // Tem uma conta.
            }
            db_free_result(Resultado); 
        Vamos entender melhor:
        • PHP como:
          Código:
              // Formata a query.
              format(query, sizeof query, "SELECT * FROM `contas` WHERE `nome`='%q'", nome);
              // Seleciona tudo da tabela contas que conter o nome do player.
              Resultado = db_query(db_handle,query); 
          Aqui criamos nossa query, o que você pode não ter percebido й que antes da função db_query utilizamos a vбriavel Resultado, que foi declarada lá em cima, junto com a query.. Para criá-la, basta usar por exemplo: "new DBResult:Resultado ;";

        • PHP como:
          Código:
          if(db_num_rows(Resultado) == 0) 
          Aqui fazemos a verificação, esperando se o número de linhas retornadas da consulta é igual a zero. Se for, é porque o jogador não tem uma conta.

        • PHP como:
          Código:
          db_free_result(Resultado); 
          Liberamos o resultado da memória alocada.



      • db_get_field_assoc: Obtem o conteъdo do campo com o nome especificado, lembrando que há uma funзгo bastante semelhante, a db_get_field porйm neste tutorial nгo comentбremos sobre ela.

        PHP como:
        Código:
        public OnPlayerConnect(playerid)
        {
            // Declara nome e query.
            new nome[MAX_PLAYERS], query[128], DBResult:Resultado;
            
            // Guarda o nome do player na vбriavel nome.
            GetPlayerName(playerid, nome, sizeof nome);
            // Formata a query.
            format(query, sizeof query, "SELECT * FROM `contas` WHERE `nome`='%q'", nome);
            // Seleciona tudo da tabela contas que conter o nome do player.
            Resultado = db_query(db_handle,query);
            // Retorna o nъmero de linhas da query, nesse caso se nгo houver nenhuma linha signfica que o player nгo tem uma conta no servidor. 
            if(db_num_rows(Resultado) == 0) 
            {
                // Nгo tem uma conta.
                ShowPlayerDialog(...
            }
            else 
            {
                // Tem uma conta.
                new field[10];
                db_get_field_assoc(Resultado, "level", field, sizeof(field));
                level = strval(field);
            }
            db_free_result(Resultado); 

        Certo, agora vamos entender o código do exemplo:
        • PHP como:
          Código:
          new field[10];
                  db_get_field_assoc(Resultado, "level", field, sizeof(field)); 
          Aqui declaramos um campo variável com 10 células, e usamos nossa função para pegar os dados da coluna nível.

        • PHP como:
          Código:
          level = strval(field); 
          Nessa parte, em nível variável que foi usado somente de exemplo, inserimos nela o valor do campo. Ai você deve estar entusiasmado, mais porque eu já não fiz isso direto, assim poupando declarar um campo vбriavel? Bom, é porque se você tentar fazer desta maneira irá gerar um erro no seu código, por isso foi feito assim. Agora vamos a outro exemplo.

          PHP como:
          Código:
                  new field[10], Float:PosX[MAX_PLAYERS];
                  db_get_field_assoc(Resultado, "PosicaoX", field, sizeof(field));
                  PosX[playerid] = float(strval(field)); 


        E assim terminamos de analisar algumas das funções do SQLite. Lembrando que este tutorial foi feito exclusivamente para novos, e por isso não foi exatamente algumas funções do SQL, se você quiser conferir todas elas recomendo que veja a wiki-samp.



    • Atualizando , selecionando, inserindo e excluindo dados da tabela.
      Vamos então para as instruções que você usa e muito, muito mesmo. Vamos começar com a de inserir a INSERT, com ela você pode inserir dados em sua tabela. Mas antes, vamos entender o que é tabela, coluna, e dados. Tabela, é como se fosse um braço, já as coroas seriam suas gavetas, e os dados, obviamente, seria oque há dentro dessas gavetas.. pensando desta maneira, tenho certeza que você nunca irá se esquecer.. Então vamos lá. Para você usar qualquer uma das instruções que vou passar a baixo, você deve a função db_query, que é uma nativa que vem com a a_sampdb que nós já vimos como instala-la. A linguagem SQL é dividida em subconjuntos de acordo com as operações que queremos controlados sobre um banco de dados, porém veremos algumas.. Vamos começar com a Linguagem de Manipulação de Dados.
      • Linguagem de Manipulação de Dados.
        DML(sigla em inglês) é um subconjunto da linguagem SQL que é utilizada para realizar inclusões, consultas, alterações e exclusões de dados presentes em registros, dentro dela temos as instruções INSERT, UPDATE e DELETE.
        • INSERT
          A insert, como proprio nome já diz inserir um dado em seu banco de dados, ela é uma das sintaxes mais simples que tem, veja.
          PHP como:
          Código:
          db_query(db, "INSERT INTO `minhatabela` (`coluna01`, `coluna02`) VALUES ('0', 'HaRdiiZin')") 
          Vamos entender o código, como já vimos estamos usando a tabela que criamos no vídeo que eu deixei a cima, ensinando como criar um banco de dados. Nele, a gente define que a coluna03 seria do tipo AUTOINCREMENT, e por isso nгo precisaremos inserir-lo em nossa query, pois o sql jб faz isso sozinho e insere um novo id para a coluna. A coluna01, recebaá entгo o valor de 0, ea coluna02, o valor HaRdiiZin. Lembre-se, que isso é possível pois na hora que criarmos nosso banco de dados definimos que nossa coluna seria do tipo TEXT, caso contrário não poderíamos inserir, por isso é muito importante prestar muita atenção na hora de criar uma db. A sintaxe do INSERT, é muito básica.. vamos observar:
          PHP como:
          Código:
          INSERT INTO `tabela` (`colunas`) VALUES ('valores') 
          Sendo assim, a onde temos `tabela`, seria o nome da tabela que você gostaria de inserir um dado, nesse por exemplo, caso você quisesse adicionar um dado na tabela jogadores, bastaria fazer do seguinte modo: INSERT INTO `jogadores`.. continuando, teríamos que definir as colunas em que desejaríamos adicionar o dado, vamos supor que você está cadastrando um novo usuário, e gostaria de salvar o nick e a senha do mesmo. Então, ficaria do seguinte modo: INSERT INTO `jogadores` (`nick`, `senha`) e para complementar a sintaxe, temos a clausula VALUE que como o próprio nome já diz, seria os valores que esse 'comando' iria inserir na tabela jogadores, nas vozes nick e senha. O modo é muito simples: INSERT INTO `jogadores` (`nick`, `senha`) VALUES ('HaRdiiZin', 'higor123'). Entrada o resultado final, sério:
          PHP como:
          Código:
          INSERT INTO `jogadores` (`nick`, `senha`) VALUES ('HaRdiiZin', 'higor123') 
          que retornaria para gente, uma inserção perfeita na mesa jogadores, inserindo nas colunas nick e senha, HaRdiiZin e higor123 respectivamente.

          -
          Lembrando, que é o modo básico de como usar a instrução INSERT, se você quiser se aprofundar no SQL recomendo que aguarde meu próximo tutorial(se tiver) ou que saia a procura de alguns pela internet não relacionados a SA-MP.

        • DELETE
          A instrução delete, como o próprio nome já diz deleta algum valor de sua tabela, eo modo de uso é extremamente fácil.
          PHP como:
          Código:
          DELETE * FROM `minhatabela` WHERE `coluna01` = 'HaRdiiZin' 
          e para usa-la, ela também deve ser colocada dentro da db_query do seguinte modo.
          PHP como:
          Código:
          public OnPlayerConnect(playerid)
          {
              db_query(db, "DELETE * FROM `minhatabela` WHERE `coluna01` = 'HaRdiiZin'");
              return 1;



        • UPDATE
          Um instrutor update, é responsável por fazer a atualização dos dados de sua tabela, basicamente para usa-la você sу precisara informar a tabela que quer atualizar, os dados que serão atualizados e opcionalmente onde ela teria efeito.

          PHP como:
          Código:
          public OnPlayerConnect(playerid)
          {
              // Declara nome e query. 
              new nome[MAX_PLAYERS], query[128]; 
               
              // Guarda o nome do player na vбriavel nome. 
              GetPlayerName(playerid, nome, sizeof nome); 
              format(query, sizeof query, "UPDATE `contas` SET `ultlogin`='%d' WHERE `nome`='%q'", nome, gettime());
              db_query(db, query);
              return 1;

          Dessa maneira, faríamos que cada vez que o jogador logasse no servidor fosse atualizado a último dado de login dele. Simples nгoй?



      • Linguagem de Consulta de Dados
        Embora tenha apenas um comando, a DQL é a parte do SQL mais utilizada. O comando SELECT permite ao usuário especificar uma consulta ("query") como uma descrição do resultado desejado. Esse comando é composto de várias clбusulas e opзхes, permitindo elaborar consultas das mais simples аs mais elaboradas.
        • SELECT
          O Select é o principal comando usado em SQL para realizar consultas a dados pertencentes a uma tabela, vamos ver um exemplo simples de como usa-lo no peão.

          PHP como:
          Código:
          public OnPlayerConnect(playerid)
          {
              db_query(db, "SELECT * FROM `minhatabela` WHERE `coluna`='%s'");
              return 1;

          Mais para você entender melhor, vamos ver as cláusulas que o SELECT tem consigo:
          PHP como:
          Código:
                  FROM – Utilizada para especificar a tabela que se vai selecionar os registros.
                  WHERE – Utilizada para especificar as condiзхes que devem reunir os registros que serгo selecionados. 
          OBS: Sу veremos duas nesse tutorial, mais saнba que ha mais de duas!

          Então como você viu, e se você sabe um pouquinho de inglês já sabe que a FROM é o local, e WHERE é a mesma coisa que perguntar a onde.
          E para complementar um pouquinho mais o seu conhecimento, vamos ver também como usar Operadores Lógicos no SQL.
          PHP como:
          Código:
                  AND – E lуgico. Avalia as condiзхes e devolve um valor verdadeiro caso ambos sejam corretos.
                  OR  – OU lуgico. Avalia as condiзхes e devolve um valor verdadeiro se algum for correto.
                  NOT – Negaзгo lуgica. Devolve o valor contrбrio da expressгo. 
          Então vamos ver um exemplo usando o que a gente viu aqui.
          PHP como:
          Código:
                  // Exemplo 01:
                  db_query(db, "SELECT * FROM `contas` WHERE `nome` = 'HaRdiiZin' AND `senha` = 'teste'");
                  // Exemplo 02:
                  db_query(db, "SELECT * FROM `teste` WHERE `teste01` = '5' OR `teste02` = '6'"); 
          Mais uma coisa que precisamos entender, como você pode ter visto eu estou utilizando após o SELECT um asterisco (*) com este asterisco estamos indicando que iremos selecionar todas as vozes, porém podemos também selecionar apenas as vozes que quisermos da seguinte forma:
          PHP como:
          Código:
                  db_query(db, "SELECT `id, senha` FROM `contas` WHERE `nome` = 'HaRdiiZin'"); 






    • P erguntas & Respostas
      • Pergunta: Qual é o melhor MySQL ou SQLite? Qual a diferença de um ao outro?
        Resposta:
        Citar:



        Postado originalmente por Day_
        [Tutorial] SQLite: Começando Viewpost
        SQLite é local, MySQL pode não ser, é a maior diferença que eu vi.

        Agora no SA-MP, MySQL é mais rápido com o multi-threading, SQL

      • Pergunta: É possível fazer as mesmas coisas em SQLite do que em MySQL?
        Resposta:
        Citar:



        Postado originalmente por PT
        [Tutorial] SQLite: Começando Viewpost
        Sim atй incluнdo ligar a um website embora muitos falem sem saber. Só que claro com mysql e mais fácil ligar a um website.




    • Sistema de login e registro em SQL
      PHP como:
      Código:
      /*
                                           ___       ____        _________ ______               ______      /
                                          /         /    \   /\      |     |     \   |      |  /        |  /
                                                    |    |   \/      |     |         |      | |         | / 
                                          \______   |    |           |     |_____/   |      | |         |/\
                                                 \  |----|           |     |    \    |      | |         |  \ 
                                                    |    |   /\      |     |    |    |      | |         |   \
                                          _______/  |    |   \/      |     |    |    \______/  \______  |    |
                                                                  San Andreas Truck - 2015® 
      */
        
      /*
       *
       * Autor do gamemode: HaRdiiZin
       *   Data de criaзгo: 26/10/15
       *   Nome do projeto: San Andreas Truck
       *         Descriзгo: Este projeto foi iniciado somente para relembrar as funзхes do sqlite,
       *                    e tambйm porque eu iria iniciar um projeto de trucking mais acabei desistindo
       *                    dele por falta de tempo, jб que eu tenho outro projeto em andamento..
       *
       */
      /*
       *
       * O que hб no gamemode?
       * Como eu desisti nos primeiros dias de desenvolvimento, praticamente nem fiz nada no gamemode. Ele й uma base, uma base na qual
       * novatos na linguagem possam aprender mais, e tambйm conhecer o quгo ъtil й o sqlite no sa-mp e como podemos utiliza-lo, atualmente o gamemode
       * sу tem o sistema de login e registro, ambos funcionando 100% e salvando, admin, skin, e ъltima posiзгo. Espero que gostem!
       *
       */
      //--------------------------------------------------------------
      /* Includes necessбrias para o bom funcionamento do servidor. */
      #include <a_samp>
      #include <foreach>
      #include <mSelection>
      /* Configuraзхes gerais do servidor. */
      #define serverNome          "hostname San Andreas Truck | HaRdiiZin®"
      #define serverPass          "password 0"
      #define serverLang          "language Portugues - Brasil"
      #define serverMod           "by HaRdiiZin® - v0.1 R1"
      #define serverMap           "mapname San Andreas"
      #define serverSite          "weburl www.forum.sa-mp.com"
      #define     Kick(%0) SetTimerEx("Kicka", 100, false, "i", %0)
      #define     Ban(%0)  SetTimerEx("Bana", 100, false, "i", %0)
      /* Enums e outras vбriaveis.. */
      enum 
      {
          Branco   = 0xFFFFFFFF,
          Verde    = 0x29BF33FF,
          Vermelho = 0xFF0000FF, 
          Azul     = 0x1DA7B9FF,
          Rosa     = 0xB837C1FF,
          Roxo     = 0xB11BCFFF,
          Amarelo  = 0xFFF300FF,
          Laranja  = 0xFFC000FF
      };
      enum 
      {
          Login,
          Registro,
          SelectSkin
      };
      enum player_data
      {
          Admin,
          Skin,
          Float:px,
          Float:py,
          Float:pz,
          Float:pa
      };
      new DB:Connect;
      new pInfo[MAX_PLAYERS][player_data];
      /* Necessarias para o script */
      main() { print("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n> HaRdiiZin®"); }
      public OnGameModeInit()
      {
          LoadServerConfig();
          /* Carrega o banco de dados */
          Connect = db_open("sql.db"); // Abre o banco de dados..
          db_free_result(db_query(Connect, "CREATE TABLE IF NOT EXISTS `contas` (`id`    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,`nome`  TEXT NOT NULL,`senha` TEXT NOT NULL,`admin` INTEGER NOT NULL,`skin`  INTEGER NOT NULL,`px`    INTEGER NOT NULL,`py`    INTEGER NOT NULL,`pz`    INTEGER NOT NULL,`pa`    INTEGER NOT NULL);"));
              // Cria as tabelas caso elas nгo existam..
          /* Inserir uma conta na tabela, caso a AutoRegister esteja habilitada. */
          #if defined AutoRegister
              db_query(Connect, "INSERT INTO `contas` (`nome`, `senha`, `admin`, `skin`, `px`, `py`, `pz`, `pa`) VALUES ('HaRdiiZin', 'teste', '0', '4', '0.0', '0.0', '0.0', '0.0')");
                  //Somente para testes..
          #endif
          return 1;
      }
      public OnGameModeExit()
      {
          for(new i = 0; i < MAX_PLAYERS; i++) SavePlayer(i);
          return 1;
      }
      public OnPlayerConnect(playerid)
      {
          SetTimerEx("OnPlayerConnected", 100, false, "i", playerid);
          return 1;
      }
      forward OnPlayerConnected(playerid);
      public OnPlayerConnected(playerid)
      {
          /* Seta a camera do player e outras funзхes .*/
          TogglePlayerSpectating(playerid, true);
          InterpolateCameraPos(playerid, 1462.9407, -867.8122, 105.3706, 1322.1545, -956.1140, 136.5105, 10000, CAMERA_MOVE);
          InterpolateCameraLookAt(playerid, 1462.3888, -866.9811, 104.9506, 1322.5913, -955.2172, 136.1455, 10000, CAMERA_MOVE);
          /* Verifica se o player tem ou nгo uma conta, caso ele tenha ele serб jogado para dialog de login, se nгo ele irб para de registro. */
          new query[61], DBResult:Result;
          format(query, sizeof(query), "SELECT * FROM `contas` WHERE `nome` = '%s'", DB_Escape(GetName(playerid)));
          Result = db_query(Connect, query);
          if(db_num_rows(Result) == 0)
          {
              //Nгo tem uma conta..
              ShowPlayerDialog(playerid, Registro, DIALOG_STYLE_PASSWORD, "{FF0000}# {FFFFFF}San Andreas: Truck", "{FFFFFF}Digite uma senha segura para que vocк se registre.", "Registrar", "");
          }
          else
          {
              //Tem uma conta..
              ShowPlayerDialog(playerid, Login, DIALOG_STYLE_PASSWORD, "{FF0000}# {FFFFFF}San Andreas: Truck", "{FFFFFF}Digite a sua senha para logar-se", "Logar", "");
          }
          db_free_result(Result);
          return 1;
      }
      public OnPlayerDisconnect(playerid, reason)
      {
          SavePlayer(playerid);
          return 1;
      }
      public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
      {
          if(dialogid == Registro)
          {
              if(!response) Kick(playerid);
              new query[300];
              format(query, sizeof(query), "INSERT INTO `contas` (`nome`, `senha`, `admin`, `skin`, `px`, `py`, `pz`, `pa`) VALUES ('%s', '%s', '0', '0', '0.0', '0.0', '0.0', '0.0')", DB_Escape(GetName(playerid)), DB_Escape(inputtext));
              db_free_result(db_query(Connect, query));    
              pInfo[playerid][Admin] = 0;
              pInfo[playerid][Skin] = 0;
              pInfo[playerid][px] = 0.0;
              pInfo[playerid][py] = 0.0;
              pInfo[playerid][pz] = 0.0;
              pInfo[playerid][pa] = 0.0;
              new skins_array[] =
              {
                  20,23,26,27,29,32,33,34,37,43,44,45,49,51,52,57,58,59,60,68,72,73,81,96,97,101
              };
              ShowModelSelectionMenuEx(playerid, skins_array, 26, "Selecione sua skin", SelectSkin, 0.0, 0.0, 0.0);  
              return 1; 
          }
          if(dialogid == Login)
          {
              if(!response) Kick(playerid);
              new query[118], DBResult:Result;
              format(query, sizeof(query), "SELECT * FROM `contas` WHERE `nome` = '%s' AND `senha` = '%s'", DB_Escape(GetName(playerid)), DB_Escape(inputtext));
              Result = db_query(Connect, query);     
              if(db_num_rows(Result) == 0)
              {
                  SendClientMessage(playerid, Vermelho, "* Vocк errou sua senha!");
                  Kick(playerid);
                  return 0;
              }
              else 
              {
                  //Acertou a senha
                  new Field[20];
                  db_get_field_assoc(Result, "admin", Field, sizeof(Field));
                  pInfo[playerid][Admin] = strval(Field);
                  db_get_field_assoc(Result, "skin", Field, sizeof(Field));
                  pInfo[playerid][Skin] = strval(Field);
                  db_get_field_assoc(Result, "px", Field, sizeof(Field));
                  pInfo[playerid][px] = float(strval(Field));
                  db_get_field_assoc(Result, "py", Field, sizeof(Field));
                  pInfo[playerid][py] = float(strval(Field));
                  db_get_field_assoc(Result, "pz", Field, sizeof(Field));
                  pInfo[playerid][pz] = float(strval(Field));
                  db_get_field_assoc(Result, "pa", Field, sizeof(Field));
                  pInfo[playerid][pa] = float(strval(Field));
                  TogglePlayerSpectating(playerid, false);
                  LoadPlayer(playerid);
              }
              db_free_result(Result);        
              return 1;
          }
          return 1;
      }
      public OnPlayerModelSelectionEx(playerid, response, extraid, modelid)
      {
          if(extraid == SelectSkin)
          {
              if(!response)
              {
                  pInfo[playerid][Skin] = 4;
                  TogglePlayerSpectating(playerid, false);
                  LoadPlayer(playerid);
              }
              else 
              {
                  pInfo[playerid][Skin] = modelid;
                  TogglePlayerSpectating(playerid, false);
                  LoadPlayer(playerid);
              }
              return 1;
          }
          return 1;
      }
      /* Funзхes necessбrias */
      LoadPlayer(playerid)
      {
          SpawnPlayer(playerid);
          SetPlayerPos(playerid, pInfo[playerid][px], pInfo[playerid][py], pInfo[playerid][pz]);
          SetPlayerFacingAngle(playerid, pInfo[playerid][pa]);
          SetPlayerSkin(playerid, pInfo[playerid][Skin]);
          return 1;
      }
      SavePlayer(playerid)
      {
          new query[300], DBResult:Result;
          GetPlayerPos(playerid, pInfo[playerid][px], pInfo[playerid][py], pInfo[playerid][pz]);
          GetPlayerFacingAngle(playerid, pInfo[playerid][pa]);
          format(query, sizeof(query), "UPDATE `contas` SET `admin`='%d', `skin`='%d', `px`='%f', `py`='%f', `pz`='%f', `pa`='%f' WHERE `nome` = '%s'", 
              pInfo[playerid][Admin],
              GetPlayerSkin(playerid),
              pInfo[playerid][px],
              pInfo[playerid][py],
              pInfo[playerid][pz],
              pInfo[playerid][pa],
              DB_Escape(GetName(playerid)));
          Result = db_query(Connect, query);  
          db_free_result(Result);
          return 1;
      }
      LoadServerConfig()
      {
          new input[40]; // Cria a variavel com 40 cйlulas necessбrias..
          /* Setando as configuraзхes de nome, etc */
          format(input, sizeof(input), serverNome); // Seta o hostname do servidor.
          SendRconCommand(input);
          format(input, sizeof(input), serverPass); // Seta a senha do servidor.
          SendRconCommand(input);
          format(input, sizeof(input), serverLang); // Seta a linguagem que o servidor terб.
          SendRconCommand(input);
          format(input, sizeof(input), serverMod); // Seta o mode do servidor.
          SetGameModeText(input);
          format(input, sizeof(input), serverMap); // Seta o nome do mapa do servidor..
          SendRconCommand(input);
          format(input, sizeof(input), serverSite); // Seta o nome do mapa do servidor..
          SendRconCommand(input);
          #undef serverNome
          #undef serverPass
          #undef serverLang
          #undef serverMod
          #undef serverMap
          #undef serverSite
          /* Seta as configuraзхes para como o GTA deverб se portar em relaзгo ao servidor. */
          ShowPlayerMarkers(PLAYER_MARKERS_MODE_OFF); 
          ShowNameTags(1); 
          AllowAdminTeleport(1);
          UsePlayerPedAnims();
          DisableInteriorEnterExits(); 
          EnableStuntBonusForAll(true);
          LimitGlobalChatRadius(15.0);  
          EnableTirePopping(1);
          //ManualVehicleEngineAndLights();
          return 1;
      }
      GetName(playerid)
      {
          new
          gName[MAX_PLAYER_NAME + 1];
          GetPlayerName(playerid, gName, sizeof(gName));
          return gName;
      }
      forward Kicka(p); public Kicka(p)
      {
          #undef Kick
          Kick(p);
          #define Kick(%0) SetTimerEx("Kicka", 100, false, "i", %0)
          return 1;
      }
      forward Bana(p); public Bana(p)
      {
          #undef Ban
          Ban(p);
          #define Ban(%0) SetTimerEx("Bana", 100, false, "i", %0)
          return 1;
      }
      DB_Escape(text[])
      {
              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;
              // '''

      Tópico original.


    • C onclusхes finais
      Espero que consiga entender o tutorial, eu chorei com muito carinho para você! Bons estudos para você, se tiver qualquer erro por favor me reporte.

      Agradecimentos a:
      • Wikipedia
      • Wiki-samp
      • EditPawn por dar sugestões do que adicionar.
      • HaRdiiZin





    [Tutorial] SQLite: Começando D07Xwqb
    [Tutorial] SQLite: Começando Yjab9HN

      Data/hora atual: Dom 19 maio 2024 - 6:04