22.11.2017, 16:53
(
Last edited by JacKPanK; 22/11/2017 at 07:04 PM.
)
Tentei fazer um sistema de login pro meu servidor e ta dando nisso:
Script[gamemodes/gamemode.amx]: Run time error 19: "File or function is not found"
Tб copilando tudo certo mas na hora de ligar o servidor da nisso.
A minha data base esta assim.

server.cfg:
Server LOG
MySQL log:
Script[gamemodes/gamemode.amx]: Run time error 19: "File or function is not found"
Tб copilando tudo certo mas na hora de ligar o servidor da nisso.
Code:
#include <a_samp>
#include <a_mysql>
#define HOSTNAME "localhost"
#define USERNAME "root"
#define DATABASE "samp"
#define PASSWORD ""
new conexao; // Variбvel equivalente a connectionHandle (Nгo sei como explicar bem isto)
new bool:Login[MAX_PLAYERS]; // Variбvel booleana para checar se um jogador fez login ou nгo.
// Estabelecendo conexгo
public OnGameModeInit()
{
conexao = mysql_connect(HOSTNAME, USERNAME, DATABASE, PASSWORD);
// Pra checar se foi bem sucedida a conexгo costumo fazer o seguinte:
if(mysql_ping(conexao) < 1)
return SendRconCommand("exit");
// Caso o ping seja menor que 1 o script nгo й inicializado.
// Caso hajam mйtodos melhores por favor digam.
// Criando a tabela
// Nгo usarei cache nem callback pois nгo serб necessбrio obter resultado
mysql_function_query(conexao, "CREATE TABLE IF NOT EXISTS `users` (`nick` VARCHAR(24) NOT NULL,`senha` VARCHAR(32))", false, "", "");
return 1;
}
// Finalizando a conexгo quando o script for finalizado
public OnGameModeExit()
{
mysql_close(conexao);
return 1;
}
public OnPlayerConnect(playerid)
{
ResetPlayerMoney(playerid);
new nick[MAX_PLAYER_NAME],consulta[128];
GetPlayerName(playerid, nick, MAX_PLAYER_NAME);
mysql_format(conexao, consulta, "SELECT * FROM `users` WHERE `nick` = '%e'", nick);
mysql_function_query(conexao, consulta, true, "ProcurarUsuario", "i", playerid);
return 1;
}
forward ProcurarUsuario(playerid);
public ProcurarUsuario(playerid)
{
new
linhas,
campos;
cache_get_data(linhas, campos, conexao);
if(!linhas)
{
ShowPlayerDialog(playerid, 552, DIALOG_STYLE_PASSWORD, "{FFFFFF}Registro", "{FFFFFF}Digite uma senha para se registrar.", "Registrar", "");
}
else
{
ShowPlayerDialog(playerid, 551, DIALOG_STYLE_PASSWORD, "{FFFFFF}Login", "{FFFFFF}Digite sua senha", "Login", "");
}
return 1;
}
//
// Fazendo o processamento dos dialogs
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
new
nick[MAX_PLAYER_NAME],
consulta[128];
GetPlayerName(playerid, nick, sizeof(nick));
switch(dialogid)
{
case 552:
{
if(!response)
Kick(playerid);
else // Botгo registrar
{
if(strlen(inputtext) < 5 || strlen(inputtext) > 32)
{
SendClientMessage(playerid, -1, "A senha deve conter entre 5 e 32 caracteres noob.");
Kick(playerid);
}
else
{
// Registrando o jogador
// Formatando a consulta
mysql_format(conexao, consulta, "INSERT INTO `users` (`nick`,`senha`) VALUES ('%s','%s')", nick, inputtext);
// Traduzindo
// INSIRA EM users (nick, senha) valores (nick (nick do jogador), inputtext (o que foi digitado))
// Executando a consulta
mysql_function_query(conexao, consulta, false, "", "");
// Nгo precisamos obter nenhum resultado na consulta, logo, nгo precisamos de callback.
// Portanto, no parвmetro onde ficou, por exemplo, ProcurarUsuario, na OnPlayerConnect, basta deixar ""
// Mesma coisa para os especificadores, que vem logo apуs a callback, nгo usaremos callback, muito menos parametros, logo: ""
ShowPlayerDialog(playerid, 551, DIALOG_STYLE_PASSWORD, "{FFFFFF}Login", "{FFFFFF}Faзa login", "Login", "Cancelar");
}
}
}
case 551:
{
if(!response)
Kick(playerid);
else // Botгo login
{
// Agora vamos ao login
// Faremos uma consulta para o nick e a senha
mysql_format(conexao, consulta, "SELECT * FROM `users` WHERE `nick` = '%e' AND `senha` = '%e'", nick, inputtext);
// Traduzindo
// SELECIONE TUDO de users AONDE nick = nick(variavel) E senha = inputtext (o que foi digitado)
// Executando a consulta
// Precisaremos de uma callback pois precisaremos obter o resultado por cache
mysql_function_query(conexao, consulta, true, "FazerLogin", "i", playerid);
}
}
}
return 1;
}
// Declarando a callback FazerLogin
forward FazerLogin(playerid);
public FazerLogin(playerid)
{
// Declarando as variбveis para a obtenзгo de linhas e campos da consulta
new
linhas,
campos;
// Obtendo os dados
cache_get_data(linhas, campos, conexao);
// Caso nгo hajam resultados
if(!linhas)
{
// Senha incorreta
SendClientMessage(playerid, -1, "Senha errada noob.");
Kick(playerid);
}
else // Resultados encontrados, senha correta!
{
Login[playerid] = true;
// Outras funзхes de login
}
return 1;
}

server.cfg:
Code:
echo Executing Server Config... lanmode 0 rcon_password 123 maxplayers 50 port 7777 hostname SA-MP 0.3 Server plugins sscanf.dll mysql.dll gamemode0 gamemodesql filterscripts announce 0 chatlogging 0 weburl www.sa-mp.com onfoot_rate 40 incar_rate 40 weapon_rate 40 stream_distance 300.0 stream_rate 1000 maxnpc 0 logtimeformat [%H:%M:%S] language English
Code:
---------- Loaded log file: "server_log.txt". ---------- SA-MP Dedicated Server ---------------------- v0.3.7-R2, ©2005-2015 SA-MP Team [17:01:22] filterscripts = "" (string) [17:01:22] [17:01:22] Server Plugins [17:01:22] -------------- [17:01:22] Loading plugin: sscanf.dll [17:01:22] [17:01:22] =============================== [17:01:22] sscanf plugin loaded. [17:01:22] Version: 2.8.2 [17:01:22] © 2012 Alex "Y_Less" Cole [17:01:22] =============================== [17:01:22] Loaded. [17:01:22] Loading plugin: mysql.dll [17:01:22] > MySQL plugin R7 successfully loaded. [17:01:22] Loaded. [17:01:22] Loaded 2 plugins. [17:01:22] [17:01:22] Filterscripts [17:01:22] --------------- [17:01:22] Loaded 0 filterscripts. [17:01:22] Script[gamemodes/gamemodesql.amx]: Run time error 20: "Invalid index parameter (bad entry point)" [17:01:22] Number of vehicle models: 0
Code:
[17:01:22] >> mysql_connect(localhost, root, samp, ******) on port 3306 [17:01:22] CMySQLHandler::CMySQLHandler() - constructor called. [17:01:22] CMySQLHandler::CMySQLHandler() - Connecting to "localhost" | DB: "samp" | Username: "root" [17:01:22] CMySQLHandler::Connect() - Connection was successful. [17:01:22] CMySQLHandler::Connect() - Auto-Reconnect has been enabled. [17:01:22] >> mysql_ping( Connection handle: 1 ) [17:01:22] CMySQLHandler::Ping() - Connection is still alive. [17:01:22] >> mysql_query_callback( Connection handle: 1 ) [17:01:22] Passing query CREATE TABLE IF NOT EXISTS `users` (`nick` VARCHAR(24) NOT NULL,`senha` VARCHAR(32)) | [17:01:22] ProcessQueryThread() - Query was successful. (CREATE TABLE IF NOT EXISTS `users` (`nick` VARCHAR(24) NOT NULL,`senha` VARCHAR(32))) [17:01:22] CMySQLHandler::ProcessQueryThread() - Data is getting passed to ->ProcessTick()


