[Tutorial] Criando um sistema em MySQL R41-4 [2017]
#1

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)
Reply


Messages In This Thread
Criando um sistema em MySQL R41-4 [2017] - by Cleyson - 30.06.2015, 22:01
Re: Criando um sistema em MySQL [2015] - by LockedLucas - 30.06.2015, 22:05
Re: Criando um sistema em MySQL [2015] - by RebeloX - 30.06.2015, 22:07
Re: Criando um sistema em MySQL [2015] - by iTakelot - 30.06.2015, 22:08
Re: Criando um sistema em MySQL [2015] - by ipsLuan - 30.06.2015, 22:13
Re: Criando um sistema em MySQL [2015] - by Cleyson - 30.06.2015, 22:29
Re: Criando um sistema em MySQL [2015] - by D3sconn3ct - 30.06.2015, 22:29
Re: Criando um sistema em MySQL [2015] - by WLSF - 30.06.2015, 22:47
Re: Criando um sistema em MySQL [2015] - by FallweN - 30.06.2015, 22:51
Re: Criando um sistema em MySQL [2015] - by Cleyson - 30.06.2015, 23:05
Re: Criando um sistema em MySQL [2015] - by ImperioHosting - 01.07.2015, 00:23
Re: Criando um sistema em MySQL [2015] - by n0minal - 01.07.2015, 00:45
Re: Criando um sistema em MySQL [2015] - by HaRdiiZin - 01.07.2015, 01:24
Re: Criando um sistema em MySQL [2015] - by Monotox - 01.07.2015, 02:52
Re: Criando um sistema em MySQL [2015] - by Cleyson - 01.07.2015, 11:09
Re: Criando um sistema em MySQL [2015] - by IgorLuiz - 01.07.2015, 16:20
Re: Criando um sistema em MySQL [2015] - by PT - 01.07.2015, 19:49
Re: Criando um sistema em MySQL [2015] - by Cleyson - 01.07.2015, 22:03
Re: Criando um sistema em MySQL [2015] - by Marllun - 25.11.2016, 19:41
Re: Criando um sistema em MySQL [2015] - by Cleyson - 25.11.2016, 20:54
Re: Criando um sistema em MySQL [2015] - by Marllun - 26.11.2016, 02:18
Re: Criando um sistema em MySQL [2015] - by Cleyson - 29.11.2016, 21:19
Respuesta: Criando um sistema em MySQL [2015] - by Marllun - 29.11.2016, 23:39
Re: Criando um sistema em MySQL [2015] - by GuilhermeW - 30.11.2016, 00:26
Respuesta: Criando um sistema em MySQL [2015] - by Marllun - 30.11.2016, 00:30
Re: Criando um sistema em MySQL [2015] - by Dominguinhos - 17.01.2017, 21:28
Re: Criando um sistema em MySQL [2015] - by Lontresca - 20.08.2017, 14:54
Re: Criando um sistema em MySQL [2015] - by Jonorusc - 20.08.2017, 15:18
Re: Criando um sistema em MySQL [2015] - by Cleyson - 27.09.2017, 18:01
Re: Criando um sistema em MySQL [2015] - by Cleyson - 31.10.2017, 23:35
Re: Criando um sistema em MySQL R41-4 [2017] - by ChapN - 16.09.2018, 08:28
Re: Criando um sistema em MySQL R41-4 [2017] - by Cleyson - 22.09.2018, 21:37
Re: Criando um sistema em MySQL R41-4 [2017] - by ChapN - 22.09.2018, 21:49
Re: Criando um sistema em MySQL R41-4 [2017] - by Ocarian - 16.10.2018, 12:47
Re: Criando um sistema em MySQL R41-4 [2017] - by ipsLuan - 16.10.2018, 12:51
Re: Criando um sistema em MySQL R41-4 [2017] - by GSantana - 18.10.2018, 03:19

Forum Jump:


Users browsing this thread: 1 Guest(s)