16.06.2018, 14:14
Mais um problema com MySQL, desta vez ele simplesmente nгo esta registrando o player, ele preenche o dialog de registro e consegue logar normal como se estivesse registrado, mais no banco de dados nгo consta nada, a mensagem de novo registro nгo aparece no console e quando o player sai e entra dinovo ele tem que se registrar dinovo.
Tуpico usado: https://sampforum.blast.hk/showthread.php?tid=299675
Cуdigos:
Obs: Ali no CASE_REGISTRO logo abaixo tem o CASE_LOGIN e no final o return 1, mais como o login nгo esta com problemas nгo tem porque eu mandar
Tуpico usado: https://sampforum.blast.hk/showthread.php?tid=299675
Cуdigos:
PHP код:
public OnPlayerConnect(playerid)
{
PlayerInfo[playerid][pLogado] = false;
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
//Sistema de Inventario
ResetVariables(playerid);
for(new i = 0; i < 10; i++)
RemovePlayerAttachedObject(playerid, i);
pInventory[playerid][invSelectedSlot] = -1;
pCharacter[playerid][charSelectedSlot] = -1;
LoadPlayerTextDraws(playerid);
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, "Login", 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гo 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;
}
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, COR_VERMELHO, "|ERRO| 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
SendClientMessage(playerid, COR_VERDE, "|SUCESSO| REGISTRO EFETUADO COM SUCESSO !");
SendClientMessage(playerid, COLOR_GRAD1, "Aguarde por favor...");
RegistrarDados(playerid);// chamamos a funзгo RegistrarDados para adicionar os valores nas variaveis do player
SetTimer("Loading",5000,false);
}
}
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;
}
stock RegistrarDados(playerid)
{ //Aqui adicionaremos os valores das variaveis que o player ira inicio no servidor
PlayerInfo[playerid][pDinheiro] = 1000; // ou seja comeзara com 1000 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; // ....
PlayerInfo[playerid][pVitorias] = 0;
PlayerInfo[playerid][pBanido] = 0;
CarregarDados(playerid); //chamamos a funзгo CarregarDados
return 1;
}
stock CarregarDados(playerid)
{ // aqui carregaremos os ultimos dados das variaveis
if(PlayerInfo[playerid][pBanido] >= 1)
{
new Str1[128];
new Str2[128];
SendClientMessage(playerid, COR_VERMELHO, "|ERRO| Sua conta esta banida e nгo podes logar!");
TextDrawShowForPlayer(playerid, FUNDOBAN1);
TextDrawShowForPlayer(playerid, FUNDOBAN2);
TextDrawShowForPlayer(playerid, FUNDOBAN3);
TextDrawShowForPlayer(playerid, VOCE_FOI_BANIDO);
TextDrawShowForPlayer(playerid, NOME_BAN);
TextDrawShowForPlayer(playerid, MSG_BAN);
TextDrawShowForPlayer(playerid, MOTIVO_BAN);
format(Str1,sizeof(Str1),"Nick: %s",PlayerInfo[playerid][pNome]);
format(Str2,sizeof(Str2),"Motivo: %s",PlayerInfo[playerid][pMotivo]);
TextDrawSetString(NOME_BAN,Str1);
TextDrawSetString(MOTIVO_BAN,Str2);
Kick(playerid);
}
else{
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],0.0,0.0,0.0,0.0,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;
}