SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese > Lançamentos/Releases

Reply
 
Thread Tools Display Modes
Old 30/06/2015, 10:01 PM   #1
Cleyson
Gangsta
 
Cleyson's Avatar
 
Join Date: Feb 2014
Location: Vitória - ES
Posts: 646
Reputation: 151
Default Criando um sistema em MySQL R41-4 [2017]

Criando um sistema em MySQL versão R41-4 [2017]


Ola amigos do forum samp!

Como vejo muitas pessoas tentando usar mysql resolvi fazer esse tutorial com a versão mais recente,
ja que os tutorias que temos na nossa board são todos antigos e ultrapassados. Espero que gostem
(Atualizado 16/02/2018- Versão R41-4)

1.0 Introdução

Irei ensinar nesse tutorial como utilizar o basico do MySQL, ou seja criaremos um simples sistema de salvamento.
Para estudo, salvaremos como exemplos Nome, Senha, Level, Dinheiro, Skin, Kills, Deaths e nivel de admin.

1.1 Banco de dados

Antes de tudo devemos criar nossa data base onde sera feito todo o nosso salvamento.
Temos esse video abaixo explicando como criar utilizando o WampServer.
Caso ainda não saiba criar uma data base por favor assista, mais somente ate a parte de criação da data base.
As tabelas por enquanto não nos interessam.

Video


1.2 Arquivos necessarios

libmariadb.dll > Na pasta do samp server.
log-core.dll > Na pasta do samp server.
mysql.dll ou .so para linux > Na pasta plugin
a_mysql.inc > Na pasta includes do pawno para copilar o script
Ambos encontrados no GitHub Aqui


1.3 Aplicação no script

Primeiramente iremos incluir o mysql no nosso script:

PHP Code:
#include <a_samp>
#include <a_mysql> 

Definimos as dialogs que iremos usar:

PHP Code:
#define DIALOG_REGISTRO     1
#define DIALOG_LOGIN        2 

Criamos as variaveis necessarias:

PHP Code:
new MySQL:IDConexao// Variavel responsavel pela ID da conexão com o host

enum pInfo // enumerador com variaveis necessarias para nosso salvamento.
{
    
pID,
    
pNome[24],
    
pIP[26],
    
pSenha[20],
    
pLevel,
    
pDinheiro,
    
pSkin,
    
pMatou,
    
pMorreu,
    
pAdmin,
     
bool:pLogado
};
new 
PlayerInfo[MAX_PLAYERS][pInfo]; 

Agora iremos usar defines para facilitar nossa conexao ao banco de dados:

PHP Code:
#define HOST      "localhost" // IP de acesso ao phpmyadmin no caso se voce estiver hospedando no pc deixei localhost
#define USUARIO   "root" // Usuario por padrão é root
#define DATABASE  "samp" // nome da database que voce criou.. como explicao no video acima
#define SENHA     ""   // não possue senha caso tenha usado o wamp 

Agora como eu disse acima não precisamos criar as tabelas como no video, podemos usar uma função do mysql mesmo:
WAMP versão 2.5

PHP Code:
    mysql_query(IDConexao"CREATE TABLE IF NOT EXISTS `Contas`(`ID`int AUTO_INCREMENT PRIMARY KEY, `Nome`varchar(24) NOT NULL,`Senha` varchar(20) NOT NULL,`Level` int(20) NOT NULL,`Matou` int(10) NOT NULL,`Morreu` int(10) NOT NULL,`Skin` int(10) NOT NULL,`Admin` int(10) NOT NULL,`Dinheiro` int(20) NOT NULL)"false); 
WAMP versão atual 3.0.6

PHP Code:
    mysql_query(IDConexao"CREATE TABLE IF NOT EXISTS `Contas`(`ID`int AUTO_INCREMENT PRIMARY KEY, `Nome`varchar(24) NOT NULL DEFAULT ' ',`Senha` varchar(20) NOT NULL DEFAULT ' ',`Level` int(20) NOT NULL DEFAULT 0,`Matou` int(10) NOT NULL DEFAULT 0,`Morreu` int(10) NOT NULL DEFAULT 0,`Skin` int(10) NOT NULL DEFAULT 0,`Admin` int(10) NOT NULL DEFAULT 0,`Dinheiro` int(20) NOT NULL DEFAULT 0)"false); 
Ou seja, CREATE TABLE IF NOT EXISTS "Criar a tabela se ela não existir":


PHP Code:
public OnGameModeInit()
{
    
IDConexao mysql_connect(HOSTUSUARIOSENHADATABASE); // faremos a conexão ao host com as informações definidas acima

    
mysql_query(IDConexao"CREATE TABLE IF NOT EXISTS `Contas`(`ID`int AUTO_INCREMENT PRIMARY KEY, `Nome`varchar(24) NOT NULL,`Senha` varchar(20) NOT NULL,`Level` int(20) NOT NULL,`Matou` int(10) NOT NULL,`Morreu` int(10) NOT NULL,`Skin` int(10) NOT NULL,`Admin` int(10) NOT NULL,`Dinheiro` int(20) NOT NULL)"false);

    if(
mysql_errno(IDConexao) != 0// Ultilizo essa maneira para saber se a conexão foi bem sucedida ou não
    
{
        print(
"Falha na conexão ao banco de dados Mysql");
        } else {
        print(
"Conexão ao banco de dado Mysql efetuada com sucesso");
    }
    return 
1;


PHP Code:
public OnGameModeExit()
{
    for(new 
0MAX_PLAYERSi++) SalvarDados(i); // Realizamos um loop na função Função SalvarDados para q salve todas as contas numa posivel queda do servidor
    
mysql_close(IDConexao); // Aqui fechamos a conexão com o host
    
return 1;


PHP Code:
public OnPlayerConnect(playerid)
{
    
GetPlayerName(playeridPlayerInfo[playerid][pNome], 24); // Pegamos o nome do player somente uma vez quando se conectar e formatamos na variavel.
    
GetPlayerIp(playeridPlayerInfo[playerid][pIP], 26); // Mesma coisa no IP
    
    
new Query[90]; // criamos uma variavel com 90 celulas
    
mysql_format(IDConexaoQuerysizeof(Query), "SELECT `Senha`, `ID` FROM `Contas` WHERE `Nome`='%s'"PlayerInfo[playerid][pNome]); // formatamos a Query selecionando SENHA e ID referente a tabela Contas Linha (NOME)
    
mysql_tquery(IDConexaoQuery"VerificarContas""i"playerid); // Faremos a consulta se a linha "Nome" existe sim ou não
    // Usaremos mysql_tquery para realizar a consulta na tabela e enviar o resultado para a callback.
    // o resultado sera enviado para callback VerificarContas
    
return 1;


Callback com o resultado da consulta acima

PHP Code:
forward VerificarContas(playerid);
public 
VerificarContas(playerid)
{
    new 
Dialog[240]; // Variavel para as dialogs com 240 celulas necessarias
    
    
if(cache_num_rows() > 0// aqui o resultado da consulta da OnPlayerConnect
    
{// Se a linha for maior que 1 "existir" ira chamar a dialog de login

        
cache_get_value(0"Senha"PlayerInfo[playerid][pSenha], 20); // Pegamos o valor da tabela e setamos a variavel pSenha que sera necessaria para o login
        
        
format(Dialogsizeof(Dialog),"{F8F8FF}Bem Vindo(a) Ao Servidor {058AFF}%s{F8F8FF}\n\nVocê ja tem uma Conta registrada\n\nDigite sua senha para Logar\n\nStatus: {1E90FF}Registrado{F8F8FF}\n\nIP: {058AFF}%s"PlayerInfo[playerid][pNome], PlayerInfo[playerid][pIP]);
        
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Registro"Dialog"Logar""Cancelar");

        } else { 
// se a linha não existir sera chamada a dialog de registro
        
        
format(Dialogsizeof(Dialog),"{F8F8FF}Bem Vindo(a) Ao Servidor {058AFF}%s{F8F8FF}\n\nVocê não tem uma Conta registrada\n\nDigite uma senha para Registrar\n\nStatus: {058AFF}N/A Registrado{F8F8FF}\n\nIP: {058AFF}%s"PlayerInfo[playerid][pNome], PlayerInfo[playerid][pIP]);
        
ShowPlayerDialog(playeridDIALOG_REGISTRODIALOG_STYLE_PASSWORD"Registro"Dialog"Registrar""Cancelar");
    }
    return 
1;


PHP Code:
public OnPlayerDisconnect(playeridreason)
{
    
SalvarDados(playerid); // Chamamos a função para salvar a conta do player que desconectar
    
return 1;


PHP Code:
public OnPlayerDeath(playeridkilleridreason)
{
    
PlayerInfo[playerid][pMorreu]++; // se o player morrer ira acrescentar +1 na variavel de morte
    
PlayerInfo[killerid][pMatou]++; // se o player matar ira acrescentar +1 ...
    
return 1;


Vamos para as dialogs

PHP Code:
public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    switch(
dialogid// usaremos um switch para as dialogs
    
{
        case 
DIALOG_REGISTRO:
        {
            if(!
response) return Kick(playerid); // se clicar em cancelar na dialog registro ira kickar o jogador
            
            
if(strlen(inputtext) < || strlen(inputtext) > 20// se a senha tiver menos de 4 ou mais de 20 caracteres ira retornar a dialog
            
{
                
SendClientMessage(playerid, -1"ERRO:{FFFFFF} A senha deve conter de 4 a 20 caracteres!");

                new 
Dialog[240]; // variavel da dialog registro
                
format(Dialogsizeof(Dialog),"{F8F8FF}Bem Vindo(a) Ao Servidor {058AFF}%s{F8F8FF}\n\nVocê não tem uma Conta registrada\n\nDigite uma senha para Registrar\n\nStatus: {058AFF}N/A Registrado{F8F8FF}\n\nIP: {058AFF}%s"PlayerInfo[playerid][pNome], PlayerInfo[playerid][pIP]);
                
ShowPlayerDialog(playeridDIALOG_REGISTRODIALOG_STYLE_PASSWORD"Registro"Dialog"Registrar""Cancelar");

                } else { 
// se não conter entre 4 e 20 caracteres ira retornar ao registro

                
new Query[100]; // variavel com 100 celulas para inserir as informações de registro na tabela
                
mysql_format(IDConexaoQuerysizeof(Query), "INSERT INTO `Contas`(`Nome`, `Senha`) VALUES ('%s', '%s')"PlayerInfo[playerid][pNome], inputtext); // formatamos a query para inserir na tabela do banco de dados
                
mysql_tquery(IDConexaoQuery"DadosRegistrados""i"playerid); // fazemos a consulta e enviamos o resultado para a callback DadosRegistrados
                // enviamos para a callback DadosRegistrados para fazer uma especia de  DEBUG, e tambem para darmos uma ID para a conta no banco de dados
                
RegistrarDados(playerid); // chamamos a função RegistrarDados para adicionar os valores nas variaveis do player
            
}
        }

        case 
DIALOG_LOGIN:
        {
            if(!
response) return Kick(playerid); // se clicar em cancelar na dialog login ira kickar o jogador
            
if(!strlen(inputtext)) // se não digitar nada ira retornar. 
            

                    
SendClientMessage(playerid, -1"ERRO:{FFFFFF} Você não digitou a senha !"); 
                
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Digite sua senha:""Digite sua senha abaixo para logar-se""Logar""Voltar");     
                return 
1;
            }
            if(!
strcmp(PlayerInfo[playerid][pSenha], inputtexttrue20)) //comparamos a variavel coma senha do player com a senha digitada
            
// se a comparação for correta vamos realizar a consulta para adicionar os valores contidos na tabela para as variaveis do player.

                
new Query[70];
                
mysql_format(IDConexaoQuerysizeof(Query), "SELECT * FROM `Contas` WHERE Nome='%s'"PlayerInfo[playerid][pNome]);
                
mysql_tquery(IDConexaoQuery"CarregarContas""d"playerid);
                
// Formatamos a Query realizamos a consulta e enviamos o resultado para a callback CarregarContas

                
} else {
                
// comparação sem sucesso ::
                
SendClientMessage(playerid, -1"ERRO:{FFFFFF} Senha incorreta !");
                
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Digite sua senha:""Digite sua senha abaixo para logar-se""Logar""Voltar");
            }
        }
    }
    return 
1;


Callback com o resultado da consulta da DIALOG_REGISTRO

PHP Code:
forward DadosRegistrados(playerid);
public 
DadosRegistrados(playerid)
{
    
PlayerInfo[playerid][pID] = cache_insert_id(); // Adicionamos o ID da conta do player
    
printf("-> Nova conta registrada ID: %d"PlayerInfo[playerid][pID]); // Printf no samp server para informar que a conta foi registrada com sucesso
    
return 1;


Callback com resultado da consulta da DIALOG_LOGIN

PHP Code:
forward CarregarContas(playerid);
public 
CarregarContas(playerid)
// Resultado da consulta do login, adicionamos os valores contidos na tabela para as variaveis do player
    
cache_get_value_int(0"ID"PlayerInfo[playerid][pID]);
    
cache_get_value_int(0"Admin"PlayerInfo[playerid][pAdmin]);
    
cache_get_value_int(0"Level"PlayerInfo[playerid][pLevel]);
    
cache_get_value_int(0"Matou"PlayerInfo[playerid][pMatou]);
    
cache_get_value_int(0"Morreu"PlayerInfo[playerid][pMorreu]);
    
cache_get_value_int(0"Skin"PlayerInfo[playerid][pSkin]);
    
cache_get_value_int(0"Dinheiro"PlayerInfo[playerid][pDinheiro]);
    
    
CarregarDados(playerid); // chamamos a função CarregarDados
    
return 1;


Agora vamos as funções que foram chamadas:

RegistrarDados:

PHP Code:
stock RegistrarDados(playerid)
{  
//Aqui adicionaremos os valores das variaveis que o player ira inicio no servidor
    
PlayerInfo[playerid][pDinheiro] = 5000// ou seja começara com 5000 reais
    
PlayerInfo[playerid][pAdmin] = 0// sem nivel de admin
    
PlayerInfo[playerid][pLevel] = 1// 1 level
    
PlayerInfo[playerid][pSkin] = 0// skin 0 CJ
    
PlayerInfo[playerid][pMorreu] = 0// ....
    
PlayerInfo[playerid][pMatou] = 0// ....
    
CarregarDados(playerid); //chamamos a função CarregarDados
    
return 1;


CarregarDados:

PHP Code:
stock CarregarDados(playerid)
// aqui carregaremos os ultimos dados das variaveis
    
PlayerInfo[playerid][pLogado] = true;
    
SetPlayerScore(playeridPlayerInfo[playerid][pLevel]); // setamos o level
    
GivePlayerMoney(playeridPlayerInfo[playerid][pDinheiro]); // o dinheiro
    
SetSpawnInfo(playerid0PlayerInfo[playerid][pSkin], 1958.331343.1215.36269.1500000);
    
SpawnPlayer(playerid); // forçamos o player a spawnar nas cordenas acima com as infos setadas nas variaveis
    
return 1;


SalvarDados:

PHP Code:
stock SalvarDados(playerid)
{
    
//if(PlayerInfo[playerid][pLogado] == false) return 1; // se o player nao estiver logado não ira salvar nada
    
PlayerInfo[playerid][pDinheiro] = GetPlayerMoney(playerid);
    new 
Query[350]; // variavel com 350 celulas para salvamento
    
mysql_format(IDConexaoQuerysizeof(Query), "UPDATE `Contas` SET `Nome`='%s', `Level`=%d, `Admin`=%d, `Skin`=%d, `Matou`=%d, `Morreu`=%d, `Dinheiro`=%d WHERE `ID`=%d",
    
PlayerInfo[playerid][pNome],
    
PlayerInfo[playerid][pLevel],
    
PlayerInfo[playerid][pAdmin],
    
PlayerInfo[playerid][pSkin],
    
PlayerInfo[playerid][pMatou],
    
PlayerInfo[playerid][pMorreu],
    
PlayerInfo[playerid][pDinheiro],
    
PlayerInfo[playerid][pID]);
    
// formatamos a Query referente a ID da conta (WHERE `ID`=%d) e realizaremos a consulta para atualizar os dados no banco de dados
    
mysql_tquery(IDConexaoQuery"DadosSalvos","d"playerid); // consulta, e enviamos o resultado para a callback DadosSalvos para um DEBUG
    
    
    
PlayerInfo[playerid][pLevel] = 0// resetamos as variaveis.
    
PlayerInfo[playerid][pAdmin] = 0;
    
PlayerInfo[playerid][pMatou] = 0;
    
PlayerInfo[playerid][pMorreu] = 0;
    
PlayerInfo[playerid][pDinheiro] = 0;
    
PlayerInfo[playerid][pLogado] = false;
    return 
1;


Callback com resultado da consulta da stock SalvarDados

PHP Code:
forward DadosSalvos(playerid);
public 
DadosSalvos(playerid) return printf("-> Conta salva ID: %d"PlayerInfo[playerid][pID]);
// Printf no samp server para informar que a conta foi salva com sucesso 

1.4 Download
Versão utilizada R41-4
Código completo:
PHP Code:
#include <a_samp>
#include <a_mysql>

#define DIALOG_REGISTRO     1
#define DIALOG_LOGIN     2

new MySQL:IDConexao// Variavel responsavel pela ID da conexão com o host

enum pInfo // enumerador com variaveis necessarias para nosso salvamento.
{
    
pID,
    
pNome[24],
    
pIP[26],
    
pSenha[20],
    
pLevel,
    
pDinheiro,
    
pSkin,
    
pMatou,
    
pMorreu,
    
pAdmin,
    
bool:pLogado
};
new 
PlayerInfo[MAX_PLAYERS][pInfo];


#define HOST      "localhost" // IP de acesso ao phpmyadmin no caso se voce estiver hospedando no pc deixei localhost
#define USUARIO   "root" // Usuario por padrão é root
#define DATABASE  "samp" // nome da database que voce criou.. como explicao no video acima
#define SENHA     ""   // não possue senha caso tenha usado o wamp


main(){}

public 
OnGameModeInit()
{
    
IDConexao mysql_connect(HOSTUSUARIOSENHADATABASE); // faremos a conexão ao host com as informações definidas acima

    
mysql_query(IDConexao"CREATE TABLE IF NOT EXISTS `Contas`(`ID`int AUTO_INCREMENT PRIMARY KEY, `Nome`varchar(24) NOT NULL,`Senha` varchar(20) NOT NULL,`Level` int(20) NOT NULL,`Matou` int(10) NOT NULL,`Morreu` int(10) NOT NULL,`Skin` int(10) NOT NULL,`Admin` int(10) NOT NULL,`Dinheiro` int(20) NOT NULL)"false);

    if(
mysql_errno(IDConexao) != 0// Ultilizo essa maneira para saber se a conexão foi bem sucedida ou não
    
{
        print(
"Falha na conexão ao banco de dados Mysql");
        } else {
        print(
"Conexão ao banco de dado Mysql efetuada com sucesso");
    }
    return 
1;
}

public 
OnGameModeExit()
{
    for(new 
0MAX_PLAYERSi++) SalvarDados(i); // Realizamos um loop na função Função SalvarDados para q salve todas as contas numa posivel queda do servidor
    
mysql_close(IDConexao); // Aqui fechamos a conexão com o host
    
return 1;
}

public 
OnPlayerConnect(playerid)
{
    
GetPlayerName(playeridPlayerInfo[playerid][pNome], 24); // Pegamos o nome do player somente uma vez quando se conectar e formatamos na variavel.
    
GetPlayerIp(playeridPlayerInfo[playerid][pIP], 26); // Mesma coisa no IP
    
    
new Query[90]; // criamos uma variavel com 90 celulas
    
mysql_format(IDConexaoQuerysizeof(Query), "SELECT `Senha`, `ID` FROM `Contas` WHERE `Nome`='%s'"PlayerInfo[playerid][pNome]); // formatamos a Query selecionando SENHA e ID referente a tabela Contas Linha (NOME)
    
mysql_tquery(IDConexaoQuery"VerificarContas""i"playerid); // Faremos a consulta se a linha "Nome" existe sim ou não
    // Usaremos mysql_tquery para realizar a consulta na tabela e enviar o resultado para a callback.
    // o resultado sera enviado para callback VerificarContas
    
return 1;
}

forward VerificarContas(playerid);
public 
VerificarContas(playerid)
{
    new 
Dialog[240]; // Variavel para as dialogs com 240 celulas necessarias
    
    
if(cache_num_rows() > 0// aqui o resultado da consulta da OnPlayerConnect
    
{// Se a linha for maior que 1 "existir" ira chamar a dialog de login

        
cache_get_value(0"Senha"PlayerInfo[playerid][pSenha], 20); // Pegamos o valor da tabela e setamos a variavel pSenha que sera necessaria para o login
        
        
format(Dialogsizeof(Dialog),"{F8F8FF}Bem Vindo(a) Ao Servidor {058AFF}%s{F8F8FF}\n\nVocê ja tem uma Conta registrada\n\nDigite sua senha para Logar\n\nStatus: {1E90FF}Registrado{F8F8FF}\n\nIP: {058AFF}%s"PlayerInfo[playerid][pNome], PlayerInfo[playerid][pIP]);
        
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Registro"Dialog"Logar""Cancelar");

        } else { 
// se a linha não existir sera chamada a dialog de registro
        
        
format(Dialogsizeof(Dialog),"{F8F8FF}Bem Vindo(a) Ao Servidor {058AFF}%s{F8F8FF}\n\nVocê não tem uma Conta registrada\n\nDigite uma senha para Registrar\n\nStatus: {058AFF}N/A Registrado{F8F8FF}\n\nIP: {058AFF}%s"PlayerInfo[playerid][pNome], PlayerInfo[playerid][pIP]);
        
ShowPlayerDialog(playeridDIALOG_REGISTRODIALOG_STYLE_PASSWORD"Registro"Dialog"Registrar""Cancelar");
    }
    return 
1;
}

public 
OnPlayerDisconnect(playeridreason)
{
    
SalvarDados(playerid); // Chamamos a função para salvar a conta do player que desconectar
    
return 1;
}

public 
OnPlayerDeath(playeridkilleridreason)
{
    
PlayerInfo[playerid][pMorreu]++; // se o player morrer ira acrescentar +1 na variavel de morte
    
PlayerInfo[killerid][pMatou]++; // se o player matar ira acrescentar +1 ...
    
return 1;
}

public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    switch(
dialogid// usaremos um switch para as dialogs
    
{
        case 
DIALOG_REGISTRO:
        {
            if(!
response) return Kick(playerid); // se clicar em cancelar na dialog registro ira kickar o jogador
            
            
if(strlen(inputtext) < || strlen(inputtext) > 20// se a senha tiver menos de 4 ou mais de 20 caracteres ira retornar a dialog
            
{
                
SendClientMessage(playerid, -1"ERRO:{FFFFFF} A senha deve conter de 4 a 20 caracteres!");

                new 
Dialog[240]; // variavel da dialog registro
                
format(Dialogsizeof(Dialog),"{F8F8FF}Bem Vindo(a) Ao Servidor {058AFF}%s{F8F8FF}\n\nVocê não tem uma Conta registrada\n\nDigite uma senha para Registrar\n\nStatus: {058AFF}N/A Registrado{F8F8FF}\n\nIP: {058AFF}%s"PlayerInfo[playerid][pNome], PlayerInfo[playerid][pIP]);
                
ShowPlayerDialog(playeridDIALOG_REGISTRODIALOG_STYLE_PASSWORD"Registro"Dialog"Registrar""Cancelar");

                } else { 
// se não conter entre 4 e 20 caracteres ira retornar ao registro

                
new Query[100]; // variavel com 100 celulas para inserir as informações de registro na tabela
                
mysql_format(IDConexaoQuerysizeof(Query), "INSERT INTO `Contas`(`Nome`, `Senha`) VALUES ('%s', '%s')"PlayerInfo[playerid][pNome], inputtext); // formatamos a query para inserir na tabela do banco de dados
                
mysql_tquery(IDConexaoQuery"DadosRegistrados""i"playerid); // fazemos a consulta e enviamos o resultado para a callback DadosRegistrados
                // enviamos para a callback DadosRegistrados para fazer uma especia de  DEBUG, e tambem para darmos uma ID para a conta no banco de dados
                
RegistrarDados(playerid); // chamamos a função RegistrarDados para adicionar os valores nas variaveis do player
            
}
        }

        case 
DIALOG_LOGIN:
        {
            if(!
response) return Kick(playerid); // se clicar em cancelar na dialog login ira kickar o jogador
            
if(!strlen(inputtext)) // se não digitar nada ira retornar. 
            

                    
SendClientMessage(playerid, -1"ERRO:{FFFFFF} Você não digitou a senha !"); 
                
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Digite sua senha:""Digite sua senha abaixo para logar-se""Logar""Voltar");     
                return 
1;
            }
            if(!
strcmp(PlayerInfo[playerid][pSenha], inputtexttrue20)) //comparamos a variavel coma senha do player com a senha digitada
            
// se a comparação for correta vamos realizar a consulta para adicionar os valores contidos na tabela para as variaveis do player.

                
new Query[70];
                
mysql_format(IDConexaoQuerysizeof(Query), "SELECT * FROM `Contas` WHERE Nome='%s'"PlayerInfo[playerid][pNome]);
                
mysql_tquery(IDConexaoQuery"CarregarContas""d"playerid);
                
// Formatamos a Query realizamos a consulta e enviamos o resultado para a callback CarregarContas

                
} else {
                
// comparação sem sucesso ::
                
SendClientMessage(playerid, -1"ERRO:{FFFFFF} Senha incorreta !");
                
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Digite sua senha:""Digite sua senha abaixo para logar-se""Logar""Voltar");
            }
        }
    }
    return 
1;
}

forward DadosRegistrados(playerid);
public 
DadosRegistrados(playerid)
{
    
PlayerInfo[playerid][pID] = cache_insert_id(); // Adicionamos o ID da conta do player
    
printf("-> Nova conta registrada ID: %d"PlayerInfo[playerid][pID]); // Printf no samp server para informar que a conta foi registrada com sucesso
    
return 1;
}

forward CarregarContas(playerid);
public 
CarregarContas(playerid)
// Resultado da consulta do login, adicionamos os valores contidos na tabela para as variaveis do player
    
cache_get_value_int(0"ID"PlayerInfo[playerid][pID]);
    
cache_get_value_int(0"Admin"PlayerInfo[playerid][pAdmin]);
    
cache_get_value_int(0"Level"PlayerInfo[playerid][pLevel]);
    
cache_get_value_int(0"Matou"PlayerInfo[playerid][pMatou]);
    
cache_get_value_int(0"Morreu"PlayerInfo[playerid][pMorreu]);
    
cache_get_value_int(0"Skin"PlayerInfo[playerid][pSkin]);
    
cache_get_value_int(0"Dinheiro"PlayerInfo[playerid][pDinheiro]);
    
    
CarregarDados(playerid); // chamamos a função CarregarDados
    
return 1;
}

stock RegistrarDados(playerid)
{  
//Aqui adicionaremos os valores das variaveis que o player ira inicio no servidor
    
PlayerInfo[playerid][pDinheiro] = 5000// ou seja começara com 5000 reais
    
PlayerInfo[playerid][pAdmin] = 0// sem nivel de admin
    
PlayerInfo[playerid][pLevel] = 1// 1 level
    
PlayerInfo[playerid][pSkin] = 0// skin 0 CJ
    
PlayerInfo[playerid][pMorreu] = 0// ....
    
PlayerInfo[playerid][pMatou] = 0// ....
    
CarregarDados(playerid); //chamamos a função CarregarDados
    
return 1;
}

stock CarregarDados(playerid)
// aqui carregaremos os ultimos dados das variaveis
    
PlayerInfo[playerid][pLogado] = true;
    
SetPlayerScore(playeridPlayerInfo[playerid][pLevel]); // setamos o level
    
GivePlayerMoney(playeridPlayerInfo[playerid][pDinheiro]); // o dinheiro
    
SetSpawnInfo(playerid0PlayerInfo[playerid][pSkin], 1958.331343.1215.36269.1500000);
    
SpawnPlayer(playerid); // forçamos o player a spawnar nas cordenas acima com as infos setadas nas variaveis
    
return 1;
}

stock SalvarDados(playerid)
{
    
//if(PlayerInfo[playerid][pLogado] == false) return 1; // se o player nao estiver logado não ira salvar nada
    
PlayerInfo[playerid][pDinheiro] = GetPlayerMoney(playerid);
    new 
Query[350]; // variavel com 350 celulas para salvamento
    
mysql_format(IDConexaoQuerysizeof(Query), "UPDATE `Contas` SET `Nome`='%s', `Level`=%d, `Admin`=%d, `Skin`=%d, `Matou`=%d, `Morreu`=%d, `Dinheiro`=%d WHERE `ID`=%d",
    
PlayerInfo[playerid][pNome],
    
PlayerInfo[playerid][pLevel],
    
PlayerInfo[playerid][pAdmin],
    
PlayerInfo[playerid][pSkin],
    
PlayerInfo[playerid][pMatou],
    
PlayerInfo[playerid][pMorreu],
    
PlayerInfo[playerid][pDinheiro],
    
PlayerInfo[playerid][pID]);
    
// formatamos a Query referente a ID da conta (WHERE `ID`=%d) e realizaremos a consulta para atualizar os dados no banco de dados
    
mysql_tquery(IDConexaoQuery"DadosSalvos","d"playerid); // consulta, e enviamos o resultado para a callback DadosSalvos para um DEBUG
    
    
    
PlayerInfo[playerid][pLevel] = 0// resetamos as variaveis.
    
PlayerInfo[playerid][pAdmin] = 0;
    
PlayerInfo[playerid][pMatou] = 0;
    
PlayerInfo[playerid][pMorreu] = 0;
    
PlayerInfo[playerid][pDinheiro] = 0;
    
PlayerInfo[playerid][pLogado] = false;
    return 
1;
}

forward DadosSalvos(playerid);
public 
DadosSalvos(playerid) return printf("-> Conta salva ID: %d"PlayerInfo[playerid][pID]); 

1.5 Creditos

Cleyson Stein pela crianção do Tutorial
BlueG Criação do plugin mysql para samp
Ao canal PC USER Brasil do ******* onde o video se encontra.
Agradecimentos ao membro SammyJ por informar um erro.


Caso haja algum erro por favor me informar.
(Atualizado 07/11/2017- Versão R41-4)

Last edited by Cleyson; 03/07/2018 at 07:47 PM.
Cleyson is offline   Reply With Quote
Old 30/06/2015, 10:05 PM   #2
LockedLucas
Gangsta
 
LockedLucas's Avatar
 
Join Date: Dec 2014
Location: Irineu
Posts: 797
Reputation: 16
Default Re: Criando um sistema em MySQL [2015]

Muito bom o tutorial bem explicado.
__________________
LockedLucas is offline   Reply With Quote
Old 30/06/2015, 10:07 PM   #3
RebeloX
High-roller
 
RebeloX's Avatar
 
Join Date: Jul 2011
Location: Portugal
Posts: 2,261
Reputation: 442
Default Re: Criando um sistema em MySQL [2015]

Está bom, porém deveria haver coisas a serem explicadas, no inicio tu utilizas mysql_query e depois a meio do script tu utilizas mysql_tquery, porque motivo? Qual é a diferença? Para além disso porque motivo é que crias a tabela no script? Porque não utilizas o phpMyAdmin ou o HeidSQL para manipulares a base de dados? Será que é seguro criar uma tabela no script?
Estas são apenas umas questões que deverás responder a quem não sabe, um tutorial não deve focar na demonstração do código mas sim como se faz, na lógica, na teoria, depois sim, deves mostrar a prática utilizando exemplos.
__________________
RebeloX is offline   Reply With Quote
Old 30/06/2015, 10:08 PM   #4
iTakelot
Gangsta
 
iTakelot's Avatar
 
Join Date: Jun 2015
Posts: 687
Reputation: 30
Default Re: Criando um sistema em MySQL [2015]

Fico bom podia melhorar mas esta bom sim, parabéns
iTakelot is offline   Reply With Quote
Old 30/06/2015, 10:13 PM   #5
ipsLuan
High-roller
 
ipsLuan's Avatar
 
Join Date: Feb 2013
Location: /home/luan
Posts: 3,406
Reputation: 276
Default Re: Criando um sistema em MySQL [2015]

Muito bom, cabeçinha.
__________________
Está procurando um programador? Contate-me!
ipsLuan is offline   Reply With Quote
Old 30/06/2015, 10:29 PM   #6
Cleyson
Gangsta
 
Cleyson's Avatar
 
Join Date: Feb 2014
Location: Vitória - ES
Posts: 646
Reputation: 151
Default Re: Criando um sistema em MySQL [2015]

Quote:
Originally Posted by LockedLucas View Post
Muito bom o tutorial bem explicado.
Quote:
Originally Posted by iTakelot View Post
Fico bom podia melhorar mas esta bom sim, parabéns
Quote:
Originally Posted by ipsLuan View Post
Muito bom, cabeçinha.
Obrigado

Quote:
Originally Posted by RebeloX View Post
Está bom, porém deveria haver coisas a serem explicadas, no inicio tu utilizas mysql_query e depois a meio do script tu utilizas mysql_tquery, porque motivo? Qual é a diferença? Para além disso porque motivo é que crias a tabela no script? Porque não utilizas o phpMyAdmin ou o HeidSQL para manipulares a base de dados? Será que é seguro criar uma tabela no script?
Estas são apenas umas questões que deverás responder a quem não sabe, um tutorial não deve focar na demonstração do código mas sim como se faz, na lógica, na teoria, depois sim, deves mostrar a prática utilizando exemplos.
Usei mysql_query para criar as tabelas pois não precisaria de uma callback de resultado.
Bom sobre a questão de criar a tabela é menos trabalhoso criar pelo script
Assim quer der um tempinho irei adicionar mais informções como vc mesmo citou.
__________________
Breaking Life RPG
Coming soon... Wait...
Cleyson is offline   Reply With Quote
Old 30/06/2015, 10:29 PM   #7
D3sconn3ct
Huge Clucker
 
D3sconn3ct's Avatar
 
Join Date: Jul 2014
Location: Brasil, AL
Posts: 374
Reputation: 55
Default Re: Criando um sistema em MySQL [2015]

Muito Bom Parabéns
__________________
SEXY
D3sconn3ct is offline   Reply With Quote
Old 30/06/2015, 10:47 PM   #8
WLSF
High-roller
 
Join Date: Aug 2011
Posts: 3,535
Reputation: 771
Default Re: Criando um sistema em MySQL [2015]

Gostei muito da estruturação do tópico, parabéns. +8
WLSF is offline   Reply With Quote
Old 30/06/2015, 10:51 PM   #9
FallweN
Huge Clucker
 
FallweN's Avatar
 
Join Date: Jan 2014
Location: Search on Google
Posts: 445
Reputation: 98
Default Re: Criando um sistema em MySQL [2015]

Ficou bem explicado, só acho que poderia explicar algumas funções mas ta legal.

Parabéns.
__________________

[Tool/Web/Other]
User Control Panel
[GameMode] The Brasil Drift
FallweN is offline   Reply With Quote
Old 30/06/2015, 11:05 PM   #10
Cleyson
Gangsta
 
Cleyson's Avatar
 
Join Date: Feb 2014
Location: Vitória - ES
Posts: 646
Reputation: 151
Default Re: Criando um sistema em MySQL [2015]

Quote:
Originally Posted by D3sconn3ct View Post
Muito Bom Parabéns
Quote:
Originally Posted by ipsNan View Post
Gostei muito da estruturação do tópico, parabéns. +8
Quote:
Originally Posted by FallweN View Post
Ficou bem explicado, só acho que poderia explicar algumas funções mas ta legal.

Parabéns.
Obrigado,
É depois de postado vemos algumas coisas incompletas, mais vou ajeitando
__________________
Breaking Life RPG
Coming soon... Wait...
Cleyson is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Tutorial] Criando um sistema em MySQL Ricop522 Lançamentos/Releases 28 27/08/2017 06:04 PM
[Tutorial] Criando um sistema de registro em MySQL. (R7) Jason` Lançamentos/Releases 13 22/11/2012 02:00 PM
[Tutorial] Criando sistema de casas em MySQL RebeloX Lançamentos/Releases 35 11/04/2012 03:25 PM
[Tutorial] [TUT]Criando Sistema de GPS Arthur_BiT Lançamentos/Releases 8 15/01/2012 12:30 PM


All times are GMT. The time now is 11:59 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.