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