#include a_samp #include a_mysql #include a_http #define MYSQL_Server "127.0.0.1" #define MYSQL_Database "samp_db" #define MYSQL_Uid "root" #define MYSQL_Pwd "" #define VERSION "v1.3.1.0" #define INTERVAL_CHECK (5) // minutes #define INTERVAL_CHECK_TXT "5" // minutes #define INTERVAL_REMOVE_INV_PL (5) // minutes static MySQL:my_connection, PlayerName[MAX_PLAYER_NAME], PlayerTimer[MAX_PLAYERS], query[120]; public OnFilterScriptInit() { print("\n______________________________________________________________"); print("[SAMP-AC] Desenvolvido por Eduardo_AC (A.K.A F1N4L)"); print("[SAMP-AC] Versão " VERSION); print("______________________________________________________________"); LoadMySQL(); SetTimer("RemoveInvalidTables", INTERVAL_REMOVE_INV_PL * 60 * 1000, true); return true; } public OnPlayerConnect(playerid) { if(!IsPlayerNPC(playerid)) { GetPlayerName(playerid, PlayerName[playerid], MAX_PLAYER_NAME); mysql_format(my_connection, query, sizeof query, "SELECT * FROM `samp_ac` WHERE `nick` = '%s' AND `time` >= NOW()", PlayerName[playerid]); mysql_tquery(my_connection, query, "CheckPlayerAllowed", "i", playerid); } return true; } public OnPlayerDisconnect(playerid, reason) { if(!IsPlayerNPC(playerid)) { KillTimer(PlayerTimer[playerid]); mysql_format(my_connection, query, sizeof query, "DELETE FROM `samp_ac` WHERE `nick` = '%s'", PlayerName[playerid]); mysql_tquery(my_connection, query, "", ""); } return true; } forward RemoveInvalidTables(playerid); public RemoveInvalidTables(playerid) { mysql_tquery(my_connection, "DELETE FROM `samp_ac` WHERE `time` <= NOW()", "", ""); return true; } forward CheckPlayerAC(playerid); public CheckPlayerAC(playerid) { mysql_format(my_connection, query, sizeof query, "SELECT * FROM `samp_ac` WHERE `nick` = '%s'", PlayerName[playerid]); mysql_tquery(my_connection, query, "CheckValidPlayer", "d", playerid); return true; } forward CheckValidPlayer(playerid); public CheckValidPlayer(playerid) { new rows; cache_get_row_count(rows); if(!rows) { mysql_format(my_connection, query, sizeof query, "DELETE FROM `samp_ac` WHERE `nick` = '%s'", PlayerName[playerid]); mysql_tquery(my_connection, query, "", ""); SendClientMessage(playerid, -1, "[SAMP-AC] Você foi expulso pelo SAMP-AC!"); KickEx(playerid); } return true; } forward CheckPlayerAllowed(playerid); public CheckPlayerAllowed(playerid) { new rows, code[11], string[100]; cache_get_row_count(rows); if(rows) { PlayerTimer[playerid] = SetTimerEx("CheckPlayerAC", INTERVAL_CHECK * 60 * 1000, true, "i", playerid); cache_get_value_name(0, "code", code, sizeof code); format(string, sizeof string, "[SAMP-AC] Código de liberação: %s", code); SendClientMessage(playerid, -1, string); } else { SendClientMessage(playerid, -1, "[SAMP-AC] Você precisa executar o Launcher Anti-Cheat para poder jogar."); KickEx(playerid); mysql_format(my_connection, query, sizeof query, "DELETE FROM `samp_ac` WHERE `nick` = '%s'", PlayerName[playerid]); mysql_tquery(my_connection, query, "", ""); } return true; } static stock LoadMySQL() { print("[SAMP-AC] Conectando-se à database..."); my_connection = mysql_connect(MYSQL_Server, MYSQL_Uid, MYSQL_Pwd, MYSQL_Database); if(mysql_errno(my_connection) != 0) { printf("[SAMP-AC ERRO %i] Houve um erro ao se conectar à database.", mysql_errno(my_connection)); print("______________________________________________________________\n"); } else { print("[SAMP-AC] Database conectada com sucesso!"); print("______________________________________________________________\n"); print("[SAMP-AC] Carregando database..."); mysql_query(my_connection, "CREATE TABLE IF NOT EXISTS `samp_ac` (`id` INT(10) PRIMARY KEY AUTO_INCREMENT, `nick` VARCHAR(25), `code` VARCHAR(10), `time` DATETIME)"); if(mysql_errno(my_connection) != 0) { printf("[SAMP-AC ERRO %i] Houve um erro ao carregar a database.", mysql_errno(my_connection)); print("______________________________________________________________\n"); } else { print("[SAMP-AC] Database carregada com sucesso!"); print("______________________________________________________________\n"); } mysql_query(my_connection, "\ CREATE PROCEDURE IF NOT EXISTS ac_insert_new_user(_nick VARCHAR(25), _code VARCHAR(10))\n\ BEGIN\n\ INSERT INTO `samp_ac` (`nick`, `code`, `time`) VALUES (_nick, _code, DATE_ADD(NOW(), INTERVAL "INTERVAL_CHECK_TXT" MINUTE));\n\ END;"); mysql_query(my_connection, "\ CREATE PROCEDURE IF NOT EXISTS ac_delete_user(_nick VARCHAR(25))\n\ BEGIN\n\ DELETE FROM `samp_ac` WHERE `nick` = _nick;\n\ END;"); mysql_query(my_connection, "\ CREATE PROCEDURE IF NOT EXISTS ac_update_user(_nick VARCHAR(25))\n\ BEGIN\n\ UPDATE `samp_ac` SET `time` = DATE_ADD(NOW(), INTERVAL "INTERVAL_CHECK_TXT" MINUTE) WHERE `nick` = _nick;\n\ END;"); if(mysql_errno(my_connection) != 0) { printf("[SAMP-AC ERRO %i] Houve um erro ao carregar os procedimentos MySQL.", mysql_errno(my_connection)); print("______________________________________________________________\n"); } else { print("[SAMP-AC] Procedimentos MySQL carregados com sucesso!"); print("______________________________________________________________\n"); } } return true; } static stock KickEx(playerid) return SetTimerEx("KickEx_", 50, false, "i", playerid); forward KickEx_(playerid); public KickEx_(playerid) return Kick(playerid);