Solucionado Crear las tablas directamente desde el sma - Meliodas - 26/07/2022
buenas noches, quien me puede ayudar para que las tablas las cree directamente desde el sma
Código: #include <amxmisc>
#include <sqlx>
#include <fakemeta>
#pragma semicolon 1
/*
=== CONSULTAS ===
// Borrar tablas
DROP TABLE IF EXISTS sql_ban;
// Vaciar contenido
DELETE FROM sql_ban;
// Crear tablas
CREATE TABLE IF NOT EXISTS `sql_ban`
(
ban_name varchar(32) NOT NULL DEFAULT '',
ban_admin_name varchar(32) NOT NULL DEFAULT '',
ban_reason varchar(21) NOT NULL DEFAULT '',
ban_user varchar(32) NOT NULL DEFAULT '',
ban_time int NOT NULL DEFAULT '0',
ban_map varchar(21) NOT NULL DEFAULT '',
ban_register varchar(21) NOT NULL DEFAULT '',
ban_expire varchar(21) NOT NULL DEFAULT '',
ban_type varchar(8) NOT NULL DEFAULT '',
ban_minutes int NOT NULL DEFAULT '0',
ban_page int NOT NULL DEFAULT '0'
);
*/
#define PLUGIN_AUTHOR "; Cristian'"
#define PLUGIN_VERSION "v2.0"
#define SZPREFIX "!g[Sistema de ban]!y"
#define PRIVATE_DATA_CSMENUCODE 205
#define PRIVATE_DATA_LINUX 5
#define REASON_MAX_LENGTH 25
#define REASON_MIN_LENGTH 2
#define OPTION_BACKNAME "Pag. Anterior"
#define OPTION_NEXTNAME "Pag. Siguiente"
#define OPTION_EXITNAME "Menu Anterior"
#define USE_SQLITE
#define SQL_TABLE "sql_ban"
#define SQL_DATABASE "sql_ban_database"
#if defined USE_SQLITE
#define SQL_HOST ""
#define SQL_USER ""
#define SQL_PASSWORD ""
#define SQL_DRIVE "sqlite"
#else
#define SQL_HOST "localhost"
#define SQL_USER "root"
#define SQL_PASSWORD ""
#define SQL_DRIVE "mysql"
#endif
enum _:MENU_STRUCT
{
MENU_KICK = 1,
MENU_BAN,
MENU_BAN_IP,
MENU_BAN_STEAMID,
MENU_BAN_REMOVE
};
enum _:MESSAGEMODE_STRUCT
{
CALCULAR_DIAS_EN_MINUTOS,
CALCULAR_HORAS_EN_MINUTOS,
INTRODUCIR_MINUTOS,
INTRODUCIR_RAZON,
INTRODUCIR_IP,
INTRODUCIR_STEAMID
};
enum _:BAN_TYPE_STRUCT
{
BAN_IP,
BAN_STEAMID
};
enum _:USERS_DISCONNECTED_STRUCT
{
USER_NAME[32],
USER_IP[16],
USER_STEAMID[35]
};
enum _:STATS_BAN_STRUCT
{
STAT_BAN_ADMIN_NAME[32],
STAT_BAN_ADMIN_REASON[32],
STAT_BAN_ADMIN_REGISTER[32],
STAT_BAN_ADMIN_EXPIRE[32],
STAT_BAN_ADMIN_MAP[32],
STAT_BAN_TYPE_NAME[32],
STAT_BAN_ADMIN_MINUTES,
STAT_BAN_TYPE,
STAT_BAN_TIME,
STAT_BAN_QUERY_RESULT[35],
STAT_BAN_QUERY_NAME[32]
};
new const BAN_TYPES[][] =
{
"IP",
"STEAMID"
};
new g_user_name[33][32];
new g_user_unban_name[33][32];
new g_user_ban_status[33];
new g_user_ban_admin[33][32];
new g_user_ban_reason[33][32];
new g_user_ban_register[33][32];
new g_user_ban_add[33][16];
new g_user_ban_expire[33][32];
new g_user_ban_minutes[33];
new g_user_ban_minutes_per_day_calculation[33];
new g_user_ban_minutes_per_hour_calculation[33];
new g_user_ban_selection[33];
new g_user_ban_map[33][32];
new g_user_ip[33][16];
new g_user_authid[33][35];
new g_user_ban_type[33];
new g_user_ban_type_name[33][32];
new g_user_page_selection[33];
new g_user_unban_selected[33];
new g_maxplayers[1 char];
new g_messagemode[33];
new g_user_disconnected[10][USERS_DISCONNECTED_STRUCT];
new g_number_users_disconnected;
new Trie:g_trie_ban_stats;
new Array:g_array_ban_stats;
new g_cvar_ban_system_update_frequency;
new Handle:g_sql_connection;
new Handle:g_sql_htuple;
public plugin_init()
{
register_plugin("AMX Ban System", PLUGIN_VERSION, PLUGIN_AUTHOR);
register_clcmd("say", "clcmd_say");
register_clcmd("say_team", "clcmd_say");
register_clcmd("CALCULAR_DIAS_EN_MINUTOS", "clcmd_messagemode");
register_clcmd("CALCULAR_HORAS_EN_MINUTOS", "clcmd_messagemode");
register_clcmd("INTRODUCIR_MINUTOS", "clcmd_messagemode");
register_clcmd("INTRODUCIR_RAZON", "clcmd_messagemode");
register_clcmd("INTRODUCIR_IP", "clcmd_messagemode");
register_clcmd("INTRODUCIR_STEAMID", "clcmd_messagemode");
register_clcmd("chooseteam", "clcmd_changeteam");
register_clcmd("jointeam", "clcmd_changeteam");
register_concmd("amx_ban_add_ip", "concmd_ban_add_ip", ADMIN_RCON, "Uso: amx_ban_add ^"IP^" ^"MINUTOS^" ^"RAZÓN^"");
register_concmd("amx_ban_add_steamid", "concmd_ban_add_steamid", ADMIN_RCON, "Uso: amx_ban_add ^"STEAMID^" ^"MINUTOS^" ^"RAZÓN^"");
register_menu("Show Option Ban", (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<9), "handled_show_option_ban");
register_menu("Show Answer Unban", (1<<0)|(1<<1), "handled_show_answer_unban");
register_menu("Handled Clcmd Ban", (1<<9), "handled___clcmd_ban");
register_menu("Show Menu Information", (1<<0)|(1<<9), "handled_show_menu_ban_information");
register_forward(FM_ClientUserInfoChanged, "fw_ClientUserInfoChanged");
g_cvar_ban_system_update_frequency = register_cvar("amx_ban_system_update_frequency", "60.0");
g_maxplayers{0} = get_maxplayers();
new error, szerror[512], get_type[12];
SQL_SetAffinity(SQL_DRIVE);
SQL_GetAffinity(get_type, charsmax(get_type));
g_sql_htuple = SQL_MakeDbTuple(SQL_HOST, SQL_USER, SQL_PASSWORD, SQL_DATABASE);
g_sql_connection = SQL_Connect(g_sql_htuple, error, szerror, 511);
if(g_sql_htuple == Empty_Handle)
{
log_to_file("SQL_Htuple.log", "%s", szerror);
set_fail_state(szerror);
return;
}
if(g_sql_connection == Empty_Handle)
{
log_to_file("SQL_Connection.log", "%s", szerror);
set_fail_state(szerror);
return;
}
g_trie_ban_stats = TrieCreate();
g_array_ban_stats = ArrayCreate(STATS_BAN_STRUCT);
set_task(1.0, "check_user_banned");
set_task(3.0, "check_user_unixtime");
}
public plugin_end()
{
TrieDestroy(g_trie_ban_stats);
ArrayDestroy(g_array_ban_stats);
if(g_sql_connection)
{
SQL_FreeHandle(g_sql_connection);
}
}
sql_query_error(Handle:query)
{
static error[56];
SQL_QueryError(query, error, 55);
chat_color(0, "%s !yError: !g%s!y.", SZPREFIX, error);
log_to_file("SQL_Query_Error.txt", "Error: %s", error);
SQL_FreeHandle(query);
}
public check_user_banned()
{
new Handle:query;
query = SQL_PrepareQuery(g_sql_connection, "SELECT `ban_admin_name`, `ban_reason`, `ban_map`, `ban_register`, `ban_expire`, `ban_type`, `ban_user`, `ban_name`, `ban_minutes`, `ban_page`, `ban_time` FROM `%s`;", SQL_TABLE);
if(!SQL_Execute(query))
{
sql_query_error(query);
}
else if(SQL_NumResults(query))
{
new query_result[35], query_name[32], ban_admin[32], ban_reason[32], ban_map[32], ban_register[32], ban_expire[32], ban_type_name[32], ban_minutes, ban_page, ban_time;
while (SQL_MoreResults(query))
{
SQL_ReadResult(query, 0, ban_admin, 32);
SQL_ReadResult(query, 1, ban_reason, 32);
SQL_ReadResult(query, 2, ban_map, 32);
SQL_ReadResult(query, 3, ban_register, 32);
SQL_ReadResult(query, 4, ban_expire, 32);
SQL_ReadResult(query, 5, ban_type_name, 32);
SQL_ReadResult(query, 6, query_result, 34);
SQL_ReadResult(query, 7, query_name, 32);
ban_minutes = SQL_ReadResult(query, 8);
ban_page = SQL_ReadResult(query, 9);
ban_time = SQL_ReadResult(query, 10);
check_copy_stats(ban_admin, ban_reason, ban_map, ban_register, ban_expire, ban_type_name, query_result, query_name, ban_minutes, ban_page, ban_time);
SQL_NextRow(query);
}
SQL_FreeHandle(query);
}
else
{
SQL_FreeHandle(query);
}
}
check_copy_stats(const ban_admin[], const ban_reason[], const ban_map[], const ban_register[], const ban_expire[], const ban_type_name[], const query_result[], const query_name[], ban_minutes, ban_page, ban_time)
{
new stats[STATS_BAN_STRUCT];
copy(stats[STAT_BAN_ADMIN_NAME], charsmax(stats[STAT_BAN_ADMIN_NAME]), ban_admin);
copy(stats[STAT_BAN_ADMIN_REASON], charsmax(stats[STAT_BAN_ADMIN_REASON]), ban_reason);
copy(stats[STAT_BAN_ADMIN_MAP], charsmax(stats[STAT_BAN_ADMIN_MAP]), ban_map);
copy(stats[STAT_BAN_ADMIN_REGISTER], charsmax(stats[STAT_BAN_ADMIN_REGISTER]), ban_register);
copy(stats[STAT_BAN_ADMIN_EXPIRE], charsmax(stats[STAT_BAN_ADMIN_EXPIRE]), ban_expire);
copy(stats[STAT_BAN_TYPE_NAME], charsmax(stats[STAT_BAN_TYPE_NAME]), ban_type_name);
copy(stats[STAT_BAN_QUERY_RESULT], charsmax(stats[STAT_BAN_QUERY_RESULT]), query_result);
copy(stats[STAT_BAN_QUERY_NAME], charsmax(stats[STAT_BAN_QUERY_NAME]), query_name);
stats[STAT_BAN_ADMIN_MINUTES] = ban_minutes;
stats[STAT_BAN_TYPE] = ban_page;
stats[STAT_BAN_TIME] = ban_time;
TrieSetArray(g_trie_ban_stats, query_result, stats, sizeof(stats));
ArrayPushArray(g_array_ban_stats, stats);
}
public check_user_unixtime()
{
new stats[STATS_BAN_STRUCT], i;
for(i = 0; i < ArraySize(g_array_ban_stats); i++)
{
if (ArrayGetArray(g_array_ban_stats, i, stats))
{
if (get_systime() > stats[STAT_BAN_TIME])
{
new Handle:query;
query = SQL_PrepareQuery(g_sql_connection, "DELETE FROM `%s` WHERE `ban_user` = ^"%s^";", SQL_TABLE, stats[STAT_BAN_QUERY_RESULT]);
if(!SQL_Execute(query))
{
sql_query_error(query);
}
else
{
if(stats[STAT_BAN_QUERY_NAME][0])
{
server_print("El ban de %s expiró", stats[STAT_BAN_QUERY_NAME]);
chat_color(0, "%s !yEl ban de !g%s!y expiró.", SZPREFIX, stats[STAT_BAN_QUERY_NAME]);
log_to_file("ban_systime_expire.txt", "El ban de <%s> expiró", stats[STAT_BAN_QUERY_NAME]);
}
else
{
server_print("El ban de %s expiró", stats[STAT_BAN_QUERY_RESULT]);
chat_color(0, "%s !yEl ban de !g%s!y expiró.", SZPREFIX, stats[STAT_BAN_QUERY_RESULT]);
log_to_file("ban_systime_expire.txt", "El ban de <%s> expiró", stats[STAT_BAN_QUERY_RESULT]);
}
TrieDeleteKey(g_trie_ban_stats, stats[STAT_BAN_QUERY_RESULT]);
ArrayDeleteItem(g_array_ban_stats, i);
SQL_FreeHandle(query);
}
}
}
}
set_task(get_pcvar_float(g_cvar_ban_system_update_frequency), "check_user_unixtime");
}
public client_putinserver(id)
{
get_user_name(id, g_user_name[id], 31);
get_user_ip(id, g_user_ip[id], charsmax(g_user_ip[]), .without_port = 1);
get_user_authid(id, g_user_authid[id], charsmax(g_user_authid[]));
g_user_ban_admin[id][0] = '^0';
g_user_ban_reason[id][0] = '^0';
g_user_ban_register[id][0] = '^0';
g_user_ban_expire[id][0] = '^0';
g_user_ban_type_name[id][0] = '^0';
g_user_ban_map[id][0] = '^0';
g_user_ban_add[id][0] = '^0';
g_user_unban_name[id][0] = '^0';
g_user_ban_reason[id][0] = '^0';
g_user_ban_selection[id] = 0;
g_user_page_selection[id] = 0;
g_user_ban_minutes[id] = 0;
g_user_ban_minutes_per_day_calculation[id] = 0;
g_user_ban_minutes_per_hour_calculation[id] = 0;
g_user_ban_status[id] = 0;
g_user_ban_type[id] = 0;
g_user_unban_selected[id] = 0;
set_task(0.25, "check_user_ban", id);
}
public check_user_ban(id)
{
new stats[STATS_BAN_STRUCT];
if(TrieGetArray(g_trie_ban_stats, g_user_ip[id], stats, sizeof(stats)) || TrieGetArray(g_trie_ban_stats, g_user_authid[id], stats, sizeof(stats)))
{
g_user_ban_status[id] = 1;
copy(g_user_ban_admin[id], charsmax(g_user_ban_admin[]), stats[STAT_BAN_ADMIN_NAME]);
copy(g_user_ban_reason[id], charsmax(g_user_ban_reason[]), stats[STAT_BAN_ADMIN_REASON]);
copy(g_user_ban_map[id], charsmax(g_user_ban_map[]), stats[STAT_BAN_ADMIN_MAP]);
copy(g_user_ban_register[id], charsmax(g_user_ban_register[]), stats[STAT_BAN_ADMIN_REGISTER]);
copy(g_user_ban_expire[id], charsmax(g_user_ban_expire[]), stats[STAT_BAN_ADMIN_EXPIRE]);
copy(g_user_ban_type_name[id], charsmax(g_user_ban_type_name[]), stats[STAT_BAN_TYPE_NAME]);
g_user_ban_minutes[id] = stats[STAT_BAN_ADMIN_MINUTES];
g_user_page_selection[id] = stats[STAT_BAN_TYPE];
clcmd_changeteam(id);
return;
}
}
reset_vars_string(id)
{
g_user_ban_add[id][0] = '^0';
}
public concmd_ban_add_ip(id, level, cid)
{
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED;
new Handle:query, args[35], reason[21], minutes[10], time[32], unixtime, name[32], map[32];
read_argv(1, args, charsmax(args));
read_argv(2, minutes, 9);
read_argv(3, reason, 20);
if(strlen(args) < 5)
{
console_print(id, "La IP introducida debe contener más de 5 carácteres");
return PLUGIN_HANDLED;
}
if(!isdigit(minutes[0]))
{
console_print(id, "Los minutos no pueden ser letras");
return PLUGIN_HANDLED;
}
if(!str_to_num(minutes))
{
console_print(id, "Tenés que introducir los minutos del ban");
return PLUGIN_HANDLED;
}
if(strlen(reason) < REASON_MIN_LENGTH)
{
console_print(id, "La razón del ban debe tener al menos 5 carácteres");
return PLUGIN_HANDLED;
}
else if(strlen(reason) > REASON_MAX_LENGTH)
{
console_print(id, "La razón del ban no debe superar los 20 carácteres");
return PLUGIN_HANDLED;
}
copy(g_user_ban_reason[id], charsmax(g_user_ban_reason[]), reason);
g_user_ban_minutes[id] = str_to_num(minutes);
if(TrieKeyExists(g_trie_ban_stats, args))
{
console_print(id, "La IP introducida ya existe en la base de datos");
return PLUGIN_HANDLED;
}
unixtime = (get_systime() + (g_user_ban_minutes[id] * 60));
get_time("%d/%m/%Y - %H:%M:%S", time, 31);
format_time(g_user_ban_expire[id], 31, "%d/%m/%Y - %H:%M:%S", unixtime);
get_user_name(id, name, 31);
get_mapname(map, 31);
query = SQL_PrepareQuery(g_sql_connection, "INSERT INTO `%s` (`ban_admin_name`, `ban_reason`, `ban_user`, `ban_time`, `ban_map`, `ban_register`, `ban_expire`, `ban_minutes`, `ban_page`) VALUES (^"%s^", ^"%s^", ^"%s^", '%d', ^"%s^", ^"%s^", ^"%s^", '%d', '%d');", SQL_TABLE, g_user_name[id], g_user_ban_reason[id], args, unixtime, map, time, g_user_ban_expire[id], g_user_ban_minutes[id], g_user_page_selection[id]);
if(!SQL_Execute(query))
{
sql_query_error(query);
}
else
{
SQL_FreeHandle(query);
chat_color(0, "%s !g%s!y baneó la IP !g%s!y. Razón: !g%s!y.", SZPREFIX, g_user_name[id], args, g_user_ban_reason[id]);
chat_color(0, "%s !yMinutos: !g%d minuto%s !t(%s)!y.", SZPREFIX, g_user_ban_minutes[id], (g_user_ban_minutes[id] == 1) ? "" : "s", check_time_calculated(g_user_ban_minutes[id]), (g_user_ban_minutes[id] == 1) ? "" : "s");
log_to_file("ban_systime_ban_ip.txt", "<%s> baneó la IP <%s>", g_user_name[id], args);
check_copy_stats(g_user_name[id], g_user_ban_reason[id], map, time, g_user_ban_expire[id], "", args, "", g_user_ban_minutes[id], MENU_BAN_IP, unixtime);
reset_vars_string(id);
}
return PLUGIN_HANDLED;
}
public concmd_ban_add_steamid(id, level, cid)
{
if(!cmd_access(id, level, cid, 2))
{
return PLUGIN_HANDLED;
}
new Handle:query, args[35], reason[21], minutes[10], time[32], unixtime, name[32], map[32];
read_argv(1, args, charsmax(args));
read_argv(2, minutes, 9);
read_argv(3, reason, 20);
if(strlen(args) < 5)
{
console_print(id, "El SteamID introducido debe contener más de 5 carácteres");
return PLUGIN_HANDLED;
}
if(!isdigit(minutes[0]))
{
console_print(id, "Los minutos no pueden ser letras");
return PLUGIN_HANDLED;
}
if(!str_to_num(minutes))
{
console_print(id, "Tenés que introducir los minutos del ban");
return PLUGIN_HANDLED;
}
if(strlen(reason) < REASON_MIN_LENGTH)
{
console_print(id, "La razón del ban debe tener al menos 5 carácteres");
return PLUGIN_HANDLED;
}
else if(strlen(reason) > REASON_MAX_LENGTH)
{
console_print(id, "La razón del ban no debe superar los 20 carácteres");
return PLUGIN_HANDLED;
}
copy(g_user_ban_reason[id], charsmax(g_user_ban_reason[]), reason);
g_user_ban_minutes[id] = str_to_num(minutes);
if(TrieKeyExists(g_trie_ban_stats, args))
{
console_print(id, "El SteamID introducido ya existe en la base de datos");
return PLUGIN_HANDLED;
}
unixtime = (get_systime() + (g_user_ban_minutes[id] * 60));
get_time("%d/%m/%Y - %H:%M:%S", time, 31);
format_time(g_user_ban_expire[id], 31, "%d/%m/%Y - %H:%M:%S", unixtime);
get_user_name(id, name, 31);
get_mapname(map, 31);
query = SQL_PrepareQuery(g_sql_connection, "INSERT INTO `%s` (`ban_admin_name`, `ban_reason`, `ban_user`, `ban_time`, `ban_map`, `ban_register`, `ban_expire`, `ban_minutes`, `ban_page`) VALUES (^"%s^", ^"%s^", ^"%s^", '%d', ^"%s^", ^"%s^", ^"%s^", '%d', '%d');", SQL_TABLE, g_user_name[id], g_user_ban_reason[id], args, unixtime, map, time, g_user_ban_expire[id], g_user_ban_minutes[id], g_user_page_selection[id]);
if(!SQL_Execute(query))
{
sql_query_error(query);
}
else
{
SQL_FreeHandle(query);
chat_color(0, "%s !g%s!y baneó el SteamID !g%s!y. Razón: !g%s!y.", SZPREFIX, g_user_name[id], args, g_user_ban_reason[id]);
chat_color(0, "%s !yMinutos: !g%d minuto%s !t(%s)!y.", SZPREFIX, g_user_ban_minutes[id], (g_user_ban_minutes[id] == 1) ? "" : "s", check_time_calculated(g_user_ban_minutes[id]), (g_user_ban_minutes[id] == 1) ? "" : "s");
log_to_file("ban_systime_ban_authid.txt", "<%s> baneó el SteamID <%s>", g_user_name[id], args);
check_copy_stats(g_user_name[id], g_user_ban_reason[id], map, time, g_user_ban_expire[id], "", args, "", g_user_ban_minutes[id], MENU_BAN_STEAMID, unixtime);
reset_vars_string(id);
}
return PLUGIN_HANDLED;
}
public client_disconnected(id)
{
static i, add_disconnected;
add_disconnected = 1;
for(i = 0; i < g_number_users_disconnected; i++)
{
if(equal(g_user_ip[id], g_user_disconnected[i][USER_IP]) && equal(g_user_authid[id], g_user_disconnected[i][USER_STEAMID]))
{
add_disconnected = 0;
break;
}
}
if(!add_disconnected)
{
return;
}
if(g_number_users_disconnected == 10)
{
g_number_users_disconnected = 0;
}
copy(g_user_disconnected[g_number_users_disconnected][USER_NAME], 31, g_user_name[id]);
copy(g_user_disconnected[g_number_users_disconnected][USER_IP], 16, g_user_ip[id]);
copy(g_user_disconnected[g_number_users_disconnected][USER_STEAMID], charsmax(g_user_disconnected[]), g_user_authid[id]);
g_number_users_disconnected++;
}
public fw_ClientUserInfoChanged(id, buffer)
{
static name[32];
engfunc(EngFunc_InfoKeyValue, buffer, "name", name, charsmax(name));
if(equali(name, g_user_name[id]))
{
return FMRES_IGNORED;
}
engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", name);
copy(g_user_name[id], 31, name);
return FMRES_IGNORED;
}
public clcmd_say(id)
{
if(g_user_ban_status[id])
{
chat_color(id, "%s !yEstás baneado, no podés escribir por el chat.", SZPREFIX);
return PLUGIN_HANDLED;
}
static args[9];
read_args(args, charsmax(args));
remove_quotes(args);
trim(args);
if(equal(args, "/ban") || equal(args, ".ban") || equal(args, "!ban"))
{
clcmd_ban(id);
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public clcmd_ban(id)
{
if(!is_user_admin(id))
{
return PLUGIN_HANDLED;
}
static menu;
menu = menu_create("\yMenú de ban SQL", "handled_clcmd_ban");
menu_additem(menu, "Expulsar\y,\w banear", "1", 0);
menu_additem(menu, "Lista de ban^n", "2", 0);
menu_additem(menu, "Último diez usuarios desconectados", "3", 0);
menu_additem(menu, "Información del plugin", "4", 0);
set_pdata_int(id, PRIVATE_DATA_CSMENUCODE, false, PRIVATE_DATA_LINUX);
menu_display(id, menu);
return PLUGIN_HANDLED;
}
public bs_admin_flags_check(id, menu, item)
{
if(!(get_user_flags(id) & ADMIN_RCON))
{
return ITEM_DISABLED;
}
return ITEM_ENABLED;
}
public handled_clcmd_ban(id, menu, item)
{
menu_destroy(menu);
switch(item)
{
case 0: show_menu_ban(id);
case 1: show_menu_ban_list(id);
case 2: show_view_last_ten_disconnected(id);
case 3:
{
static szmenu[530];
format(szmenu, charsmax(szmenu), "\yInformación del plugin^n^n\wSistema de ban: \y%s^n\wAutor: \y%s^n^n\r* \yComandos^n\r* \wamx_ban_add_ip \y^"IP^" ^"Razón^" ^"Minutos^"^n\r* \wamx_ban_add_steamid \y^"STEAMID^" ^"Razón^" ^"Minutos^"^n\r* \wamx_ban_add_hid \y^"HID^" ^"Razón^" ^"Minutos^"^n^n\r0. \w%s", PLUGIN_VERSION, PLUGIN_AUTHOR, OPTION_EXITNAME);
show_menu(id, (1<<9), szmenu, FM_NULLENT, "Handled Clcmd Ban");
}
}
return PLUGIN_HANDLED;
}
public handled___clcmd_ban(id, key)
{
if(key == 9)
{
clcmd_ban(id);
}
return PLUGIN_HANDLED;
}
show_menu_ban(id)
{
static menu;
menu = menu_create("\yExpulsar.. Banear usuario", "handled_show_menu_ban");
menu_additem(menu, "Expulsar \yUSUARIO^n", "1", 0);
menu_additem(menu, "Banear \yUSUARIO", "2", 0);
menu_additem(menu, "Banear \yIP", "3", 0);
menu_additem(menu, "Banear \ySTEAMID^n", "4", 0);
set_pdata_int(id, PRIVATE_DATA_CSMENUCODE, false, PRIVATE_DATA_LINUX);
menu_setprop(menu, MPROP_EXITNAME, OPTION_EXITNAME);
menu_display(id, menu);
}
public handled_show_menu_ban(id, menu, item)
{
menu_destroy(menu);
switch(item)
{
case MENU_EXIT: clcmd_ban(id);
case 0: show_menu_users(id, "Expulsar usuario", MENU_KICK);
case 1: show_menu_users(id, "Banear usuario", MENU_BAN);
case 2: show_option_ban(id, MENU_BAN_IP);
case 3: show_option_ban(id, MENU_BAN_STEAMID);
}
return PLUGIN_HANDLED;
}
show_menu_ban_list(id)
{
static menu, num[3], i, stats[STATS_BAN_STRUCT], sztext[28];
menu = menu_create("\yLista de ban^nPresioná para ver la información", "handled_show_menu_ban_list");
for(i = 0; i < ArraySize(g_array_ban_stats); i++)
{
ArrayGetArray(g_array_ban_stats, i, stats);
num_to_str((i + 1), num, charsmax(num));
if(stats[STAT_BAN_QUERY_NAME][0])
{
copy(sztext, charsmax(sztext), stats[STAT_BAN_QUERY_NAME]);
}
else
{
copy(sztext, charsmax(sztext), stats[STAT_BAN_QUERY_RESULT]);
}
menu_additem(menu, sztext, num);
}
menu_setprop(menu, MPROP_BACKNAME, OPTION_BACKNAME);
menu_setprop(menu, MPROP_NEXTNAME, OPTION_NEXTNAME);
menu_setprop(menu, MPROP_EXITNAME, OPTION_EXITNAME);
menu_display(id, menu);
}
public handled_show_menu_ban_list(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
clcmd_ban(id);
return PLUGIN_HANDLED;
}
static num[3], access, item_name[35], sztext[400], stats[STATS_BAN_STRUCT];
menu_item_getinfo(menu, item, access, num, charsmax(num), item_name, charsmax(item_name), access);
g_user_unban_selected[id] = str_to_num(num) - 1;
ArrayGetArray(g_array_ban_stats, g_user_unban_selected[id], stats);
formatex(sztext, charsmax(sztext), "\r* \yInformación del ban \d(%s)^n^n\r* \wAdministrador: \y%s^n\r* \wRazón: \y%s^n\r* \wMapa: \y%s^n\r* \wMinutos: \y%d minuto%s^n\r* \wTiempo calculado: \y%s^n\r* \wFecha del ban: \y%s^n\r* \wEl ban expira en la fecha: \y%s^n^n\r1. \wRemover el ban^n\r0. \wVolver al menú anterior", item_name, stats[STAT_BAN_ADMIN_NAME], stats[STAT_BAN_ADMIN_REASON], stats[STAT_BAN_ADMIN_MAP], stats[STAT_BAN_ADMIN_MINUTES], (stats[STAT_BAN_ADMIN_MINUTES] == 1) ? "" : "s", check_time_calculated(stats[STAT_BAN_ADMIN_MINUTES]), stats[STAT_BAN_ADMIN_REGISTER], stats[STAT_BAN_ADMIN_EXPIRE]);
show_menu(id, (1<<0)|(1<<9), sztext, FM_NULLENT, "Show Menu Information");
copy(g_user_unban_name[id], charsmax(g_user_unban_name[]), item_name);
return PLUGIN_HANDLED;
}
public handled_show_menu_ban_information(id, key)
{
switch(key)
{
case 0:
{
static sztext[100];
format(sztext, charsmax(sztext), "\y¿Estás seguro de desbanear esto?^n\wSeleccionado: \y%s?^n^n\r1. \wSí^n\r2. \wNo", g_user_unban_name[id]);
show_menu(id, (1<<0)|(1<<1), sztext, -1, "Show Answer Unban");
}
case 9: show_menu_ban_list(id);
}
return PLUGIN_HANDLED;
}
public handled_show_answer_unban(id, key)
{
switch(key)
{
case 0:
{
new Handle:query, stats[STATS_BAN_STRUCT];
ArrayGetArray(g_array_ban_stats, g_user_unban_selected[id], stats);
query = SQL_PrepareQuery(g_sql_connection, "DELETE FROM `%s` WHERE `ban_user` = ^"%s^";", SQL_TABLE, stats[STAT_BAN_QUERY_RESULT]);
if (!SQL_Execute(query))
sql_query_error(query);
else
{
static name[32];
get_user_name(id, name, 31);
if (stats[STAT_BAN_QUERY_NAME][0])
{
chat_color(0, "%s !g%s!y desbaneó a !g%s!y.", SZPREFIX, name, stats[STAT_BAN_QUERY_NAME]);
log_to_file("ban_systime_unban.txt", "<%s> desbaneó a <%s>", stats[STAT_BAN_QUERY_NAME]);
TrieDeleteKey(g_trie_ban_stats, stats[STAT_BAN_QUERY_NAME]);
}
else
{
chat_color(0, "%s !g%s!y desbaneó a !g%s!y.", SZPREFIX, name, stats[STAT_BAN_QUERY_RESULT]);
log_to_file("ban_systime_unban.txt", "<%s> desbaneó a <%s>", stats[STAT_BAN_QUERY_RESULT]);
TrieDeleteKey(g_trie_ban_stats, stats[STAT_BAN_QUERY_RESULT]);
}
ArrayDeleteItem(g_array_ban_stats, g_user_unban_selected[id]);
show_menu_ban_list(id);
SQL_FreeHandle(query);
}
}
case 1: clcmd_ban(id);
}
return PLUGIN_HANDLED;
}
show_view_last_ten_disconnected(id)
{
static menu;
menu = menu_create("\yÚltimo diez usuarios desconectados", "handled_show_view_last_ten_disconnected");
menu_additem(menu, "Ver lista en menú", "1", 0);
menu_additem(menu, "Ver lista en consola", "2", 0);
menu_setprop(menu, MPROP_BACKNAME, OPTION_BACKNAME);
menu_setprop(menu, MPROP_NEXTNAME, OPTION_NEXTNAME);
menu_setprop(menu, MPROP_EXITNAME, OPTION_EXITNAME);
menu_display(id, menu);
}
public handled_show_view_last_ten_disconnected(id, menu, item)
{
menu_destroy(menu);
switch(item)
{
case MENU_EXIT: clcmd_ban(id);
case 0: show_view_users_disconnected(id, 0);
case 1: show_view_users_disconnected(id, 1);
}
return PLUGIN_HANDLED;
}
show_view_users_disconnected(id, page)
{
static i, sztext[128];
switch(page)
{
case 0:
{
static menu, num[2];
menu = menu_create("\yUsuarios desconectados^nNombre de usuario | IP | STEAMID", "handled_show_view_users_disconnected");
for (i = 0; i < g_number_users_disconnected; i++)
{
num_to_str((i + 1), num, charsmax(num));
format(sztext, 127, "%s \r|\d%s \r| \d%s \r| \d%s", g_user_disconnected[i][USER_NAME], g_user_disconnected[i][USER_IP], g_user_disconnected[i][USER_STEAMID]);
menu_additem(menu, sztext, num, _, menu_makecallback("bs_check_users_disconnected"));
}
menu_setprop(menu, MPROP_BACKNAME, OPTION_BACKNAME);
menu_setprop(menu, MPROP_NEXTNAME, OPTION_NEXTNAME);
menu_setprop(menu, MPROP_EXITNAME, OPTION_EXITNAME);
menu_display(id, menu);
}
case 1:
{
client_cmd(id, "toggleconsole");
console_print(id, "===== USUARIOS DESCONECTADOS =====");
console_print(id, "");
console_print(id, "");
console_print(id, "");
console_print(id, "# Nombre de usuario | IP | STEAMID | HWID");
for(i = 0; i < g_number_users_disconnected; i++)
{
format(sztext, 127, "%d. %s | %s | %s", (i + 1), g_user_disconnected[i][USER_NAME], g_user_disconnected[i][USER_IP], g_user_disconnected[i][USER_STEAMID]);
console_print(id, sztext);
}
console_print(id, "");
console_print(id, "");
console_print(id, "");
console_print(id, "");
console_print(id, "===== USUARIOS DESCONECTADOS =====");
show_view_last_ten_disconnected(id);
}
}
return PLUGIN_HANDLED;
}
public bs_check_users_disconnected(id, menu, item)
{
return ITEM_DISABLED;
}
public handled_show_view_users_disconnected(id, menu, item)
{
menu_destroy(menu);
if(item == MENU_EXIT)
{
show_view_last_ten_disconnected(id);
}
return PLUGIN_HANDLED;
}
show_menu_users(id, const tittle[], type)
{
static menu, i, num[3];
menu = menu_create(tittle, "handled_show_menu_users");
g_user_page_selection[id] = type;
for(i = 1; i <= g_maxplayers{0}; i++)
{
if(!is_user_connected(i))
{
continue;
}
num_to_str((i + 1), num, charsmax(num));
menu_additem(menu, g_user_name[i], num);
}
menu_setprop(menu, MPROP_BACKNAME, OPTION_BACKNAME);
menu_setprop(menu, MPROP_NEXTNAME, OPTION_NEXTNAME);
menu_setprop(menu, MPROP_EXITNAME, OPTION_BACKNAME);
set_pdata_int(id, PRIVATE_DATA_CSMENUCODE, false, PRIVATE_DATA_LINUX);
menu_display(id, menu);
}
public handled_show_menu_users(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
show_menu_ban(id);
return PLUGIN_HANDLED;
}
static num[3];
static access;
static itemid;
menu_item_getinfo(menu, item, access, num, charsmax(num), _, _, access);
itemid = str_to_num(num) - 1;
menu_destroy(menu);
if(is_user_connected(itemid))
{
switch(g_user_page_selection[id])
{
case MENU_BAN:
{
g_user_ban_selection[id] = itemid;
show_option_ban(id, g_user_page_selection[id]);
}
case MENU_KICK:
{
chat_color(id, "%s !g%s!y expulsó a !g%s!y del servidor.", SZPREFIX, g_user_name[id], g_user_name[itemid]);
server_cmd("kick #%d ^"Un administrador te expulsó del servidor^"", get_user_userid(itemid));
show_menu_users(id, "Expulsar usuario", MENU_KICK);
}
}
}
return PLUGIN_HANDLED;
}
show_option_ban(id, page)
{
g_user_page_selection[id] = page;
static menu[512];
switch(page)
{
case MENU_BAN:
{
static name[32];
get_user_name(g_user_ban_selection[id], name, 31);
format(menu, charsmax(menu), "\yBanear usuario^n^n\r* \wUsuario: \y%s^n^n\r1. \wSeleccionar otro usuario^n\r2. \wCalcular días en minutos: \y%d \d(%d minuto(s))^n\r3. \wCalcular horas en minutos: \y%d \d(%d minuto(s))^n^n\r* \dMinutos en total: \y%d^n^n\r4. \wIntroducir minutos: \y%d^n\r5. \wIntroducir razón: \y%s^n^n\r6. \yTipo de ban: \d%s^n\r7. \yEjecutar el ban^n^n\r0. \wVolver al menú anterior", name, g_user_ban_minutes_per_day_calculation[id], (1440 * g_user_ban_minutes_per_day_calculation[id]), g_user_ban_minutes_per_hour_calculation[id], (60 * g_user_ban_minutes_per_hour_calculation[id]), ((1440 * g_user_ban_minutes_per_day_calculation[id]) + (60 * g_user_ban_minutes_per_hour_calculation[id])), g_user_ban_minutes[id], g_user_ban_reason[id], BAN_TYPES[g_user_ban_type[id]]);
show_menu(id, (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<9), menu, -1, "Show Option Ban");
}
case MENU_BAN_IP:
{
format(menu, charsmax(menu), "\yBanear IP^n^n\r* \wIP: \y%s^n^n\r1. \wIntroducir IP^n\r2. \wCalcular días en minutos: \y%d \d(%d minuto(s))^n\r3. \wCalcular horas en minutos: \y%d \d(%d minuto(s))^n^n\r* \dMinutos en total: \y%d^n^n\r4. \wIntroducir minutos: \y%d^n\r5. \wIntroducir razón: \y%s^n^n\r6. \yAgregar IP^n^n^n\r0. \wVolver al menú anterior", g_user_ban_add[id], g_user_ban_minutes_per_day_calculation[id], (1440 * g_user_ban_minutes_per_day_calculation[id]), g_user_ban_minutes_per_hour_calculation[id], (60 * g_user_ban_minutes_per_hour_calculation[id]), ((1440 * g_user_ban_minutes_per_day_calculation[id]) + (60 * g_user_ban_minutes_per_hour_calculation[id])), g_user_ban_minutes[id], g_user_ban_reason[id]);
show_menu(id, (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<9), menu, -1, "Show Option Ban");
}
case MENU_BAN_STEAMID:
{
format(menu, charsmax(menu), "\yBanear STEAMID^n^n\r* \wSteamID: \y%s^n^n\r1. \wIntroducir SteamID^n\r2. \wCalcular días en minutos: \y%d \d(%d minuto(s))^n\r3. \wCalcular horas en minutos: \y%d \d(%d minuto(s))^n^n\r* \dMinutos en total: \y%d^n^n\r4. \wIntroducir minutos: \y%d^n\r5. \wIntroducir razón: \y%s^n^n\r6. \yAgregar STEAMID^n^n^n\r0. \wVolver al menú anterior", g_user_ban_add[id], g_user_ban_minutes_per_day_calculation[id], (1440 * g_user_ban_minutes_per_day_calculation[id]), g_user_ban_minutes_per_hour_calculation[id], (60 * g_user_ban_minutes_per_hour_calculation[id]), ((1440 * g_user_ban_minutes_per_day_calculation[id]) + (60 * g_user_ban_minutes_per_hour_calculation[id])), g_user_ban_minutes[id], g_user_ban_reason[id]);
show_menu(id, (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<9), menu, -1, "Show Option Ban");
}
}
return PLUGIN_HANDLED;
}
public handled_show_option_ban(id, key)
{
switch(key)
{
case 0:
{
switch(g_user_page_selection[id])
{
case MENU_BAN: show_menu_users(id, "Banear usuario", MENU_BAN);
case MENU_BAN_IP:
{
g_messagemode[id] = INTRODUCIR_IP;
client_cmd(id, "messagemode INTRODUCIR_IP");
}
case MENU_BAN_STEAMID:
{
g_messagemode[id] = INTRODUCIR_STEAMID;
client_cmd(id, "messagemode INTRODUCIR_STEAMID");
}
}
}
case 1:
{
g_messagemode[id] = CALCULAR_DIAS_EN_MINUTOS;
client_cmd(id, "messagemode CALCULAR_DIAS_EN_MINUTOS");
}
case 2:
{
g_messagemode[id] = CALCULAR_HORAS_EN_MINUTOS;
client_cmd(id, "messagemode CALCULAR_HORAS_EN_MINUTOS");
}
case 3:
{
g_messagemode[id] = INTRODUCIR_MINUTOS;
client_cmd(id, "messagemode INTRODUCIR_MINUTOS");
}
case 4:
{
g_messagemode[id] = INTRODUCIR_RAZON;
client_cmd(id, "messagemode INTRODUCIR_RAZON");
}
case 5:
{
switch(g_user_page_selection[id])
{
case MENU_BAN:
{
if(g_user_ban_type[id] == 2)
{
g_user_ban_type[id] = 0;
}
else
{
g_user_ban_type[id]++;
}
show_option_ban(id, g_user_page_selection[id]);
}
case MENU_BAN_IP:
{
if(!strlen(g_user_ban_reason[id]))
{
chat_color(id, "%s !yTenés que introducir la razón del ban.", SZPREFIX);
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
if(!g_user_ban_minutes[id])
{
chat_color(id, "%s !yTenés que introducir los minutos del ban.", SZPREFIX);
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
if(!g_user_ban_add[id][0])
{
chat_color(id, "%s !yTenès que introducir una IP", SZPREFIX);
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
new Handle:query, time[32], unixtime, name[32], map[32];
if(TrieKeyExists(g_trie_ban_stats, g_user_ban_add[id]))
{
chat_color(id, "%s !yLa IP introducida ya existe en la base de datos.", SZPREFIX);
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
unixtime = (get_systime() + (g_user_ban_minutes[id] * 60));
get_time("%d/%m/%Y - %H:%M:%S", time, 31);
format_time(g_user_ban_expire[id], 31, "%d/%m/%Y - %H:%M:%S", unixtime);
get_user_name(id, name, 31);
get_mapname(map, 31);
query = SQL_PrepareQuery(g_sql_connection, "INSERT INTO `%s` (`ban_admin_name`, `ban_reason`, `ban_user`, `ban_time`, `ban_map`, `ban_register`, `ban_expire`, `ban_minutes`, `ban_page`) VALUES (^"%s^", ^"%s^", ^"%s^", '%d', ^"%s^", ^"%s^", ^"%s^", '%d', '%d');", SQL_TABLE, g_user_name[id], g_user_ban_reason[id], g_user_ban_add[id], unixtime, map, time, g_user_ban_expire[id], g_user_ban_minutes[id], g_user_page_selection[id]);
if(!SQL_Execute(query))
{
sql_query_error(query);
}
else
{
SQL_FreeHandle(query);
chat_color(0, "%s !g%s!y baneó la IP !g%s!y durante !g%d minuto%s!y. Razón: !g%s!y.", SZPREFIX, name, g_user_ban_add[id], g_user_ban_minutes[id], (g_user_ban_minutes[id] == 1) ? "" : "s", g_user_ban_reason[id]);
chat_color(0, "%s !yMinutos: !g%d minuto%s !t(%s)!y.", SZPREFIX, g_user_ban_minutes[id], (g_user_ban_minutes[id] == 1) ? "" : "s", check_time_calculated(g_user_ban_minutes[id]), (g_user_ban_minutes[id] == 1) ? "" : "s");
log_to_file("ban_system_ban_ip.txt", "<%s> baneó la IP <%s>", g_user_name[id], g_user_ban_add[id]);
check_copy_stats(g_user_name[id], g_user_ban_reason[id], map, time, g_user_ban_expire[id], "", g_user_ban_add[id], "", g_user_ban_minutes[id], MENU_BAN_IP, unixtime);
reset_vars_string(id);
}
}
case MENU_BAN_STEAMID:
{
if(!strlen(g_user_ban_reason[id]))
{
chat_color(id, "%s !yTenés que introducir la razón del ban.", SZPREFIX);
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
if(!g_user_ban_minutes[id])
{
chat_color(id, "%s !yTenés que introducir los minutos del ban.", SZPREFIX);
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
if(!g_user_ban_add[id][0])
{
chat_color(id, "%s !yTenès que introducir un SteamID", SZPREFIX);
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
new Handle:query, time[32], unixtime, name[32], map[31];
if(TrieKeyExists(g_trie_ban_stats, g_user_ban_add[id]))
{
chat_color(id, "%s !yEl SteamID introducido ya existe en la base de datos.", SZPREFIX);
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
unixtime = (get_systime() + (g_user_ban_minutes[id] * 60));
get_time("%d/%m/%Y - %H:%M:%S", time, 31);
format_time(g_user_ban_expire[id], 31, "%d/%m/%Y - %H:%M:%S", unixtime);
get_user_name(id, name, 31);
get_mapname(map, 31);
query = SQL_PrepareQuery(g_sql_connection, "INSERT INTO `%s` (`ban_admin_name`, `ban_reason`, `ban_user`, `ban_time`, `ban_map`, `ban_register`, `ban_expire`, `ban_minutes`, `ban_page`) VALUES (^"%s^", ^"%s^", ^"%s^", '%d', ^"%s^", ^"%s^", ^"%s^", ^"%s^", '%d', '%d');", SQL_TABLE, g_user_name[id], g_user_ban_reason[id], g_user_ban_add[id], unixtime, map, time, g_user_ban_expire[id], g_user_ban_minutes[id], g_user_page_selection[id]);
if(!SQL_Execute(query))
{
sql_query_error(query);
}
else
{
SQL_FreeHandle(query);
chat_color(0, "%s !g%s!y baneó el SteamID !g%s!y durante !g%d minuto%s!y. Razón: !g%s!y.", SZPREFIX, name, g_user_ban_add[id], g_user_ban_minutes[id], (g_user_ban_minutes[id] == 1) ? "" : "s", g_user_ban_reason[id]);
log_to_file("ban_system_ban_authid.txt", "<%s> baneó el SteamID <%s>", g_user_name[id], g_user_ban_add[id]);
check_copy_stats(g_user_name[id], g_user_ban_reason[id], map, time, g_user_ban_expire[id], "", g_user_ban_add[id], "", g_user_ban_minutes[id], MENU_BAN_STEAMID, unixtime);
reset_vars_string(id);
}
}
}
}
case 6:
{
if(!strlen(g_user_ban_reason[id]))
{
chat_color(id, "%s !yTenés que introducir la razón del ban.", SZPREFIX);
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
if(!g_user_ban_minutes[id])
{
chat_color(id, "%s !yTenés que introducir los minutos del ban.", SZPREFIX);
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
if(!is_user_connected(g_user_ban_selection[id]))
{
chat_color(id, "%s !yEl usuario seleccionado se desconectó del servidor.", SZPREFIX);
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
new Handle:query, time[32], mapname[64], unixtime, name[32], myname[32], query_result[35];
switch(g_user_ban_type[id])
{
case BAN_IP: copy(query_result, 16, g_user_ip[g_user_ban_selection[id]]);
case BAN_STEAMID: copy(query_result, 35, g_user_authid[g_user_ban_selection[id]]);
}
if (TrieKeyExists(g_trie_ban_stats, query_result))
{
chat_color(id, "%s !yYa existe un registro insertado de este tipo.", SZPREFIX);
return PLUGIN_HANDLED;
}
unixtime = (get_systime() + (g_user_ban_minutes[id] * 60));
get_time("%d/%m/%Y - %H:%M:%S", time, 31);
format_time(g_user_ban_expire[g_user_ban_selection[id]], 31, "%d/%m/%Y - %H:%M:%S", unixtime);
get_mapname(mapname, 63);
get_user_name(id, myname, 31);
get_user_name(g_user_ban_selection[id], name, 31);
remove_quotes(g_user_ban_reason[id]);
trim(g_user_ban_reason[id]);
console_print(g_user_ban_selection[id], "");
console_print(g_user_ban_selection[id], "");
console_print(g_user_ban_selection[id], "****** BANEADO ******");
console_print(g_user_ban_selection[id], "");
console_print(g_user_ban_selection[id], "* Fuiste baneado del servidor");
console_print(g_user_ban_selection[id], "* Administrador: %s", g_user_name[id]);
console_print(g_user_ban_selection[id], "* Razón del ban: %s", g_user_ban_reason[id]);
console_print(g_user_ban_selection[id], "* Mapa: %s", mapname);
console_print(g_user_ban_selection[id], "* Tipo de ban: %s", BAN_TYPES[g_user_ban_type[id]]);
console_print(g_user_ban_selection[id], "* Minutos: %d minuto%s", g_user_ban_minutes[id], (g_user_ban_minutes[id] == 1) ? "" : "s");
console_print(g_user_ban_selection[id], "* Tiempo calculado: %s", check_time_calculated(g_user_ban_minutes[id]));
console_print(g_user_ban_selection[id], "* Fecha del ban: %s", time);
console_print(g_user_ban_selection[id], "* Expira en la fecha: %s", g_user_ban_expire[g_user_ban_selection[id]]);
console_print(g_user_ban_selection[id], "");
console_print(g_user_ban_selection[id], "* Fuiste baneado del servidor");
console_print(g_user_ban_selection[id], "");
console_print(g_user_ban_selection[id], "****** BANEADO ******");
console_print(g_user_ban_selection[id], "");
console_print(g_user_ban_selection[id], "");
query = SQL_PrepareQuery(g_sql_connection, "INSERT INTO `%s` (`ban_name`, `ban_admin_name`, `ban_reason`, `ban_user`, `ban_time`, `ban_map`, `ban_register`, `ban_expire`, `ban_type`, `ban_minutes`, `ban_page`) VALUES (^"%s^", ^"%s^", ^"%s^", ^"%s^", '%d', ^"%s^", ^"%s^", ^"%s^", ^"%s^", '%d', '%d');", SQL_TABLE, name, myname, g_user_ban_reason[id], query_result, unixtime, mapname, time, g_user_ban_expire[g_user_ban_selection[id]], BAN_TYPES[g_user_ban_type[id]], g_user_ban_minutes[id], g_user_page_selection[id]);
if(!SQL_Execute(query))
{
sql_query_error(query);
}
else
{
SQL_FreeHandle(query);
reset_vars_string(id);
}
check_copy_stats(g_user_name[id], g_user_ban_reason[id], mapname, time, g_user_ban_expire[g_user_ban_selection[id]], BAN_TYPES[g_user_ban_type[id]], query_result, g_user_name[g_user_ban_selection[id]], g_user_ban_minutes[id], g_user_page_selection[id], unixtime);
server_cmd("kick #%d ^"Te banearon del servidor, mirá tu consola^"", get_user_userid(g_user_ban_selection[id]));
chat_color(0, "%s !g%s!y baneó a !g%s!y. Razón: !g%s!y.", SZPREFIX, g_user_name[id], g_user_name[g_user_ban_selection[id]], g_user_ban_reason[id]);
chat_color(0, "%s !yMinutos: !g%d minuto%s !t(%s)!y.", SZPREFIX, g_user_ban_minutes[id], (g_user_ban_minutes[id] == 1) ? "" : "s", check_time_calculated(g_user_ban_minutes[id]), (g_user_ban_minutes[id] == 1) ? "" : "s");
log_to_file("ban_systime_ban.txt", "<%s> baneó a <%s>", g_user_name[id], g_user_name[g_user_ban_selection[id]]);
}
case 9: show_menu_ban(id);
}
return PLUGIN_HANDLED;
}
public clcmd_messagemode(id)
{
if(!is_user_admin(id))
{
return PLUGIN_HANDLED;
}
if(g_user_ban_status[id])
{
return PLUGIN_HANDLED;
}
static args[28];
read_args(args, 27);
remove_quotes(args);
trim(args);
switch(g_messagemode[id])
{
case CALCULAR_DIAS_EN_MINUTOS:
{
if (!isdigit(args[0]))
{
chat_color(id, "%s !ySolo están permitidos números.", SZPREFIX);
client_cmd(id, "messagemode CALCULAR_DIAS_EN_MINUTOS");
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
g_user_ban_minutes_per_day_calculation[id] = str_to_num(args);
show_option_ban(id, g_user_page_selection[id]);
}
case CALCULAR_HORAS_EN_MINUTOS:
{
if(!isdigit(args[0]))
{
chat_color(id, "%s !ySolo están permitidos números.", SZPREFIX);
client_cmd(id, "messagemode CALCULAR_HORAS_EN_MINUTOS");
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
g_user_ban_minutes_per_hour_calculation[id] = str_to_num(args);
show_option_ban(id, g_user_page_selection[id]);
}
case INTRODUCIR_MINUTOS:
{
if(!isdigit(args[0]))
{
chat_color(id, "%s !ySolo están permitidos números.", SZPREFIX);
client_cmd(id, "messagemode INTRODUCIR_MINUTOS");
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
g_user_ban_minutes[id] = str_to_num(args);
show_option_ban(id, g_user_page_selection[id]);
}
case INTRODUCIR_RAZON:
{
if(strlen(args) < 4)
{
chat_color(id, "%s !yLa razón del ban debe tener más de 4 carácteres.", SZPREFIX);
client_cmd(id, "messagemode INTRODUCIR_RAZON");
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
if (strlen(args) > REASON_MAX_LENGTH)
{
chat_color(id, "%s !yLa razón del ban no puede tener más de %d carácteres.", SZPREFIX, REASON_MAX_LENGTH);
client_cmd(id, "messagemode INTRODUCIR_RAZON");
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
copy(g_user_ban_reason[id], 127, args);
show_option_ban(id, g_user_page_selection[id]);
}
case INTRODUCIR_IP:
{
if (strlen(args) < 5)
{
chat_color(id, "%s !yLa IP debe tener más de 5 carácteres.", SZPREFIX);
client_cmd(id, "messagemode INTRODUCIR_IP");
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
if (!(contain(args, ".") != -1))
{
chat_color(id, "%s !yTenés que introducir una IP.", SZPREFIX);
client_cmd(id, "messagemode INTRODUCIR_IP");
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
copy(g_user_ban_add[id], 16, args);
show_option_ban(id, g_user_page_selection[id]);
}
case INTRODUCIR_STEAMID:
{
if(strlen(args) < 5)
{
chat_color(id, "%s !yEl SteamID debe tener más de 5 carácteres.", SZPREFIX);
client_cmd(id, "messagemode INTRODUCIR_STEAMID");
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
if(!(contain(args, "STEAM_") != -1))
{
chat_color(id, "%s !yTenés que introducir una SteamID.", SZPREFIX);
client_cmd(id, "messagemode INTRODUCIR_STEAMID");
show_option_ban(id, g_user_page_selection[id]);
return PLUGIN_HANDLED;
}
copy(g_user_ban_add[id], 16, args);
show_option_ban(id, g_user_page_selection[id]);
}
}
return PLUGIN_HANDLED;
}
public clcmd_changeteam(id)
{
if(g_user_ban_status[id])
{
show_menu_banned(id);
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
show_menu_banned(id)
{
static menu[400];
switch(g_user_page_selection[id])
{
case MENU_BAN: formatex(menu, charsmax(menu), "\yMenú de ban SQL desarrollado por \r%s^n^n\r* \yEstás baneado del servidor^n\r* \wAdministrador: \y%s^n\r* \wRazón: \y%s^n\r* \wMapa: \y%s^n\r* \wTipo de ban: \y%s^n\r* \wMinutos: \y%d minuto%s^n\r* \wTiempo calculado: \y%s^n\r* \wFecha del ban: \y%s^n\r* \wEl ban expira en la fecha: \y%s", PLUGIN_AUTHOR, g_user_ban_admin[id], g_user_ban_reason[id], g_user_ban_map[id], g_user_ban_type_name[id], g_user_ban_minutes[id], (g_user_ban_minutes[id] == 1) ? "" : "s", check_time_calculated(g_user_ban_minutes[id]), g_user_ban_register[id], g_user_ban_expire[id]);
case MENU_BAN_IP: formatex(menu, charsmax(menu), "\yMenú de ban SQL desarrollado por \r%s^n^n\r* \wTu IP fue baneada^n\r* \wAdministrador: \y%s^n\r* \wRazón: \y%s^n\r* \wTu IP fue agregada en el mapa: \y%s^n\r* \wMinutos: \y%d minuto%s^n\r* \wTiempo calculado: \y%s^n\r* \wFecha del ban: \y%s^n\r* \wEl ban expira en la fecha: \y%s", PLUGIN_AUTHOR, g_user_ban_admin[id], g_user_ban_reason[id], g_user_ban_map[id], g_user_ban_minutes[id], (g_user_ban_minutes[id] == 1) ? "" : "s", check_time_calculated(g_user_ban_minutes[id]), g_user_ban_register[id], g_user_ban_expire[id]);
case MENU_BAN_STEAMID: formatex(menu, charsmax(menu), "\yMenú de ban SQL desarrollado por \r%s^n^n\r* \yTu SteamID fue baneado^n\r* \wAdministrador: \y%s^n\r* \wRazón: \y%s^n\r* \wTu SteamID fue agregado en el mapa: \y%s^n\r* \wMinutos: \y%d minuto%s^n\r* \wTiempo calculado: \y%s^n\r* \wFecha del ban: \y%s^n\r* \wEl ban expira en la fecha: \y%s", PLUGIN_AUTHOR, g_user_ban_admin[id], g_user_ban_reason[id], g_user_ban_map[id], g_user_ban_minutes[id], (g_user_ban_minutes[id] == 1) ? "" : "s", check_time_calculated(g_user_ban_minutes[id]), g_user_ban_register[id], g_user_ban_expire[id]);
}
show_menu(id, FM_NULLENT, menu, FM_NULLENT, "Show Menu Banned");
}
check_time_calculated(user_minutes)
{
new hours, minutes, days, time_calculated[40];
minutes = user_minutes;
days = 0;
hours = 0;
while(minutes >= 1440)
{
days++;
minutes -= 1440;
}
while(minutes >= 60)
{
hours++;
minutes -= 60;
}
format(time_calculated, charsmax(time_calculated), "%d día%s, %d hora%s, %d minuto%s", days, (days == 1) ? "" : "s", hours, (hours == 1) ? "" : "s", minutes, (minutes == 1) ? "" : "s");
return time_calculated;
}
chat_color(id, const input[], any:...)
{
static message[191];
vformat(message, 190, input, 3);
replace_all(message, 190, "!g", "^4");
replace_all(message, 190, "!t", "^3");
replace_all(message, 190, "!y", "^1");
message_begin((id) ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, get_user_msgid("SayText"), .player = id);
write_byte((id) ? id : 33);
write_string(message);
message_end();
}
tambien tengo este problema para conectarme via mysql, mi base de datos esta bien ya que funcione perfectamente con otros plugins
L 07/26/2022 - 00:49:43: Access denied for user 'MGHGrL'@'%' to database 'sql_ban_databasee'
L 07/26/2022 - 00:49:43: [AMXX] Plugin ("ban_system.amxx") is setting itself as failed.
L 07/26/2022 - 00:49:43: [AMXX] Plugin says: Access denied for user 'MGHGrL'@'%' to database 'sql_ban_databasee'
L 07/26/2022 - 00:49:43: [AMXX] Displaying debug trace (plugin "ban_system.amxx", version "v2.0")
L 07/26/2022 - 00:49:43: [AMXX] Run time error 1: forced exit
L 07/26/2022 - 00:49:43: [AMXX] [0] ban_system.sma::plugin_init (line 187)
RE: Crear las tablas directamente desde el sma - [E]manuelitop15 - 26/07/2022
Código PHP: crear_tablas() { new tabla[512];
format(tabla, charsmax(tabla), "CREATE TABLE IF NOT EXISTS `sql_ban` \ (\ ban_name varchar(32) NOT NULL DEFAULT '', \ ban_admin_name varchar(32) NOT NULL DEFAULT '', \ ban_reason varchar(21) NOT NULL DEFAULT '', \ ban_user varchar(32) NOT NULL DEFAULT '', \ ban_time int NOT NULL DEFAULT '0', \ ban_map varchar(21) NOT NULL DEFAULT '', \ ban_register varchar(21) NOT NULL DEFAULT '', \ ban_expire varchar(21) NOT NULL DEFAULT '', \ ban_type varchar(8) NOT NULL DEFAULT '', \ ban_minutes int NOT NULL DEFAULT '0', \ ban_page int NOT NULL DEFAULT '0')");
new Handle: query; query = SQL_PrepareQuery(g_sql_connection, tabla);
if (SQL_Execute(query)) SQL_FreeHandle(query); // Se crean las tablas correctamente else { SQL_FreeHandle(query);
log_to_file("SQL_ERROR_TABLAS.txt", "No se pudo crear las tablas por un error en la consulta."); } }
arriba de
Código PHP: g_trie_ban_stats = TrieCreate();
pones
Quedaria...
Código PHP: if(g_sql_connection == Empty_Handle) { log_to_file("SQL_Connection.log", "%s", szerror); set_fail_state(szerror); return; }
crear_tablas();
g_trie_ban_stats = TrieCreate(); g_array_ban_stats = ArrayCreate(STATS_BAN_STRUCT);
Respecto a este error
Código PHP: Access denied for user 'MGHGrL'@'%' to database 'sql_ban_databasee'
Generalmente me sucedia porque estaba mal configurado la contraseña o ponia mal los datos al hacer la conexion.
RE: Crear las tablas directamente desde el sma - alexiways - 26/07/2022
Pregunta, esto está comentado no?
#define USE_SQLITE
RE: Crear las tablas directamente desde el sma - kikizon2 - 26/07/2022
(26/07/2022, 12:45 PM)alexiways escribió: Pregunta, esto está comentado no?
Código: #define USE_SQLITE
RE: Crear las tablas directamente desde el sma - Meliodas - 26/07/2022
(26/07/2022, 07:52 AM)[E]manuelitop15 escribió: Código PHP: crear_tablas() { new tabla[512];
format(tabla, charsmax(tabla), "CREATE TABLE IF NOT EXISTS `sql_ban` \ (\ ban_name varchar(32) NOT NULL DEFAULT '', \ ban_admin_name varchar(32) NOT NULL DEFAULT '', \ ban_reason varchar(21) NOT NULL DEFAULT '', \ ban_user varchar(32) NOT NULL DEFAULT '', \ ban_time int NOT NULL DEFAULT '0', \ ban_map varchar(21) NOT NULL DEFAULT '', \ ban_register varchar(21) NOT NULL DEFAULT '', \ ban_expire varchar(21) NOT NULL DEFAULT '', \ ban_type varchar(8) NOT NULL DEFAULT '', \ ban_minutes int NOT NULL DEFAULT '0', \ ban_page int NOT NULL DEFAULT '0')");
new Handle: query; query = SQL_PrepareQuery(g_sql_connection, tabla);
if (SQL_Execute(query)) SQL_FreeHandle(query); // Se crean las tablas correctamente else { SQL_FreeHandle(query);
log_to_file("SQL_ERROR_TABLAS.txt", "No se pudo crear las tablas por un error en la consulta."); } }
arriba de
Código PHP: g_trie_ban_stats = TrieCreate();
pones
Quedaria...
Código PHP: if(g_sql_connection == Empty_Handle) { log_to_file("SQL_Connection.log", "%s", szerror); set_fail_state(szerror); return; }
crear_tablas();
g_trie_ban_stats = TrieCreate(); g_array_ban_stats = ArrayCreate(STATS_BAN_STRUCT);
Respecto a este error
Código PHP: Access denied for user 'MGHGrL'@'%' to database 'sql_ban_databasee'
Generalmente me sucedia porque estaba mal configurado la contraseña o ponia mal los datos al hacer la conexion.
Gracias, pero me sigue dando el mismo problema, coloco otro plugin con mysql y si conecta perfectamente no entiendo porque con este no quiere conectar
Código PHP: L 07/26/2022 - 13:25:41: Access denied for user 'MGHGrL'@'%' to database 'sql_ban_database' L 07/26/2022 - 13:25:41: [AMXX] Plugin ("ban_system.amxx") is setting itself as failed. L 07/26/2022 - 13:25:41: [AMXX] Plugin says: Access denied for user 'MGHGrL'@'%' to database 'sql_ban_database' L 07/26/2022 - 13:25:41: [AMXX] Displaying debug trace (plugin "ban_system.amxx", version "v2.0") L 07/26/2022 - 13:25:41: [AMXX] Run time error 1: forced exit L 07/26/2022 - 13:25:41: [AMXX] [0] ban_system.sma::plugin_init (line 196)
RE: Crear las tablas directamente desde el sma - [N]drs - 26/07/2022
(26/07/2022, 02:28 PM)Meliodas escribió: Gracias, pero me sigue dando el mismo problema, coloco otro plugin con mysql y si conecta perfectamente no entiendo porque con este no quiere conectar
Código PHP: L 07/26/2022 - 13:25:41: Access denied for user 'MGHGrL'@'%' to database 'sql_ban_database' L 07/26/2022 - 13:25:41: [AMXX] Plugin ("ban_system.amxx") is setting itself as failed. L 07/26/2022 - 13:25:41: [AMXX] Plugin says: Access denied for user 'MGHGrL'@'%' to database 'sql_ban_database' L 07/26/2022 - 13:25:41: [AMXX] Displaying debug trace (plugin "ban_system.amxx", version "v2.0") L 07/26/2022 - 13:25:41: [AMXX] Run time error 1: forced exit L 07/26/2022 - 13:25:41: [AMXX] [0] ban_system.sma::plugin_init (line 196)
Comenta esa linea
Código: //#define USE_SQLITE
RE: Crear las tablas directamente desde el sma - Meliodas - 27/07/2022
Muchas gracias a todos, ya me funciona perfectamente .
|