#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(HOST, USUARIO, SENHA, DATABASE); // 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 i = 0; i < MAX_PLAYERS; i++) 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(playerid, PlayerInfo[playerid][pNome], 24); // Pegamos o nome do player somente uma vez quando se conectar e formatamos na variavel.
GetPlayerIp(playerid, PlayerInfo[playerid][pIP], 26); // Mesma coisa no IP
new Query[90]; // criamos uma variavel com 90 celulas
mysql_format(IDConexao, Query, sizeof(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(IDConexao, Query, "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(Dialog, sizeof(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(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Registro", Dialog, "Logar", "Cancelar");
} else { // se a linha nгo existir sera chamada a dialog de registro
format(Dialog, sizeof(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(playerid, DIALOG_REGISTRO, DIALOG_STYLE_PASSWORD, "Registro", Dialog, "Registrar", "Cancelar");
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
SalvarDados(playerid); // Chamamos a funзгo para salvar a conta do player que desconectar
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
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(playerid, dialogid, response, listitem, inputtext[])
{
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) < 4 || 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(Dialog, sizeof(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(playerid, DIALOG_REGISTRO, DIALOG_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(IDConexao, Query, sizeof(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(IDConexao, Query, "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(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Digite sua senha:", "Digite sua senha abaixo para logar-se", "Logar", "Voltar");
return 1;
}
if(!strcmp(PlayerInfo[playerid][pSenha], inputtext, true, 20)) //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(IDConexao, Query, sizeof(Query), "SELECT * FROM `Contas` WHERE Nome='%s'", PlayerInfo[playerid][pNome]);
mysql_tquery(IDConexao, Query, "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(playerid, DIALOG_LOGIN, DIALOG_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(playerid, PlayerInfo[playerid][pLevel]); // setamos o level
GivePlayerMoney(playerid, PlayerInfo[playerid][pDinheiro]); // o dinheiro
SetSpawnInfo(playerid, 0, PlayerInfo[playerid][pSkin], 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0 );
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(IDConexao, Query, sizeof(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(IDConexao, Query, "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]);
cache_insert_id
TBM tф aprendendo MySQL to com mesmo problema os dados do player n cria na tabela mas nгo fiquei dando ctrl c + v n :v
TBM queria saber para que serve esse id no caso PHP Code:
|
[06:01:13] [WARNING] mysql_connect: no password specified |
TBM tф aprendendo MySQL to com mesmo problema os dados do player n cria na tabela mas nгo fiquei dando ctrl c + v n :v
TBM queria saber para que serve esse id no caso PHP Code:
|
Й fбcil falar bosta nй? Para sua informaзгo, eu nгo estou dando Ctrl C + V eu estou analisando esse sistema, tentando entender para que serve cada coisa, para saber como se salva as coisas em MySQL, afinal a gente sу aprende na pratica. ENTГO SE VOCК NГO SABE DE MERDA NENHUMA, NГO ENTRA NO POST PARA FALAR BOSTA ! Por que para julgar aparece uns 20, agora para ajudar sгo poucos.
Acredito que seja isso mano, ta certo? |
Possivelmente vocк usa o WAMP versгo + 3.0.6.
Se for isso vocк deve criar valor default para as colunas. Sobre essa warning nгo e nada demais, esta apenas informando que seu sistema esta sem senha. Manda seu log do mysql. |
[06:11:13] [INFO] received Windows console close event; shutting log-core down
[06:01:13] [plugins/mysql] mysql_connect: no password specified plugins/mysql
[06:01:13] [WARNING] mysql_connect: no password specified
Vocк estб falando da pasta logs que й criada na pasta Raiz da GM? se for... ta aн.
Arquivo: errors vazio. log-core: Код:
[06:11:13] [INFO] received Windows console close event; shutting log-core down Код:
[06:01:13] [plugins/mysql] mysql_connect: no password specified Код:
[06:01:13] [WARNING] mysql_connect: no password specified |
Vocк estб falando da pasta logs que й criada na pasta Raiz da GM? se for... ta aн.
Arquivo: errors vazio. log-core: Код:
[06:11:13] [INFO] received Windows console close event; shutting log-core down Код:
[06:01:13] [plugins/mysql] mysql_connect: no password specified Код:
[06:01:13] [WARNING] mysql_connect: no password specified |
[06:01:13] [WARNING] mysql_connect: no password specified [18:32:41] [WARNING] mysql_connect: no password specified [18:35:33] [ERROR] error #1364 while executing query "INSERT INTO `Contas`(`Nome`, `Senha`) VALUES ('SmokeKiLL', '123')": Field 'Level' doesn't have a default value
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 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);