Mensajes: 375
Temas: 55
Registro en: Jan 2016
Reputación:
9
26/10/2018, 12:40 PM
(Última modificación: 17/02/2019, 12:03 AM por Cristian' . Edited 1 time in total.)
Sistema de Ban SQLite3
• Créditos:
• Descripción:
Un sistema de ban que interactúa con una base de datos, tiene la posibilidad de agregar IP's, SteamID's y HID's por un tiempo establecido en minutos, baneando al usuario y facilitando así la exclusión del mismo.
• Cambios:
-
Optimización del código
-
Reducción de tablas
-
Ahora se puede ver la información del usuario baneado en la lista de ban.
-
Corregido algunos errores.
-
Ahora se crea un log por cada acción realizada: ban, unban, etc...
• Comandos:
• Características del menú principal
-
Expulsar usuarios: Expulsar a un usuario del servidor
-
Banear usuarios: Banea a un usuario del servidor: El ban puede ser por (IP / STEAMID / HWIWD [sXe necesario]).
-
Banear IP: Agrega una IP a la base de datos.
-
Banear STEAMID: Agrega un STEAMID a la base de datos.
-
Lista de usuarios baneados con su descripción del ban:
-
Lista de ban: Permite ver los usuarios baneados, así mismo el NOMBRE DE USUARIO, IP, STEAMID y HID de los últimos diez que se desconectaron.
• Menú de ban
-
Calcular días en minutos: Permite calcular los minutos que equivalen a x días.
-
Calcular horas en minutos: Permite calcular los minutos que equivalen a x horas.
-
Introducir minutos: Introduce los minutos del ban.
-
Introducir razón: Introduce la razón del ban.
-
Minutos en total: Calcula los minutos introducidos de los días y las horas.
-
Tipo de ban: Introduce el tipo de ban (IP / STEAMID / HID).
-
Ejecutar el ban: Ejecuta el ban al usuario.
• Imágenes
• Lista de usuarios desconectados
- Permite visualizar los últimos diez usuarios que se desconectaron del servidor, el cual obtiene su NOMBRE DE USUARIO, IP, STEAMID y HID.
- Puede visualizarse a través de consola o en un menú.
Archivos adjuntos
sql_ban_database.sq3 (Tamaño: 7 KB / Descargas: 134)
Descargar AMXX / ban_system.sma (Tamaño: 53.58 KB / Descargas: 223)
Mensajes: 4,637
Temas: 73
Registro en: Oct 2013
Reputación:
44
Una buena pregunta sería, por qué interactúa con 2 bases de datos
O al menos eso da a entender el título
Mensajes: 375
Temas: 55
Registro en: Jan 2016
Reputación:
9
(26/10/2018, 12:46 PM) Neeeeeeeeeel.- escribió: Una buena pregunta sería, por qué interactúa con 2 bases de datos
O al menos eso da a entender el título
En realidad el título se refiere a que tiene para
MySQL y
SQLite3 (?
Mensajes: 7,178
Temas: 93
Registro en: Aug 2014
Reputación:
63
Por qué no hacer directamente algo como 'amx_add_ban "ip/steamid/hid" "tiempo" "razon"'?
Mensajes: 7
Temas: 1
Registro en: Jul 2014
26/10/2018, 03:49 PM
(Última modificación: 26/10/2018, 03:54 PM por heNK' .)
En Breaking Gaming, usabamos el Advanced Bans vía MySQL.
Edito: (Trae UnBan Menú, Ban Menú). Y MySQL Threads de Destro.
Código del AMX:
Código PHP:
#include <amxmodx> #include <amxmisc> #include <engine> #include <regex> #include <colorchat> #define PLUGIN_NAME "Advanced Bans" #define PLUGIN_VERSION "0.8.1" #define PLUGIN_AUTHOR "Exolent MySQL heNK'" #pragma semicolon 1 // =============================================== // CUSTOMIZATION STARTS HERE // =============================================== // uncomment the line below if you want this plugin to // load old bans from the banned.cfg and listip.cfg files //#define KEEP_DEFAULT_BANS // uncomment the line below if you want the history to be in one file //#define HISTORY_ONE_FILE // if you must have a maximum amount of bans to be compatible with AMXX versions before 1.8.0 // change this number to your maximum amount // if you would rather have unlimited (requires AMXX 1.8.0 or higher) then set it to 0 #define MAX_BANS 0 // if you want to use SQL for your server, then uncomment the line below #define USING_SQL // =============================================== // CUSTOMIZATION ENDS HERE // =============================================== #if defined USING_SQL #include <mysqlt> new const Datos_MySQLt [ ] [ ] = { "" , //Web "" , //User "" , //Pass "" //Db }; #define TABLE_NAME "advanced_bans" #define KEY_NAME "name" #define KEY_STEAMID "steamid" #define KEY_BANLENGTH "banlength" #define KEY_UNBANTIME "unbantime" #define KEY_REASON "reason" #define KEY_ADMIN_NAME "admin_name" #define KEY_ADMIN_STEAMID "admin_steamid" #define RELOAD_BANS_INTERVAL 60.0 #endif #define REGEX_IP_PATTERN "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b" #define REGEX_STEAMID_PATTERN "^^STEAM_0:(0|1):\d+$" new Regex : g_IP_pattern ; new Regex : g_SteamID_pattern ; new g_regex_return ; /*bool:IsValidIP(const ip[]) { return regex_match_c(ip, g_IP_pattern, g_regex_return) > 0; }*/ #define IsValidIP(%1) (regex_match_c(%1, g_IP_pattern, g_regex_return) > 0) /*bool:IsValidAuthid(const authid[]) { return regex_match_c(authid, g_SteamID_pattern, g_regex_return) > 0; }*/ #define IsValidAuthid(%1) (regex_match_c(%1, g_SteamID_pattern, g_regex_return) > 0) enum // for name displaying { ACTIVITY_NONE , // nothing is shown ACTIVITY_HIDE , // admin name is hidden ACTIVITY_SHOW // admin name is shown }; new const g_admin_activity [] = { ACTIVITY_NONE , // amx_show_activity 0 = show nothing to everyone ACTIVITY_HIDE , // amx_show_activity 1 = hide admin name from everyone ACTIVITY_SHOW , // amx_show_activity 2 = show admin name to everyone ACTIVITY_SHOW , // amx_show_activity 3 = show name to admins but hide it from normal users ACTIVITY_SHOW , // amx_show_activity 4 = show name to admins but show nothing to normal users ACTIVITY_HIDE // amx_show_activity 5 = hide name from admins but show nothing to normal users }; new const g_normal_activity [] = { ACTIVITY_NONE , // amx_show_activity 0 = show nothing to everyone ACTIVITY_HIDE , // amx_show_activity 1 = hide admin name from everyone ACTIVITY_SHOW , // amx_show_activity 2 = show admin name to everyone ACTIVITY_HIDE , // amx_show_activity 3 = show name to admins but hide it from normal users ACTIVITY_NONE , // amx_show_activity 4 = show name to admins but show nothing to normal users ACTIVITY_NONE // amx_show_activity 5 = hide name from admins but show nothing to normal users }; #if MAX_BANS <= 0 enum _ : BannedData { bd_name [ 32 ], bd_steamid [ 35 ], bd_banlength , bd_unbantime [ 32 ], bd_reason [ 128 ], bd_admin_name [ 64 ], bd_admin_steamid [ 35 ] }; new Trie : g_trie ; new Array: g_array ; #else new g_names [ MAX_BANS ][ 32 ]; new g_steamids [ MAX_BANS ][ 35 ]; new g_banlengths [ MAX_BANS ]; new g_unbantimes [ MAX_BANS ][ 32 ]; new g_reasons [ MAX_BANS ][ 128 ]; new g_admin_names [ MAX_BANS ][ 64 ]; new g_admin_steamids [ MAX_BANS ][ 35 ]; #endif new g_total_bans ; #if !defined USING_SQL new g_ban_file [ 64 ]; #else new Handle : g_iHost ; new Handle : g_sql_tuple ; new bool : g_loading_bans = true ; #endif new ab_immunity ; new ab_bandelay ; new ab_unbancheck ; new amx_show_activity ; #if MAX_BANS <= 0 new Array: g_maxban_times ; new Array: g_maxban_flags ; #else #define MAX_BANLIMITS 30 new g_maxban_times [ MAX_BANLIMITS ]; new g_maxban_flags [ MAX_BANLIMITS ]; #endif new g_total_maxban_times ; new g_unban_entity ; new g_max_clients ; new g_msgid_SayText ; new g_iSelectedPlayer [ 33 ]; enum _ : TypeData { Tiempo_Name [ 32 ], Tiempo_Tiempo }; new const szRazones [][] = { "Wall Hack" , "Stopear Screen" , "Insultar" , "Spammear" , "Molestar / Flood" , "Tirar Servidor" , "Cheat" }; new const szTiempos [][] = { { "5 Minutos" , 5 }, { "10 Minutos" , 10 }, { "20 Minutos" , 20 }, { "30 Minutos" , 30 }, { "40 Minutos" , 40 }, { "50 Minutos" , 50 }, { "1 Hora" , 60 }, { "1 Dia" , 1440 }, { "Permanente" , 0 } }; public plugin_init () { register_plugin ( PLUGIN_NAME , PLUGIN_VERSION , PLUGIN_AUTHOR ); register_cvar ( "advanced_bans" , PLUGIN_VERSION , FCVAR_SPONLY ); register_dictionary ( "advanced_bans.txt" ); register_concmd ( "amx_ban" , "CmdBan" , ADMIN_BAN , "<nick, #userid, authid> <time in minutes> <reason>" ); register_concmd ( "amx_banip" , "CmdBanIp" , ADMIN_BAN , "<nick, #userid, authid> <time in minutes> <reason>" ); register_concmd ( "amx_addban" , "CmdAddBan" , ADMIN_BAN , "<name> <authid or ip> <time in minutes> <reason>" ); register_concmd ( "amx_unban" , "CmdUnban" , ADMIN_BAN , "<authid or ip>" ); register_concmd ( "amx_banlist" , "CmdBanList" , ADMIN_BAN , "[start] -- shows everyone who is banned" ); register_srvcmd ( "amx_addbanlimit" , "CmdAddBanLimit" , - 1 , "<flag> <time in minutes>" ); register_clcmd ( "amx_bans_menu" , "CmdBanMenu" , ADMIN_BAN , "muestra un menu con los players" ); register_clcmd ( "amx_unbanmenu" , "CmdUnBanMenu" , ADMIN_BAN , "muestra un menu con los players banneados" ); register_clcmd ( "INGRESAR_TIEMPO" , "Messagemode_Tiempo" ); register_clcmd ( "INGRESAR_RAZON" , "Messagemode_Razon" ); ab_immunity = register_cvar ( "ab_immunity" , "1" ); ab_bandelay = register_cvar ( "ab_bandelay" , "1.0" ); ab_unbancheck = register_cvar ( "ab_unbancheck" , "5.0" ); amx_show_activity = register_cvar ( "amx_show_activity" , "2" ); #if MAX_BANS <= 0 g_trie = TrieCreate (); g_array = ArrayCreate ( BannedData ); #endif #if !defined MAX_BANLIMITS g_maxban_times = ArrayCreate ( 1 ); g_maxban_flags = ArrayCreate ( 1 ); #endif #if !defined USING_SQL get_datadir ( g_ban_file , sizeof ( g_ban_file ) - 1 ); add ( g_ban_file , sizeof ( g_ban_file ) - 1 , "/advanced_bans.txt" ); LoadBans (); #else g_iHost = mysql_makehost ( Datos_MySQLt [ 0 ], Datos_MySQLt [ 1 ], Datos_MySQLt [ 2 ], Datos_MySQLt [ 3 ] ); new error1 [ 32 ], errnum ; g_sql_tuple = mysql_connect ( g_iHost , errnum , error1 , sizeof ( error1 ) ); if ( errnum ){ log_to_file ( "MySQLt_AB_init.log" , "Error: [%d] - [%s]" , errnum , error1 ); return pause ( "a" ); } mysql_performance ( 25 , 25 , 1 ); LoadBans (); #endif new error [ 2 ]; g_IP_pattern = regex_compile ( REGEX_IP_PATTERN , g_regex_return , error , sizeof ( error ) - 1 ); g_SteamID_pattern = regex_compile ( REGEX_STEAMID_PATTERN , g_regex_return , error , sizeof ( error ) - 1 ); g_max_clients = get_maxplayers (); g_msgid_SayText = get_user_msgid ( "SayText" ); return PLUGIN_CONTINUE ; } public plugin_cfg () { CreateUnbanEntity (); } public CreateUnbanEntity () { static failtimes ; g_unban_entity = create_entity ( "info_target" ); if( ! is_valid_ent ( g_unban_entity ) ) { ++ failtimes ; log_amx ( "[ERROR] Failed to create unban entity (%i/10)" , failtimes ); if( failtimes < 10 ) { set_task ( 1.0 , "CreateUnbanEntity" ); } else { log_amx ( "[ERROR] Could not create unban entity!" ); } return; } entity_set_string ( g_unban_entity , EV_SZ_classname , "unban_entity" ); entity_set_float ( g_unban_entity , EV_FL_nextthink , get_gametime () + 1.0 ); register_think ( "unban_entity" , "FwdThink" ); } public client_authorized ( client ) { static authid [ 35 ]; get_user_authid ( client , authid , sizeof ( authid ) - 1 ); static ip [ 35 ]; get_user_ip ( client , ip , sizeof ( ip ) - 1 , 1 ); #if MAX_BANS > 0 static banned_authid [ 35 ], bool : is_ip ; for( new i = 0 ; i < g_total_bans ; i ++ ) { copy ( banned_authid , sizeof ( banned_authid ) - 1 , g_steamids [ i ]); is_ip = bool :( containi ( banned_authid , "." ) != - 1 ); if( is_ip && equal ( ip , banned_authid ) || ! is_ip && equal ( authid , banned_authid ) ) { static name [ 32 ], reason [ 128 ], unbantime [ 32 ], admin_name [ 32 ], admin_steamid [ 64 ]; copy ( name , sizeof ( name ) - 1 , g_names [ i ]); copy ( reason , sizeof ( reason ) - 1 , g_reasons [ i ]); new banlength = g_banlengths [ i ]; copy ( unbantime , sizeof ( unbantime ) - 1 , g_unbantimes [ i ]); copy ( admin_name , sizeof ( admin_name ) - 1 , g_admin_names [ i ]); copy ( admin_steamid , sizeof ( admin_steamid ) - 1 , g_admin_steamids [ i ]); PrintBanInformation ( client , name , banned_authid , reason , banlength , unbantime , admin_name , admin_steamid , true , true ); set_task ( get_pcvar_float ( ab_bandelay ), "TaskDisconnectPlayer" , client ); break; } } #else static array_pos ; if( TrieGetCell ( g_trie , authid , array_pos ) || TrieGetCell ( g_trie , ip , array_pos ) ) { static data [ BannedData ]; ArrayGetArray ( g_array , array_pos , data ); PrintBanInformation ( client , data [ bd_name ], data [ bd_steamid ], data [ bd_reason ], data [ bd_banlength ], data [ bd_unbantime ], data [ bd_admin_name ], data [ bd_admin_steamid ], true , true ); set_task ( get_pcvar_float ( ab_bandelay ), "TaskDisconnectPlayer" , client ); } #endif } public CmdBanMenu ( id ){ if (!( get_user_flags ( id ) & ADMIN_BAN )){ ColorChat ( id , GREEN , "^4[AdvancedBans] ^1No tienes acceso al ban menú." ); return PLUGIN_HANDLED ; } new iMenu = menu_create ( "\r[AdvancedBans] \wBan Menu" , "HandlerBanMenu" ); new iUsers [ 12 ]; for ( new i = 1 ; i <= g_max_clients ; i ++ ) { if ( is_user_connected ( i ) ) { new name [ 33 ]; get_user_name ( i , name , 32 ); num_to_str ( get_user_userid ( i ), iUsers , sizeof ( iUsers ) ); menu_additem ( iMenu , name , iUsers ); } } menu_setprop ( iMenu , MPROP_BACKNAME , "Atras" ); menu_setprop ( iMenu , MPROP_NEXTNAME , "Siguiente" ); menu_setprop ( iMenu , MPROP_EXITNAME , "Salir" ); menu_display ( id , iMenu ); return PLUGIN_HANDLED ; } public HandlerBanMenu ( id , menu , item ){ if( item == MENU_EXIT ){ menu_destroy ( menu ); return PLUGIN_HANDLED ; } new iAccess , callback ; new szData [ 64 ], szName [ 64 ]; menu_item_getinfo ( menu , item , iAccess , szData , sizeof ( szData ), szName , sizeof ( szName ), callback ); g_iSelectedPlayer [ id ] = str_to_num ( szData ); client_cmd2 ( id , "messagemode ^" INGRESAR_TIEMPO ^ "" ); return PLUGIN_HANDLED ; } new Tiempo [ 33 ][ 32 ]; new Razon [ 64 ][ 32 ]; public Messagemode_Tiempo ( id ){ //get_user_name(id, g_iSelectedPlayer[id], sizeof(g_iSelectedPlayer[])); ColorChat ( id , GREEN , "^4[AdvancedBans] ^1Ingresa el tiempo a banear" ); read_args ( Tiempo [ id ], sizeof ( Tiempo [])); remove_quotes ( Tiempo [ id ]); new arg [ 33 ]; read_argv ( 1 , arg , 32 ); remove_quotes ( arg ); if(! is_str_num ( arg ) || ! is_str_num ( Tiempo [ id ])){ ColorChat ( id , GREEN , "^4[AdvancedBans] ^1Sólo números" ); client_cmd2 ( id , "messagemode ^" INGRESAR_TIEMPO ^ "" ); return PLUGIN_HANDLED ; } client_cmd2 ( id , "messagemode ^" INGRESAR_RAZON ^ "" ); return PLUGIN_CONTINUE ; } public Messagemode_Razon ( id ){ ColorChat ( id , GREEN , "^4[AdvancedBans] ^1Ingresa la razon!" ); ColorChat ( id , GREEN , "^4[AdvancedBans] ^1Una vez dado al enter, el player se banear automaticamente" ); read_args ( Razon [ id ], sizeof ( Razon [])); remove_quotes ( Razon [ id ]); new arg [ 33 ]; read_argv ( 1 , arg , 32 ); remove_quotes ( arg ); if(! strlen ( arg ) || ! strlen ( Razon [ id ])){ ColorChat ( id , GREEN , "^4[AdvancedBans] ^1No puedes dejar un espacio en blanco" ); client_cmd2 ( id , "messagemode ^" INGRESAR_RAZON ^ "" ); return PLUGIN_HANDLED ; } client_cmd2 ( id , "amx_ban ^" #%d^" ^"%s^" ^"%s^"", g_iSelectedPlayer[id], Tiempo[id], Razon[id]); return PLUGIN_CONTINUE ; } public CmdBan ( client , level , cid ) { if( ! cmd_access ( client , level , cid , 4 ) ) return PLUGIN_HANDLED ; static arg [ 128 ]; read_argv ( 1 , arg , sizeof ( arg ) - 1 ); new target = cmd_target ( client , arg , GetTargetFlags ( client )); if( ! target ) return PLUGIN_HANDLED ; static target_authid [ 35 ]; get_user_authid ( target , target_authid , sizeof ( target_authid ) - 1 ); if( ! IsValidAuthid ( target_authid ) ) { console_print ( client , "[AdvancedBans] %L" , client , "AB_NOT_AUTHORIZED" ); return PLUGIN_HANDLED ; } #if MAX_BANS <= 0 if( TrieKeyExists ( g_trie , target_authid ) ) { console_print ( client , "[AdvancedBans] %L" , client , "AB_ALREADY_BANNED_STEAMID" ); return PLUGIN_HANDLED ; } #else for( new i = 0 ; i < g_total_bans ; i ++ ) { if( ! strcmp ( target_authid , g_steamids [ i ], 1 ) ) { console_print ( client , "[AdvancedBans] %L" , client , "AB_ALREADY_BANNED_STEAMID" ); return PLUGIN_HANDLED ; } } #endif if( is_user_admin ( target ) || client == target ){ console_print ( client , "[AdvancedBans] No puedes banear a un ADMIN o a ti mismo" ); return PLUGIN_HANDLED ; } read_argv ( 2 , arg , sizeof ( arg ) - 1 ); new length = str_to_num ( arg ); new maxlength = GetMaxBanTime ( client ); if( maxlength && (! length || length > maxlength ) ) { console_print ( client , "[AdvancedBans] %L" , client , "AB_MAX_BAN_TIME" , maxlength ); return PLUGIN_HANDLED ; } static unban_time [ 64 ]; if( length == 0 ) { formatex ( unban_time , sizeof ( unban_time ) - 1 , "%L" , client , "AB_PERMANENT_BAN" ); } else { GenerateUnbanTime ( length , unban_time , sizeof ( unban_time ) - 1 ); } read_argv ( 3 , arg , sizeof ( arg ) - 1 ); static admin_name [ 64 ], target_name [ 32 ]; get_user_name ( client , admin_name , sizeof ( admin_name ) - 1 ); get_user_name ( target , target_name , sizeof ( target_name ) - 1 ); static admin_authid [ 35 ]; get_user_authid ( client , admin_authid , sizeof ( admin_authid ) - 1 ); AddBan ( target_name , target_authid , arg , length , unban_time , admin_name , admin_authid ); PrintBanInformation ( target , target_name , target_authid , arg , length , unban_time , admin_name , admin_authid , true , true ); PrintBanInformation ( client , target_name , target_authid , arg , length , unban_time , admin_name , admin_authid , false , false ); set_task ( get_pcvar_float ( ab_bandelay ), "TaskDisconnectPlayer" , target ); GetBanTime ( length , unban_time , sizeof ( unban_time ) - 1 ); PrintActivity ( admin_name , "^x04[AdvancedBans] $name ^x01 :^x03 banned %s. Reason: %s. Ban Length: %s" , target_name , arg , unban_time ); Log ( "%s <%s> banned %s <%s> || Reason: ^" % s ^ " || Ban Length: %s" , admin_name , admin_authid , target_name , target_authid , arg , unban_time ); return PLUGIN_HANDLED ; } public CmdBanIp ( client , level , cid ) { if( ! cmd_access ( client , level , cid , 4 ) ) return PLUGIN_HANDLED ; static arg [ 128 ]; read_argv ( 1 , arg , sizeof ( arg ) - 1 ); new target = cmd_target ( client , arg , GetTargetFlags ( client )); if( ! target ) return PLUGIN_HANDLED ; static target_ip [ 35 ]; get_user_ip ( target , target_ip , sizeof ( target_ip ) - 1 , 1 ); #if MAX_BANS <= 0 if( TrieKeyExists ( g_trie , target_ip ) ) { console_print ( client , "[AdvancedBans] %L" , client , "AB_ALREADY_BANNED_IP" ); return PLUGIN_HANDLED ; } #else for( new i = 0 ; i < g_total_bans ; i ++ ) { if( ! strcmp ( target_ip , g_steamids [ i ], 1 ) ) { console_print ( client , "[AdvancedBans] %L" , client , "AB_ALREADY_BANNED_IP" ); return PLUGIN_HANDLED ; } } #endif if( is_user_admin ( target ) || client == target ){ console_print ( client , "[AdvancedBans] No puedes banear a un ADMIN o a ti mismo" ); return PLUGIN_HANDLED ; } read_argv ( 2 , arg , sizeof ( arg ) - 1 ); new length = str_to_num ( arg ); new maxlength = GetMaxBanTime ( client ); if( maxlength && (! length || length > maxlength ) ) { console_print ( client , "[AdvancedBans] %L" , client , "AB_MAX_BAN_TIME" , maxlength ); return PLUGIN_HANDLED ; } static unban_time [ 32 ]; if( length == 0 ) { formatex ( unban_time , sizeof ( unban_time ) - 1 , "%L" , client , "AB_PERMANENT_BAN" ); } else { GenerateUnbanTime ( length , unban_time , sizeof ( unban_time ) - 1 ); } read_argv ( 3 , arg , sizeof ( arg ) - 1 ); static admin_name [ 64 ], target_name [ 32 ]; get_user_name ( client , admin_name , sizeof ( admin_name ) - 1 ); get_user_name ( target , target_name , sizeof ( target_name ) - 1 ); static admin_authid [ 35 ]; get_user_authid ( client , admin_authid , sizeof ( admin_authid ) - 1 ); AddBan ( target_name , target_ip , arg , length , unban_time , admin_name , admin_authid ); PrintBanInformation ( target , target_name , target_ip , arg , length , unban_time , admin_name , admin_authid , true , true ); PrintBanInformation ( client , target_name , target_ip , arg , length , unban_time , admin_name , admin_authid , false , false ); set_task ( get_pcvar_float ( ab_bandelay ), "TaskDisconnectPlayer" , target ); GetBanTime ( length , unban_time , sizeof ( unban_time ) - 1 ); PrintActivity ( admin_name , "^x04[AdvancedBans] $name ^x01 :^x03 banned %s. Reason: %s. Ban Length: %s" , target_name , arg , unban_time ); Log ( "%s <%s> banned %s <%s> || Reason: ^" % s ^ " || Ban Length: %s" , admin_name , admin_authid , target_name , target_ip , arg , unban_time ); return PLUGIN_HANDLED ; } public CmdAddBan ( client , level , cid ) { if( ! cmd_access ( client , level , cid , 5 ) ) return PLUGIN_HANDLED ; static target_name [ 32 ], target_authid [ 35 ], bantime [ 10 ], reason [ 128 ]; read_argv ( 1 , target_name , sizeof ( target_name ) - 1 ); read_argv ( 2 , target_authid , sizeof ( target_authid ) - 1 ); read_argv ( 3 , bantime , sizeof ( bantime ) - 1 ); read_argv ( 4 , reason , sizeof ( reason ) - 1 ); new bool : is_ip = bool :( containi ( target_authid , "." ) != - 1 ); if( ! is_ip && ! IsValidAuthid ( target_authid ) ) { console_print ( client , "[AdvancedBans] %L" , client , "AB_INVALID_STEAMID" ); console_print ( client , "[AdvancedBans] %L" , client , "AB_VALID_STEAMID_FORMAT" ); return PLUGIN_HANDLED ; } else if( is_ip ) { new pos = contain ( target_authid , ":" ); if( pos > 0 ) { target_authid [ pos ] = 0 ; } if( ! IsValidIP ( target_authid ) ) { console_print ( client , "[AdvancedBans] %L" , client , "AB_INVALID_IP" ); return PLUGIN_HANDLED ; } } #if MAX_BANS <= 0 if( TrieKeyExists ( g_trie , target_authid ) ) { console_print ( client , "[AdvancedBans] %L" , client , is_ip ? "AB_ALREADY_BANNED_IP" : "AB_ALREADY_BANNED_STEAMID" ); return PLUGIN_HANDLED ; } #else for( new i = 0 ; i < g_total_bans ; i ++ ) { if( ! strcmp ( target_authid , g_steamids [ i ], 1 ) ) { console_print ( client , "[AdvancedBans] %L" , client , is_ip ? "AB_ALREADY_BANNED_IP" : "AB_ALREADY_BANNED_STEAMID" ); return PLUGIN_HANDLED ; } } #endif new length = str_to_num ( bantime ); new maxlength = GetMaxBanTime ( client ); if( maxlength && (! length || length > maxlength ) ) { console_print ( client , "[AdvancedBans] %L" , client , "AB_MAX_BAN_TIME" , maxlength ); return PLUGIN_HANDLED ; } if( is_user_connected ( find_player ( is_ip ? "d" : "c" , target_authid )) ) { client_cmd ( client , "amx_ban ^" % s ^ " %i ^" % s ^ "" , target_authid , length , reason ); return PLUGIN_HANDLED ; } static unban_time [ 32 ]; if( length == 0 ) { formatex ( unban_time , sizeof ( unban_time ) - 1 , "%L" , client , "AB_PERMANENT_BAN" ); } else { GenerateUnbanTime ( length , unban_time , sizeof ( unban_time ) - 1 ); } static admin_name [ 64 ], admin_authid [ 35 ]; get_user_name ( client , admin_name , sizeof ( admin_name ) - 1 ); get_user_authid ( client , admin_authid , sizeof ( admin_authid ) - 1 ); AddBan ( target_name , target_authid , reason , length , unban_time , admin_name , admin_authid ); PrintBanInformation ( client , target_name , target_authid , reason , length , unban_time , "" , "" , false , false ); GetBanTime ( length , unban_time , sizeof ( unban_time ) - 1 ); PrintActivity ( admin_name , "^x04[AdvancedBans] $name ^x01 :^x03 banned %s %s. Reason: %s. Ban Length: %s" , is_ip ? "IP" : "SteamID" , target_authid , reason , unban_time ); Log ( "%s <%s> banned %s <%s> || Reason: ^" % s ^ " || Ban Length: %s" , admin_name , admin_authid , target_name , target_authid , reason , unban_time ); return PLUGIN_HANDLED ; } public CmdUnBanMenu ( id ){ if (!( get_user_flags ( id ) & ADMIN_BAN )){ ColorChat ( id , GREEN , "^4[AdvancedBans] ^1No tienes acceso al ban menú." ); return PLUGIN_HANDLED ; } if( read_argc ()){ ColorChat ( id , GREEN , "^4[AdvancedBans] ^1Player Name ^3| ^1Razón del Ban ^3| ^1Admin Name" ); ColorChat ( id , GREEN , "^4[AdvancedBans] ^1Una vez seleccionado el player se baneara automaticamente" ); } new iMenu = menu_create ( "\r[AdvancedBans] \wUnban Menu:^n\wNombre \d| \wRazon \d| \wAdmin Name" , "HandlerUnBanMenu" ); if(! g_total_bans ) ColorChat ( id , GREEN , "^4[AdvancedBans] ^1No hay banneados en este momento" ); for ( new i = 0 ; i < g_total_bans ; i ++ ){ static data [ BannedData ]; ArrayGetArray ( g_array , i , data ); static iLen [ 127 ]; formatex ( iLen , 126 , "%s \r[%s] \d[%s]" , data [ bd_name ], data [ bd_reason ], data [ bd_admin_name ]); menu_additem ( iMenu , iLen ); } menu_setprop ( iMenu , MPROP_BACKNAME , "Atras" ); menu_setprop ( iMenu , MPROP_NEXTNAME , "Siguiente" ); menu_setprop ( iMenu , MPROP_EXITNAME , "Salir" ); menu_display ( id , iMenu ); return PLUGIN_HANDLED ; } public HandlerUnBanMenu ( id , menu , item ){ if( item == MENU_EXIT ){ menu_destroy ( menu ); return PLUGIN_HANDLED ; } new iAccess , callback ; new szData [ 64 ], szName [ 64 ]; menu_item_getinfo ( menu , item , iAccess , szData , sizeof ( szData ), szName , sizeof ( szName ), callback ); static data [ BannedData ]; ArrayGetArray ( g_array , item , data ); client_cmd2 ( id , "amx_unban ^" % s ^ "" , data [ bd_steamid ]); //new admin_name[33]; //get_user_name(id, admin_name, 32); //ColorChat(0, GREEN,"^4[AdvancedBans] %s^1 :^3 unbanned %s^1 [%s] [Ban Reason: %s]", admin_name, data[bd_name], data[bd_steamid], data[bd_reason]); //RemoveBan(item, data[bd_steamid]); menu_destroy ( menu ); return PLUGIN_HANDLED ; } public CmdUnban ( client , level , cid ) { if( ! cmd_access ( client , level , cid , 2 ) ) return PLUGIN_HANDLED ; static arg [ 35 ]; read_argv ( 1 , arg , sizeof ( arg ) - 1 ); #if MAX_BANS > 0 static banned_authid [ 35 ]; for( new i = 0 ; i < g_total_bans ; i ++ ) { copy ( banned_authid , sizeof ( banned_authid ) - 1 , g_steamids [ i ]); if( equal ( arg , banned_authid ) ) { static admin_name [ 64 ]; get_user_name ( client , admin_name , sizeof ( admin_name ) - 1 ); static name [ 32 ], reason [ 128 ]; copy ( name , sizeof ( name ) - 1 , g_names [ i ]); copy ( reason , sizeof ( reason ) - 1 , g_reasons [ i ]); PrintActivity ( admin_name , "^x04[AdvancedBans] $name ^x01 :^x03 unbanned %s^x01 [%s] [Ban Reason: %s]" , name , arg , reason ); static authid [ 35 ]; get_user_authid ( client , authid , sizeof ( authid ) - 1 ); Log ( "%s <%s> unbanned %s <%s> || Ban Reason: ^" % s ^ "" , admin_name , authid , name , arg , reason ); RemoveBan ( i ); return PLUGIN_HANDLED ; } } #else if( TrieKeyExists ( g_trie , arg ) ) { static array_pos ; TrieGetCell ( g_trie , arg , array_pos ); static data [ BannedData ]; ArrayGetArray ( g_array , array_pos , data ); static unban_name [ 32 ]; get_user_name ( client , unban_name , sizeof ( unban_name ) - 1 ); PrintActivity ( unban_name , "^x04[AdvancedBans] $name ^x01 :^x03 unbanned %s^x01 [%s] [Ban Reason: %s]" , data [ bd_name ], data [ bd_steamid ], data [ bd_reason ]); static admin_name [ 64 ]; get_user_name ( client , admin_name , sizeof ( admin_name ) - 1 ); static authid [ 35 ]; get_user_authid ( client , authid , sizeof ( authid ) - 1 ); Log ( "%s <%s> unbanned %s <%s> || Ban Reason: ^" % s ^ "" , admin_name , authid , data [ bd_name ], data [ bd_steamid ], data [ bd_reason ]); RemoveBan ( array_pos , data [ bd_steamid ]); return PLUGIN_HANDLED ; } #endif console_print ( client , "[AdvancedBans] %L" , client , "AB_NOT_IN_BAN_LIST" , arg ); return PLUGIN_HANDLED ; } public CmdBanList ( client , level , cid ) { if( ! cmd_access ( client , level , cid , 1 ) ) return PLUGIN_HANDLED ; if( ! g_total_bans ) { console_print ( client , "[AdvancedBans] %L" , client , "AB_NO_BANS" ); return PLUGIN_HANDLED ; } static start ; if( read_argc () > 1 ) { static arg [ 5 ]; read_argv ( 1 , arg , sizeof ( arg ) - 1 ); start = min ( str_to_num ( arg ), g_total_bans ) - 1 ; } else { start = 0 ; } new last = min ( start + 10 , g_total_bans ); if( client == 0 ) { server_cmd ( "echo ^" % L ^ "" , client , "AB_BAN_LIST_NUM" , start + 1 , last ); } else { client_cmd ( client , "echo ^" % L ^ "" , client , "AB_BAN_LIST_NUM" , start + 1 , last ); } for( new i = start ; i < last ; i ++ ) { #if MAX_BANS <= 0 static data [ BannedData ]; ArrayGetArray ( g_array , i , data ); PrintBanInformation ( client , data [ bd_name ], data [ bd_steamid ], data [ bd_reason ], data [ bd_banlength ], data [ bd_unbantime ], data [ bd_admin_name ], data [ bd_admin_steamid ], true , false ); #else static name [ 32 ], steamid [ 35 ], reason [ 128 ], banlength , unbantime [ 32 ], admin_name [ 32 ], admin_steamid [ 35 ]; copy ( name , sizeof ( name ) - 1 , g_names [ i ]); copy ( steamid , sizeof ( steamid ) - 1 , g_steamids [ i ]); copy ( reason , sizeof ( reason ) - 1 , g_reasons [ i ]); banlength = g_banlengths [ i ]; copy ( unbantime , sizeof ( unbantime ) - 1 , g_unbantimes [ i ]); copy ( admin_name , sizeof ( admin_name ) - 1 , g_admin_names [ i ]); copy ( admin_steamid , sizeof ( admin_steamid ) - 1 , g_admin_steamids [ i ]); PrintBanInformation ( client , name , steamid , reason , banlength , unbantime , admin_name , admin_steamid , true , false ); #endif } if( ++ last < g_total_bans ) { if( client == 0 ) { server_cmd ( "echo ^" % L ^ "" , client , "AB_BAN_LIST_NEXT" , last ); } else { client_cmd ( client , "echo ^" % L ^ "" , client , "AB_BAN_LIST_NEXT" , last ); } } return PLUGIN_HANDLED ; } public CmdAddBanLimit () { if( read_argc () != 3 ) { log_amx ( "amx_addbanlimit was used with incorrect parameters!" ); log_amx ( "Usage: amx_addbanlimit <flags> <time in minutes>" ); return PLUGIN_HANDLED ; } static arg [ 16 ]; read_argv ( 1 , arg , sizeof ( arg ) - 1 ); new flags = read_flags ( arg ); read_argv ( 2 , arg , sizeof ( arg ) - 1 ); new minutes = str_to_num ( arg ); #if !defined MAX_BANLIMITS ArrayPushCell ( g_maxban_flags , flags ); ArrayPushCell ( g_maxban_times , minutes ); #else if( g_total_maxban_times >= MAX_BANLIMITS ) { static notified ; if( ! notified ) { log_amx ( "The amx_addbanlimit has reached its maximum!" ); notified = 1 ; } return PLUGIN_HANDLED ; } g_maxban_flags [ g_total_maxban_times ] = flags ; g_maxban_times [ g_total_maxban_times ] = minutes ; #endif g_total_maxban_times ++; return PLUGIN_HANDLED ; } public FwdThink ( entity ) { if( entity != g_unban_entity ) return; #if defined USING_SQL if( g_total_bans > 0 && ! g_loading_bans ) #else if( g_total_bans > 0 ) #endif { static _hours [ 5 ], _minutes [ 5 ], _seconds [ 5 ], _month [ 5 ], _day [ 5 ], _year [ 7 ]; format_time ( _hours , sizeof ( _hours ) - 1 , "%H" ); format_time ( _minutes , sizeof ( _minutes ) - 1 , "%M" ); format_time ( _seconds , sizeof ( _seconds ) - 1 , "%S" ); format_time ( _month , sizeof ( _month ) - 1 , "%m" ); format_time ( _day , sizeof ( _day ) - 1 , "%d" ); format_time ( _year , sizeof ( _year ) - 1 , "%Y" ); // c = current // u = unban new c_hours = str_to_num ( _hours ); new c_minutes = str_to_num ( _minutes ); new c_seconds = str_to_num ( _seconds ); new c_month = str_to_num ( _month ); new c_day = str_to_num ( _day ); new c_year = str_to_num ( _year ); static unban_time [ 32 ]; static u_hours , u_minutes , u_seconds , u_month , u_day , u_year ; for( new i = 0 ; i < g_total_bans ; i ++ ) { #if MAX_BANS <= 0 static data [ BannedData ]; ArrayGetArray ( g_array , i , data ); if( data [ bd_banlength ] == 0 ) continue; #else if( g_banlengths [ i ] == 0 ) continue; #endif #if MAX_BANS <= 0 copy ( unban_time , sizeof ( unban_time ) - 1 , data [ bd_unbantime ]); #else copy ( unban_time , sizeof ( unban_time ) - 1 , g_unbantimes [ i ]); #endif replace_all ( unban_time , sizeof ( unban_time ) - 1 , ":" , " " ); replace_all ( unban_time , sizeof ( unban_time ) - 1 , "/" , " " ); parse ( unban_time ,\ _hours , sizeof ( _hours ) - 1 ,\ _minutes , sizeof ( _minutes ) - 1 ,\ _seconds , sizeof ( _seconds ) - 1 ,\ _month , sizeof ( _month ) - 1 ,\ _day , sizeof ( _day ) - 1 ,\ _year , sizeof ( _year ) - 1 ); u_hours = str_to_num ( _hours ); u_minutes = str_to_num ( _minutes ); u_seconds = str_to_num ( _seconds ); u_month = str_to_num ( _month ); u_day = str_to_num ( _day ); u_year = str_to_num ( _year ); if( u_year < c_year || u_year == c_year && u_month < c_month || u_year == c_year && u_month == c_month && u_day < c_day || u_year == c_year && u_month == c_month && u_day == c_day && u_hours < c_hours || u_year == c_year && u_month == c_month && u_day == c_day && u_hours == c_hours && u_minutes < c_minutes || u_year == c_year && u_month == c_month && u_day == c_day && u_hours == c_hours && u_minutes == c_minutes && u_seconds <= c_seconds ) { #if MAX_BANS <= 0 Log ( "Ban time is up for: %s [%s]" , data [ bd_name ], data [ bd_steamid ]); Print( "^x04[AdvancedBans]^x03 %s^x01[^x04%s^x01]^x03 ban time is up!^x01 [Ban Reason: %s]" , data [ bd_name ], data [ bd_steamid ], data [ bd_reason ]); RemoveBan ( i , data [ bd_steamid ]); #else Log ( "Ban time is up for: %s [%s]" , g_names [ i ], g_steamids [ i ]); Print( "^x04[AdvancedBans]^x03 %s^x01[^x04%s^x01]^x03 ban time is up!^x01 [Ban Reason: %s]" , g_names [ i ], g_steamids [ i ], g_reasons [ i ]); RemoveBan ( i ); #endif i --; // current pos was replaced with another ban, so we need to check it again. } } } entity_set_float ( g_unban_entity , EV_FL_nextthink , get_gametime () + get_pcvar_float ( ab_unbancheck )); } public TaskDisconnectPlayer ( client ) { server_cmd ( "kick #%i ^" Fuiste banneado del Servidor . Mira tu consola ^ "" , get_user_userid ( client )); //server_cmd("kick #%i ^"You are banned from this server. Check your console^"", get_user_userid(client)); } AddBan (const target_name [], const target_steamid [], const reason [], const length , const unban_time [], const admin_name [], const admin_steamid []) { #if MAX_BANS > 0 if( g_total_bans == MAX_BANS ) { log_amx ( "Ban list is full! (%i)" , g_total_bans ); return; } #endif #if defined USING_SQL static target_name2 [ 32 ], reason2 [ 128 ], admin_name2 [ 32 ]; MakeStringSQLSafe ( target_name , target_name2 , sizeof ( target_name2 ) - 1 ); MakeStringSQLSafe ( reason , reason2 , sizeof ( reason2 ) - 1 ); MakeStringSQLSafe ( admin_name , admin_name2 , sizeof ( admin_name2 ) - 1 ); static query [ 512 ]; formatex ( query , sizeof ( query ) - 1 ,\ "INSERT INTO `%s` (`%s`, `%s`, `%s`, `%s`, `%s`, `%s`, `%s`) VALUES ('%s', '%s', '%i', '%s', '%s', '%s', '%s');" ,\ TABLE_NAME , KEY_NAME , KEY_STEAMID , KEY_BANLENGTH , KEY_UNBANTIME , KEY_REASON , KEY_ADMIN_NAME , KEY_ADMIN_STEAMID ,\ target_name2 , target_steamid , length , unban_time , reason2 , admin_name2 , admin_steamid ); //SQL_ThreadQuery(g_sql_tuple, "QueryAddBan", query); mysql_query ( g_sql_tuple , "QueryAddBan" , query ); #else new f = fopen ( g_ban_file , "a+" ); fprintf ( f , "^" % s ^ " ^" % s ^ " %i ^" % s ^ " ^" % s ^ " ^" % s ^ " ^" % s ^ "^n" ,\ target_steamid ,\ target_name ,\ length ,\ unban_time ,\ reason ,\ admin_name ,\ admin_steamid ); fclose ( f ); #endif #if MAX_BANS <= 0 static data [ BannedData ]; copy ( data [ bd_name ], sizeof ( data [ bd_name ]) - 1 , target_name ); copy ( data [ bd_steamid ], sizeof ( data [ bd_steamid ]) - 1 , target_steamid ); data [ bd_banlength ] = length ; copy ( data [ bd_unbantime ], sizeof ( data [ bd_unbantime ]) - 1 , unban_time ); copy ( data [ bd_reason ], sizeof ( data [ bd_reason ]) - 1 , reason ); copy ( data [ bd_admin_name ], sizeof ( data [ bd_admin_name ]) - 1 , admin_name ); copy ( data [ bd_admin_steamid ], sizeof ( data [ bd_admin_steamid ]) - 1 , admin_steamid ); TrieSetCell ( g_trie , target_steamid , g_total_bans ); ArrayPushArray ( g_array , data ); #else copy ( g_names [ g_total_bans ], sizeof ( g_names []) - 1 , target_name ); copy ( g_steamids [ g_total_bans ], sizeof ( g_steamids []) - 1 , target_steamid ); g_banlengths [ g_total_bans ] = length ; copy ( g_unbantimes [ g_total_bans ], sizeof ( g_unbantimes []) - 1 , unban_time ); copy ( g_reasons [ g_total_bans ], sizeof ( g_reasons []) - 1 , reason ); copy ( g_admin_names [ g_total_bans ], sizeof ( g_admin_names []) - 1 , admin_name ); copy ( g_admin_steamids [ g_total_bans ], sizeof ( g_admin_steamids []) - 1 , admin_steamid ); #endif g_total_bans ++; #if MAX_BANS > 0 if( g_total_bans == MAX_BANS ) { log_amx ( "Ban list is full! (%i)" , g_total_bans ); } #endif } #if defined USING_SQL //public QueryAddBan(failstate, Handle:query, error[], errcode, data[], datasize, Float:queuetime) public QueryAddBan ( failstate , error [], errnum , data [], size , Float : queuetime ) { if( failstate == TQUERY_CONNECT_FAILED ) { set_fail_state ( "Could not connect to database." ); } else if( failstate == TQUERY_QUERY_FAILED ) { set_fail_state ( "Query failed." ); } else if( errnum ) { log_amx ( "Error on query: %s" , error ); } else { // Yay, ban was added! We can all rejoice! } } //public QueryDeleteBan(failstate, Handle:query, error[], errcode, data[], datasize, Float:queuetime) public QueryDeleteBan ( failstate , error [], errnum , data [], size , Float : queuetime ) { if( failstate == TQUERY_CONNECT_FAILED ) { set_fail_state ( "Could not connect to database." ); } else if( failstate == TQUERY_QUERY_FAILED ) { set_fail_state ( "Query failed." ); } else if( errnum ) { log_amx ( "Error on query: %s" , error ); } else { // Yay, ban was deleted! We can all rejoice! } } //public QueryLoadBans(failstate, Handle:query, error[], errcode, data[], datasize, Float:queuetime) public QueryLoadBans ( failstate , error [], errnum , data [], size , Float : queuetime ) { if( failstate == TQUERY_CONNECT_FAILED ) { set_fail_state ( "Could not connect to database." ); } else if( failstate == TQUERY_QUERY_FAILED ) { set_fail_state ( "Query failed." ); } else if( errnum ) { log_amx ( "Error on query: %s" , error ); } else { //if( SQL_NumResults(query) ) if ( mysql_num_results ( ) ) { #if MAX_BANS <= 0 static data [ BannedData ]; //while( SQL_MoreResults(query) ) while ( mysql_more_results ( ) ) #else //while( SQL_MoreResults(query) && g_total_bans < MAX_BANS ) while ( mysql_more_results ( ) && g_total_bans < MAX_BANS ); #endif { #if MAX_BANS <= 0 mysql_read_result ( 0 , data [ bd_name ], sizeof ( data [ bd_name ])- 1 ); mysql_read_result ( 1 , data [ bd_steamid ], sizeof ( data [ bd_steamid ])- 1 ); data [ bd_banlength ] = mysql_read_result ( 2 ); mysql_read_result ( 3 , data [ bd_unbantime ], sizeof ( data [ bd_unbantime ])- 1 ); mysql_read_result ( 4 , data [ bd_reason ], sizeof ( data [ bd_reason ])- 1 ); mysql_read_result ( 5 , data [ bd_admin_name ], sizeof ( data [ bd_admin_name ]) - 1 ); mysql_read_result ( 6 , data [ bd_admin_steamid ], sizeof ( data [ bd_admin_steamid ])- 1 ); ArrayPushArray ( g_array , data ); TrieSetCell ( g_trie , data [ bd_steamid ], g_total_bans ); #else mysql_read_result ( 0 , g_names [ g_total_bans ], charsmax ( g_names [ ] ) ); mysql_read_result ( 1 , g_steamids [ g_total_bans ], charsmax ( g_steamids [ ] ) ); g_banlengths [ g_total_bans ] = mysql_read_result ( 2 ); mysql_read_result ( 3 , g_unbantimes [ g_total_bans ], charsmax ( g_unbantimes [ ] ) ); mysql_read_result ( 4 , g_reasons [ g_total_bans ], charsmax ( g_reasons [ ] ) ); mysql_read_result ( 5 , g_admin_names [ g_total_bans ], charsmax ( g_admin_names [ ] ) ); mysql_read_result ( 6 , g_admin_steamids [ g_total_bans ], charsmax ( g_admin_steamids [ ] ) ); #endif g_total_bans ++; mysql_next_row ( ); /* SQL_ReadResult2(0, data[bd_name], sizeof(data[bd_name]) - 1); SQL_ReadResult2(1, data[bd_steamid], sizeof(data[bd_steamid]) - 1); data[bd_banlength] = SQL_ReadResult2(2); SQL_ReadResult2(3, data[bd_unbantime], sizeof(data[bd_unbantime]) - 1); SQL_ReadResult2(4, data[bd_reason], sizeof(data[bd_reason]) - 1); SQL_ReadResult2(5, data[bd_admin_name], sizeof(data[bd_admin_name]) - 1); SQL_ReadResult2(6, data[bd_admin_steamid], sizeof(data[bd_admin_steamid]) - 1); ArrayPushArray(g_array, data); TrieSetCell(g_trie, data[bd_steamid], g_total_bans); #else SQL_ReadResult2(0, g_names[g_total_bans], sizeof(g_names[]) - 1); SQL_ReadResult2(1, g_steamids[g_total_bans], sizeof(g_steamids[]) - 1); g_banlengths[g_total_bans] = SQL_ReadResult(query, 2); SQL_ReadResult2(3, g_unbantimes[g_total_bans], sizeof(g_unbantimes[]) - 1); SQL_ReadResult2(4, g_reasons[g_total_bans], sizeof(g_reasons[]) - 1); SQL_ReadResult2(5, g_admin_names[g_total_bans], sizeof(g_admin_names[]) - 1); SQL_ReadResult2(6, g_admin_steamids[g_total_bans], sizeof(g_admin_steamids[]) - 1); #endif g_total_bans++; //SQL_NextRow(query); mysql_next_row(); */ } } set_task ( RELOAD_BANS_INTERVAL , "LoadBans" ); g_loading_bans = false ; } } #endif #if MAX_BANS > 0 RemoveBan ( remove ) { #if defined USING_SQL static query [ 128 ]; formatex ( query , sizeof ( query ) - 1 ,\ "DELETE FROM `%s` WHERE `%s` = '%s';" ,\ TABLE_NAME , KEY_STEAMID , g_steamids [ remove ] ); mysql_query ( g_sql_tuple , "QueryDeleteBan" , query ); //SQL_ThreadQuery(g_sql_tuple, "QueryDeleteBan", query); #endif for( new i = remove ; i < g_total_bans ; i ++ ) { if( ( i + 1 ) == g_total_bans ) { copy ( g_names [ i ], sizeof ( g_names []) - 1 , "" ); copy ( g_steamids [ i ], sizeof ( g_steamids []) - 1 , "" ); g_banlengths [ i ] = 0 ; copy ( g_unbantimes [ i ], sizeof ( g_unbantimes []) - 1 , "" ); copy ( g_reasons [ i ], sizeof ( g_reasons []) - 1 , "" ); copy ( g_admin_names [ i ], sizeof ( g_admin_names []) - 1 , "" ); copy ( g_admin_steamids [ i ], sizeof ( g_admin_steamids []) - 1 , "" ); } else { copy ( g_names [ i ], sizeof ( g_names []) - 1 , g_names [ i + 1 ]); copy ( g_steamids [ i ], sizeof ( g_steamids []) - 1 , g_steamids [ i + 1 ]); g_banlengths [ i ] = g_banlengths [ i + 1 ]; copy ( g_unbantimes [ i ], sizeof ( g_unbantimes []) - 1 , g_unbantimes [ i + 1 ]); copy ( g_reasons [ i ], sizeof ( g_reasons []) - 1 , g_reasons [ i + 1 ]); copy ( g_admin_names [ i ], sizeof ( g_admin_names []) - 1 , g_admin_names [ i + 1 ]); copy ( g_admin_steamids [ i ], sizeof ( g_admin_steamids []) - 1 , g_admin_steamids [ i + 1 ]); } } g_total_bans --; #if !defined USING_SQL new f = fopen ( g_ban_file , "wt" ); static name [ 32 ], steamid [ 35 ], banlength , unbantime [ 32 ], reason [ 128 ], admin_name [ 32 ], admin_steamid [ 35 ]; for( new i = 0 ; i < g_total_bans ; i ++ ) { copy ( name , sizeof ( name ) - 1 , g_names [ i ]); copy ( steamid , sizeof ( steamid ) - 1 , g_steamids [ i ]); banlength = g_banlengths [ i ]; copy ( unbantime , sizeof ( unbantime ) - 1 , g_unbantimes [ i ]); copy ( reason , sizeof ( reason ) - 1 , g_reasons [ i ]); copy ( admin_name , sizeof ( admin_name ) - 1 , g_admin_names [ i ]); copy ( admin_steamid , sizeof ( admin_steamid ) - 1 , g_admin_steamids [ i ]); fprintf ( f , "^" % s ^ " ^" % s ^ " %i ^" % s ^ " ^" % s ^ " ^" % s ^ " ^" % s ^ "^n" ,\ steamid ,\ name ,\ banlength ,\ unbantime ,\ reason ,\ admin_name ,\ admin_steamid ); } fclose ( f ); #endif } #else RemoveBan ( pos , const authid []) { TrieDeleteKey ( g_trie , authid ); ArrayDeleteItem ( g_array , pos ); g_total_bans --; #if defined USING_SQL static query [ 128 ]; formatex ( query , sizeof ( query ) - 1 ,\ "DELETE FROM `%s` WHERE `%s` = '%s';" ,\ TABLE_NAME , KEY_STEAMID , authid ); //SQL_ThreadQuery(g_sql_tuple, "QueryDeleteBan", query); mysql_query ( g_sql_tuple , "QueryDeleteBan" , query ); new data [ BannedData ]; for( new i = 0 ; i < g_total_bans ; i ++ ) { ArrayGetArray ( g_array , i , data ); TrieSetCell ( g_trie , data [ bd_steamid ], i ); } #else new f = fopen ( g_ban_file , "wt" ); new data [ BannedData ]; for( new i = 0 ; i < g_total_bans ; i ++ ) { ArrayGetArray ( g_array , i , data ); TrieSetCell ( g_trie , data [ bd_steamid ], i ); fprintf ( f , "^" % s ^ " ^" % s ^ " %i ^" % s ^ " ^" % s ^ " ^" % s ^ " ^" % s ^ "^n" ,\ data [ bd_steamid ],\ data [ bd_name ],\ data [ bd_banlength ],\ data [ bd_unbantime ],\ data [ bd_reason ],\ data [ bd_admin_name ],\ data [ bd_admin_steamid ] ); } fclose ( f ); #endif } #endif #if defined KEEP_DEFAULT_BANS LoadOldBans ( filename []) { if( file_exists ( filename ) ) { new f = fopen ( filename , "rt" ); static data [ 96 ]; static command [ 10 ], minutes [ 10 ], steamid [ 35 ], length , unban_time [ 32 ]; while( ! feof ( f ) ) { fgets ( f , data , sizeof ( data ) - 1 ); if( ! data [ 0 ] ) continue; parse ( data , command , sizeof ( command ) - 1 , minutes , sizeof ( minutes ) - 1 , steamid , sizeof ( steamid ) - 1 ); if( filename [ 0 ] == 'b' && ! equali ( command , "banid" ) || filename [ 0 ] == 'l' && ! equali ( command , "addip" ) ) continue; length = str_to_num ( minutes ); GenerateUnbanTime ( length , unban_time , sizeof ( unban_time ) - 1 ); AddBan ( "" , steamid , "" , length , unban_time , "" , "" ); } fclose ( f ); static filename2 [ 32 ]; // copy current copy ( filename2 , sizeof ( filename2 ) - 1 , filename ); // cut off at the "." // banned.cfg = banned // listip.cfg = listip filename2 [ containi ( filename2 , "." )] = 0 ; // add 2.cfg // banned = banned2.cfg // listip = listip2.cfg add ( filename2 , sizeof ( filename2 ) - 1 , "2.cfg" ); // rename file so that it isnt loaded again while( ! rename_file ( filename , filename2 , 1 ) ) { } } } #endif public LoadBans () { if( g_total_bans ) { #if MAX_BANS <= 0 TrieClear ( g_trie ); ArrayClear ( g_array ); #endif g_total_bans = 0 ; } #if defined USING_SQL static query [ 128 ]; formatex ( query , sizeof ( query ) - 1 ,\ "SELECT * FROM `%s`;" ,\ TABLE_NAME ); //SQL_ThreadQuery(g_sql_tuple, "QueryLoadBans", query); mysql_query ( g_sql_tuple , "QueryLoadBans" , query ); g_loading_bans = true ; #else if( file_exists ( g_ban_file ) ) { new f = fopen ( g_ban_file , "rt" ); static filedata [ 512 ], length [ 10 ]; #if MAX_BANS <= 0 static data [ BannedData ]; while( ! feof ( f ) ) #else while( ! feof ( f ) && g_total_bans < MAX_BANS ) #endif { fgets ( f , filedata , sizeof ( filedata ) - 1 ); if( ! filedata [ 0 ] ) continue; #if MAX_BANS <= 0 parse ( filedata ,\ data [ bd_steamid ], sizeof ( data [ bd_steamid ]) - 1 ,\ data [ bd_name ], sizeof ( data [ bd_name ]) - 1 ,\ length , sizeof ( length ) - 1 ,\ data [ bd_unbantime ], sizeof ( data [ bd_unbantime ]) - 1 ,\ data [ bd_reason ], sizeof ( data [ bd_reason ]) - 1 ,\ data [ bd_admin_name ], sizeof ( data [ bd_admin_name ]) - 1 ,\ data [ bd_admin_steamid ], sizeof ( data [ bd_admin_steamid ]) - 1 ); data [ bd_banlength ] = str_to_num ( length ); ArrayPushArray ( g_array , data ); TrieSetCell ( g_trie , data [ bd_steamid ], g_total_bans ); #else static steamid [ 35 ], name [ 32 ], unbantime [ 32 ], reason [ 128 ], admin_name [ 32 ], admin_steamid [ 35 ]; parse ( filedata ,\ steamid , sizeof ( steamid ) - 1 ,\ name , sizeof ( name ) - 1 ,\ length , sizeof ( length ) - 1 ,\ unbantime , sizeof ( unbantime ) - 1 ,\ reason , sizeof ( reason ) - 1 ,\ admin_name , sizeof ( admin_name ) - 1 ,\ admin_steamid , sizeof ( admin_steamid ) - 1 ); copy ( g_names [ g_total_bans ], sizeof ( g_names []) - 1 , name ); copy ( g_steamids [ g_total_bans ], sizeof ( g_steamids []) - 1 , steamid ); g_banlengths [ g_total_bans ] = str_to_num ( length ); copy ( g_unbantimes [ g_total_bans ], sizeof ( g_unbantimes []) - 1 , unbantime ); copy ( g_reasons [ g_total_bans ], sizeof ( g_reasons []) - 1 , reason ); copy ( g_admin_names [ g_total_bans ], sizeof ( g_admin_names []) - 1 , admin_name ); copy ( g_admin_steamids [ g_total_bans ], sizeof ( g_admin_steamids []) - 1 , admin_steamid ); #endif g_total_bans ++; } fclose ( f ); } #endif // load these after, so when they are added to the file with AddBan(), they aren't loaded again from above. #if defined KEEP_DEFAULT_BANS LoadOldBans ( "banned.cfg" ); LoadOldBans ( "listip.cfg" ); #endif } #if defined USING_SQL MakeStringSQLSafe (const input [], output [], len ) { copy ( output , len , input ); replace_all ( output , len , "'" , "*" ); replace_all ( output , len , "^"", " * "); replace_all(output, len, " ` ", "*"); } #endif GetBanTime(const bantime, length[], len) { new minutes = bantime; new hours = 0; new days = 0; while( minutes >= 60 ) { minutes -= 60; hours++; } while( hours >= 24 ) { hours -= 24; days++; } new bool:add_before; if( minutes ) { formatex(length, len, "%i minute%s", minutes, minutes == 1 ? "" : "s"); add_before = true; } if( hours ) { if( add_before ) { format(length, len, "%i hour%s, %s", hours, hours == 1 ? "" : "s", length); } else { formatex(length, len, "%i hour%s", hours, hours == 1 ? "" : "s"); add_before = true; } } if( days ) { if( add_before ) { format(length, len, "%i day%s, %s", days, days == 1 ? "" : "s", length); } else { formatex(length, len, "%i day%s", days, days == 1 ? "" : "s"); add_before = true; } } if( !add_before ) { // minutes, hours, and days = 0 // assume permanent ban copy(length, len, "Permanent Ban"); } } GenerateUnbanTime(const bantime, unban_time[], len) { static _hours[5], _minutes[5], _seconds[5], _month[5], _day[5], _year[7]; format_time(_hours, sizeof(_hours) - 1, "%H"); format_time(_minutes, sizeof(_minutes) - 1, "%M"); format_time(_seconds, sizeof(_seconds) - 1, "%S"); format_time(_month, sizeof(_month) - 1, "%m"); format_time(_day, sizeof(_day) - 1, "%d"); format_time(_year, sizeof(_year) - 1, "%Y"); new hours = str_to_num(_hours); new minutes = str_to_num(_minutes); new seconds = str_to_num(_seconds); new month = str_to_num(_month); new day = str_to_num(_day); new year = str_to_num(_year); minutes += bantime; while( minutes >= 60 ) { minutes -= 60; hours++; } while( hours >= 24 ) { hours -= 24; day++; } new max_days = GetDaysInMonth(month, year); while( day > max_days ) { day -= max_days; month++; } while( month > 12 ) { month -= 12; year++; } formatex(unban_time, len, "%i:%02i:%02i %i/%i/%i", hours, minutes, seconds, month, day, year); } GetDaysInMonth(month, year=0) { switch( month ) { case 1: return 31; // january case 2: return ((year % 4) == 0) ? 29 : 28; // february case 3: return 31; // march case 4: return 30; // april case 5: return 31; // may case 6: return 30; // june case 7: return 31; // july case 8: return 31; // august case 9: return 30; // september case 10: return 31; // october case 11: return 30; // november case 12: return 31; // december } return 30; } GetTargetFlags(client) { static const flags_no_immunity = (CMDTARGET_ALLOW_SELF|CMDTARGET_NO_BOTS); static const flags_immunity = (CMDTARGET_ALLOW_SELF|CMDTARGET_NO_BOTS|CMDTARGET_OBEY_IMMUNITY); switch( get_pcvar_num(ab_immunity) ) { case 1: return flags_immunity; case 2: return access(client, ADMIN_IMMUNITY) ? flags_no_immunity : flags_immunity; } return flags_no_immunity; } GetMaxBanTime(client) { if( !g_total_maxban_times ) return 0; new flags = get_user_flags(client); for( new i = 0; i < g_total_maxban_times; i++ ) { #if !defined MAX_BANLIMITS if( flags & ArrayGetCell(g_maxban_flags, i) ) { return ArrayGetCell(g_maxban_times, i); } #else if( flags & g_maxban_flags[i] ) { return g_maxban_times[i]; } #endif } return 0; } PrintBanInformation(client, const target_name[], const target_authid[], const reason[], const length, const unban_time[], const admin_name[], const admin_authid[], bool:show_admin, bool:show_website) { static /*website[64],*/ ban_length[64]; if ( client == 0 ) { server_print ( "================== BREAKING GAMING ======================" ); server_print ( "Informacion de tu ban" ); server_print ( "Tu nombre: %s", target_name ); server_print ( "La razon de tu ban fue: %s", reason ); server_print ( "Tu %s %s", IsValidAuthid ( target_authid ) ? "SteamID" : "IP", target_authid ); if ( length > 0 ) { GetBanTime ( length, ban_length, sizeof(ban_length) - 1 ); server_print ( "Tiempo de tu ban: %s", ban_length ); } server_print ( "Seras desbanneado en: %s", unban_time ); if ( show_admin ) { server_print ( "Nombre del Admin: %s", admin_name ); server_print ( "SteamID del Admin: %s", admin_authid ); } if ( show_website ) { server_print ( "" ); server_print ( "Si crees que tu ban fue injusto , reclamalo en: www.breakingaming.com o fb.com/groups/breakingamingcs" ); server_print ( "" ); } server_print ( "================== BREAKING GAMING ======================" ); } else { client_cmd2 ( client, "echo ================== BREAKING GAMING ======================" ); client_cmd2 ( client, "echo Informacion de tu ban" ); client_cmd2 ( client, "echo Tu nombre: %s", target_name ); client_cmd2 ( client, "echo La razon de tu ban fue: %s", reason ); client_cmd2 ( client, "echo Tu %s %s", IsValidAuthid ( target_authid ) ? "SteamID" : "IP", target_authid ); if ( length > 0 ) { GetBanTime ( length, ban_length, sizeof(ban_length) - 1 ); client_cmd2 ( client, "echo Tiempo de tu ban: %s", ban_length ); } client_cmd2 ( client, "echo Seras desbanneado en: %s", unban_time ); if ( show_admin ) { client_cmd2 ( client, "echo Nombre del Admin: %s", admin_name ); client_cmd2 ( client, "echo SteamID del Admin: %s", admin_authid ); } if ( show_website ) { client_cmd2 ( client, "echo ^"^"" ); client_cmd2 ( client, "echo Si crees que tu ban fue injusto , reclamalo en: www.breakingaming.com o fb.com/groups/breakingamingcs" ); client_cmd2 ( client, "echo ^"^"" ); } client_cmd2 ( client, "echo ================== BREAKING GAMING ======================" ); } } PrintActivity(const admin_name[], const message_fmt[], any:...) { if( !get_playersnum() ) return; new activity = get_pcvar_num(amx_show_activity); if( !(0 <= activity <= 5) ) { set_pcvar_num(amx_show_activity, (activity = 2)); } static message[192], temp[192]; vformat(message, sizeof(message) - 1, message_fmt, 3); for( new client = 1; client <= g_max_clients; client++ ) { if( !is_user_connected(client) ) continue; switch( is_user_admin(client) ? g_admin_activity[activity] : g_normal_activity[activity] ) { case ACTIVITY_NONE: { } case ACTIVITY_HIDE: { copy(temp, sizeof(temp) - 1, message); replace(temp, sizeof(temp) - 1, " $name ", "ADMIN"); message_begin(MSG_ONE_UNRELIABLE, g_msgid_SayText, _, client); write_byte(client); write_string(temp); message_end(); } case ACTIVITY_SHOW: { copy(temp, sizeof(temp) - 1, message); replace(temp, sizeof(temp) - 1, " $name ", admin_name); message_begin(MSG_ONE_UNRELIABLE, g_msgid_SayText, _, client); write_byte(client); write_string(temp); message_end(); } } } } Print(const message_fmt[], any:...) { if( !get_playersnum() ) return; static message[192]; vformat(message, sizeof(message) - 1, message_fmt, 2); for( new client = 1; client <= g_max_clients; client++ ) { if( !is_user_connected(client) ) continue; message_begin(MSG_ONE_UNRELIABLE, g_msgid_SayText, _, client); write_byte(client); write_string(message); message_end(); } } Log(const message_fmt[], any:...) { static message[256]; vformat(message, sizeof(message) - 1, message_fmt, 2); static filename[96]; #if defined HISTORY_ONE_FILE if( !filename[0] ) { get_basedir(filename, sizeof(filename) - 1); add(filename, sizeof(filename) - 1, "/logs/ban_history.log"); } #else static dir[64]; if( !dir[0] ) { get_basedir(dir, sizeof(dir) - 1); add(dir, sizeof(dir) - 1, "/logs"); } format_time(filename, sizeof(filename) - 1, "%m%d%Y"); format(filename, sizeof(filename) - 1, "%s/BAN_HISTORY_%s.log", dir, filename); #endif log_amx("%s", message); log_to_file(filename, "%s", message); } /* stock SQL_ReadResult2(column, {Float,_}:...){ new args = numargs(); if(args == 2) return mysql_read_result(column); if(args == 3) { new Float:value; mysql_read_result(column, value); setarg(2, _, _:value); return 1; } else { new string[512], len = getarg(3); mysql_read_result(column, string, 511); len = min(getarg(3), strlen(string)); new cell; while(cell < len) { if(!setarg(2, cell, string[cell])) break; cell++; } setarg(2, len, 0); return len; } return 0; } */
PHP: (Créditos Lemon)
Código PHP:
< style > . sxeUl { list- style - type : none ; margin : 0 ; padding : 0 ; overflow : hidden ; background - color : #333333; } . sxeButton { font - weight : 500 ; font - family : 'Montserrat' ; text - transform : uppercase ; text - align : center ; text - decoration : none ; text - shadow : none ; white - space : nowrap ; vertical - align : middle ; border - radius : 3px ; border : 1px solid rgba ( 0 , 0 , 0 , 0.1 ); transition : 0.1s all linear ; user - select : none ; } . sxeButton_medium { font - size : 13px ; line - height : 38px ; padding : 0 20px ; } . sxeButton_important { color : #ffffff; } . tdclass { background - color : #013ADF; } . sxeLi { float : left ; } . sxeLi a { display : block ; color : white ; text - align : center ; padding : 16px ; text - decoration : none ; } . sxeLi a : hover { background - color : #111111; } </ style > < script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js" ></ script > < br >< br > < div > <? $Group = \ IPS \ Member :: loggedIn ()-> groups ; $host_db = "localhost" ; $usuario_db = "" ; $clave_db = "" ; $admin_db = "" ; $conex = mysqli_connect ( $host_db , $usuario_db , $clave_db , $admin_db ); if( $Group [ 0 ] == 9 || $Group [ 0 ] == 4 ){ $STEAMID = $_GET [ 'steamid' ]; if( strlen ( $STEAMID )){ $STEAMID = mysqli_real_escape_string ( $conex , $STEAMID ); $consulta = sprintf ( "DELETE FROM advanced_bans WHERE steamid=\"%s\"" , $STEAMID ); $query = mysqli_query ( $conex , $consulta ); mysqli_free_result ( $query ); } }else{ die( "" ); } $query = mysqli_query ( $conex , "SELECT COUNT(*) AS total FROM advanced_bans" ); $row = mysqli_fetch_assoc ( $query ); $total = $row [ 'total' ]; mysqli_free_result ( $query ); $limit = 13 ; $pages = ceil ( $total / $limit ); $page = min ( $pages , filter_input ( INPUT_GET , 'page' , FILTER_VALIDATE_INT , array( 'options' => array( 'default' => 1 , 'min_range' => 1 , ), ))); $offset = ( $page - 1 ) * $limit ; $start = $offset + 1 ; $end = min (( $offset + $limit ), $total ); echo '<ul class="sxeUl">' ; $pagemin = 1 ; echo '<li class="sxeLi"><a href="?ban=normal&page=' . $pagemin . '"><i class="fa fa-angle-double-left" style="font-size:18px"></i></a></li>' ; echo '<li class="sxeLi"><a href="?ban=normal&page=' . $pagemin . '"><strong>Anterior</strong></a></li>' ; for( $i = $pagemin - 2 ; $i < $page ; $i ++){ if( $i < 1 ) continue; echo '<li class="sxeLi"><a href="??ban=normal&page=' . $i . '">' . $i . '</a></li>' ; } echo '<li class="sxeLi"><a class="sxeButton sxeButton_important" style="background-color:#f9a519" href="??ban=normal&page=' . $page . '">' . $page . '</a></li>' ; //rgb(66,186,255) if( $page < $pages ){ $pagemax = $page + 1 ; for( $i = $pagemax ; $i <= $pages && $i < $pagemax + 3 ; $i ++){ echo '<li class="sxeLi"><a href="?ban=normal&page=' . $i . '">' . $i . '</a></li>' ; } echo '<li class="sxeLi"><a href="?ban=normal&page=' . $pagemax . '"><strong>Siguiente</strong></a></li>' ; echo '<li class="sxeLi"><a href="?ban=normal&page=' . $pages . '"><i class="fa fa-angle-double-right" style="font-size:18px"></i></a></li>' ; } ?> </ul> </div> <br><br> <div class='cWidgetContainer ' data-role='widgetReceiver' data-orientation='horizontal' data-widgetArea='header'> <ul class='ipsList_reset'> <li class='ipsWidget ipsWidget_horizontal ipsBox' data-blockID='app_cms_Blocks_hn41vxp6f' data-blockConfig="true" data-blockTitle="Custom Blocks" data-blockErrorMessage="This block cannot be shown. This could be because it needs configuring, is unable to show on this page, or will show after reloading this page." data-controller='core.front.widgets.block'> <li class="cForumRow ipsBox ipsSpacer_bottom" data-categoryid="59"> <h2 class="ipsType_sectionTitle ipsType_reset cForumTitle"> <div class='ipsDataItem_stats ipsDataItem_statsLarge'><dl><dd>Nombre</dd></dl></div> <div class='ipsDataItem_stats ipsDataItem_statsLarge'><dl><dd>Razon</dd></dl></div> <div class='ipsDataItem_stats ipsDataItem_statsLarge'><dl><dd>Tiempo del Ban</dd></dl></div> <div class='ipsDataItem_stats ipsDataItem_statsLarge'><dl><dd style="margin-left:25%">SteamID</dd></dl></div> <div class='ipsDataItem_stats ipsDataItem_statsLarge'><dl><dd style="margin-left:35%">Administrador</dd></dl></div> <div class='ipsDataItem_stats ipsDataItem_statsLarge'><dl><dd style="margin-left:50%">Accion</dd></dl></div> </h2> <ol class="ipsDataList ipsDataList_large ipsDataList_zebra ipsAreaBackground_reset" data-role="forums"> <li style="text-align: center;"><?php $consulta = sprintf ( " SELECT * FROM advanced_bans LIMIT %d OFFSET %d " , $limit , $offset ); ?> <?php $query = mysqli_query ( $conex , $consulta ); while( $row = mysqli_fetch_assoc ( $query )){ $STEAMID = $row [ "steamid" ]; ?> <li class='cForumRow ipsDataItem ipsDataItem_responsivePhoto ipsClearfix' id='<? echo 'li' . $STEAMID ; ?> '> <div class='ipsDataItem_stats ipsDataItem_statsLarge'><dl><dd><? echo $row [ "name" ]; ?> </dd></dd></dl></div> <div class='ipsDataItem_stats ipsDataItem_statsLarge'><dl><dd><? echo $row [ "reason" ]; ?> </dd></dd></dl></div> <div class='ipsDataItem_stats ipsDataItem_statsLarge'><dl><dd><? echo $row [ "banlength" ]; ?> </dd></dl></div> <div class='ipsDataItem_stats ipsDataItem_statsLarge'><dl><dd><? echo $row [ "steamid" ]; ?> </dd></dl></div> <div class='ipsDataItem_stats ipsDataItem_statsLarge'><dl><dd><? echo $row [ "admin_name" ]; ?> </dd></dl></div> <div class='ipsDataItem_stats ipsDataItem_statsLarge'><dl><dd><a class="ipsButton ipsButton_normal" href="?ban=normal&page=<? echo $page ; ?> &steamid=<? echo $STEAMID ; ?> " style="width:100%">Remover Ban</a></dd></dl></div></li> <? } mysqli_free_result ( $query ); ?> </ol> </li></li> </ul> </div><? echo '</tr></table><br><br>' ; echo '<ul class="sxeUl">' ; echo '<li class="sxeLi"><a href="?ban=normal&bans=normal&page=' . $pagemin . '"><i class="fa fa-angle-double-left" style="font-size:18px"></i></a></li>' ; echo '<li class="sxeLi"><a href="?ban=normal&page=' . $pagemin . '"><strong>Anterior</strong></a></li>' ; for( $i = $pagemin - 2 ; $i < $page ; $i ++){ if( $i < 1 ) continue; echo '<li class="sxeLi"><a href="?ban=normal&page=' . $i . '">' . $i . '</a></li>' ; } echo '<li class="sxeLi"><a class="sxeButton sxeButton_important" style="background-color:rgb(66,186,255)" href="?ban=normal&page=' . $page . '">' . $page . '</a></li>' ; if( $page < $pages ){ for( $i = $pagemax ; $i <= $pages && $i < $pagemax + 3 ; $i ++){ echo '<li class="sxeLi"><a href="?ban=normal&page=' . $i . '">' . $i . '</a></li>' ; } echo '<li class="sxeLi"><a href="?ban=normal&page=' . $pagemax . '"><strong>Siguiente</strong></a></li>' ; echo '<li class="sxeLi"><a href="?ban=normal&page=' . $pages . '"><i class="fa fa-angle-double-right" style="font-size:18px"></i></a></li>' ; } mysqli_close ( $conex ); ?>
Mensajes: 4,637
Temas: 73
Registro en: Oct 2013
Reputación:
44
(26/10/2018, 12:48 PM) Cristian escribió: En realidad el título se refiere a que tiene para MySQL y SQLite3 (?Ahí miré el código. Si usa SQLite, el código PHP que está escrito no tiene soporte para eso, perdiendo el sentido del plguin ya que se podría usar el advanced bans que está recontra probado.
Mensajes: 375
Temas: 55
Registro en: Jan 2016
Reputación:
9
(26/10/2018, 04:41 PM) Neeeeeeeeeel.- escribió: (26/10/2018, 12:48 PM) Cristian escribió: En realidad el título se refiere a que tiene para MySQL y SQLite3 (? Ahí miré el código. Si usa SQLite, el código PHP que está escrito no tiene soporte para eso, perdiendo el sentido del plguin ya que se podría usar el advanced bans que está recontra probado.
El sentido del plugin es excluir al usuario. Justamente el motd en PHP es para la versión MySQL para ponerlo en algún foro o algo por el sentido. La versión SQLite obviamente no soporta PHP.
Mensajes: 2,094
Temas: 59
Registro en: Feb 2015
Reputación:
15
26/10/2018, 06:11 PM
(Última modificación: 26/10/2018, 06:17 PM por OsweRRR .)
si se necesita de la flag ADMIN_RCON para banear porque en el main messagemode solo chequeas si es admin o no igual que en los menus, allí podría haber un bug
edit: no es necesario pero puede ser opcional de ponerle un filtro de comandos especiales delete, insert, etc aunque es al p2
(18/11/2014, 05:47 PM) Neeeeeeeeeel.- escribió: Por qué necesitan una guía para todo? Meté mano y que salga lo que salga... es la mejor forma de aprender.
(16/05/2016, 11:08 PM) kikizon2 escribió: No cabe duda que tienen mierda en vez de cerebro, par de pendejos v:
Mensajes: 642
Temas: 25
Registro en: Feb 2014
Reputación:
17
Horrible la forma de como chequeas si sigue o no baneado y la forma de desbanear(que feo es el spanglish). Y en vez de hacer tan repetitivo todo, podrías hacer una consulta que seleccione y guarde en un Trie, los usuarios cuyo (ban_time < tiempo_del_mapa*2) y ahí manjearlo sin consultas, solo check; así no chequeas todos, aunque generalmente son pocos los usuarios baneados. Pero podrías evitar todo este dolor de cabeza con funciones propias de mysql, con sqlite tenes que hacerlo de la forma que actualmente usas.
(19/06/2014, 11:08 PM) 01011001 escribió: No tiene niveles infinitos, llega hasta 2147483648 (Y despues hace un integer overflow)
(19/06/2014, 11:08 PM) [R]ak escribió: Mis conocimientos aumentaron un 500% con este post
Mensajes: 375
Temas: 55
Registro en: Jan 2016
Reputación:
9
(26/10/2018, 06:26 PM) Kane escribió: Horrible la forma de como chequeas si sigue o no baneado y la forma de desbanear(que feo es el spanglish). Y en vez de hacer tan repetitivo todo, podrías hacer una consulta que seleccione y guarde en un Trie, los usuarios cuyo (ban_time < tiempo_del_mapa*2) y ahí manjearlo sin consultas, solo check; así no chequeas todos, aunque generalmente son pocos los usuarios baneados. Pero podrías evitar todo este dolor de cabeza con funciones propias de mysql, con sqlite tenes que hacerlo de la forma que actualmente usas.
Gracias por comentar y por tus críticas constructivas.
1) ¿Cómo verificarías vos si el usuario está baneado o no?. Lo hice de esa forma por que hay como 4 tablas para cada almacenamiento, cabe destacar que hay varias formas que están muy mal echas, quizás por el hecho que no tengo tanto conocimiento en estos temas. Pero de seguro hay formas mejores y mucho más por aprender.
2) Lo de los
Tries no lo había pensado, es una buena opción.
Mensajes: 4,637
Temas: 73
Registro en: Oct 2013
Reputación:
44
Qué ventajas tiene sobre el Advanced Bans?
Mensajes: 375
Temas: 55
Registro en: Jan 2016
Reputación:
9
(14/11/2018, 04:58 PM) Neeeeeeeeeel.- escribió: Qué ventajas tiene sobre el Advanced Bans?
Por ahora ninguna, lo único y quizás es que tiene más control a la hora de manejar el sistema de ban, es decir, introducir minutos, razón, una mayor facilidad y acceso a la hora de restringir a un usuario, ya que prácticamente se puede banear a través de menú y consola, igual hay bastantes cosas que mejorar en el código y en las consultas.
Mensajes: 791
Temas: 84
Registro en: Sep 2016
Reputación:
6
(14/11/2018, 09:16 PM) Cristian escribió: (14/11/2018, 04:58 PM) Neeeeeeeeeel.- escribió: Qué ventajas tiene sobre el Advanced Bans?
Por ahora ninguna, lo único y quizás es que tiene más control a la hora de manejar el sistema de ban, es decir, introducir minutos, razón, una mayor facilidad y acceso a la hora de restringir a un usuario, ya que prácticamente se puede banear a través de menú y consola, igual hay bastantes cosas que mejorar en el código y en las consultas.
El soporte de Mysql y Sqlite es una ventaja, el advanced bans no lo tiene, También podés banear por HWID otra cosa que el Advanced Bans no tiene y lo de los calculos también, diría yo, no sé.
Mensajes: 1
Temas: 0
Registro en: Nov 2018
Reputación:
0
26/11/2018, 08:21 PM
(Última modificación: 26/11/2018, 09:26 PM por ptaha525 . Edited 1 time in total.)
L 11/27/2018 - 02:22:56: String formatted incorrectly - parameter 3 (total 2)
L 11/27/2018 - 02:22:56: [AMXX] Displaying debug trace (plugin "ban_system.amxx", version "1.0")
L 11/27/2018 - 02:22:56: [AMXX] Run time error 25: parameter error
L 11/27/2018 - 02:22:56: [AMXX] [0] ban_system.sma::concmd_ban_add_hid (line 618)
Mensajes: 375
Temas: 55
Registro en: Jan 2016
Reputación:
9
(26/11/2018, 08:21 PM) ptaha525 escribió: L 11/27/2018 - 02:22:56: String formatted incorrectly - parameter 3 (total 2)
L 11/27/2018 - 02:22:56: [AMXX] Displaying debug trace (plugin "ban_system.amxx", version "1.0")
L 11/27/2018 - 02:22:56: [AMXX] Run time error 25: parameter error
L 11/27/2018 - 02:22:56: [AMXX] [0] ban_system.sma::concmd_ban_add_hid (line 618)
Perdón, no pude darle soporte al proyecto debido a una mudanza, no tengo ni luz en casa, y estoy del teléfono. Ese error se debe a que hay un %s en la parte en donde se detiene la función cuyas funciones son
concmd_ban_add_ip, concmd_ban_add_steamid, concmd_ban_add_hid . Por otro lado, ya pude fixear gran parte del código y las tablas reduciéndolas a 1 sola. Cuando vuelva todo a la normalidad lo publico.
Mensajes: 375
Temas: 55
Registro en: Jan 2016
Reputación:
9
Mensajes: 9
Temas: 3
Registro en: Jun 2020
Reputación:
0
07/06/2020, 06:44 AM
(Última modificación: 07/06/2020, 06:51 AM por Infamous2020 . Edited 1 time in total.)
( 14) Error: Access denied for user 'surfmod'@'%' to database 'sql_ban_database'
#if defined USE_SQLITE
#define SQL_HOST "37.59.43.196"
#define SQL_USER "surfmod"
#define SQL_PASSWORD "PASSWORDREMOVED"
#define SQL_DRIVE "surfmod"
#else
#define SQL_HOST "37.59.43.196"
#define SQL_USER "surfmod"
#define SQL_PASSWORD "PASSWORDREMOVED"
#define SQL_DRIVE "surfmod"
#endif
What about the file sql_ban_databse.sq3 ? What i have to do with this file??????????????????????????????
When i try to upload sql_ban_database.sq3 to phpmyadmin:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SQLite format 3' at line 1
Mensajes: 6,664
Temas: 81
Registro en: Jan 2014
Reputación:
68
(07/06/2020, 06:44 AM) Infamous2020 escribió: ( 14) Error: Access denied for user 'surfmod'@'%' to database 'sql_ban_database'
#if defined USE_SQLITE
#define SQL_HOST "37.59.43.196"
#define SQL_USER "surfmod"
#define SQL_PASSWORD "PASSWORDREMOVED"
#define SQL_DRIVE "surfmod"
#else
#define SQL_HOST "37.59.43.196"
#define SQL_USER "surfmod"
#define SQL_PASSWORD "PASSWORDREMOVED"
#define SQL_DRIVE "surfmod"
#endif
What about the file sql_ban_databse.sq3 ? What i have to do with this file??????????????????????????????
When i try to upload sql_ban_database.sq3 to phpmyadmin:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SQLite format 3' at line 1
SQLite != SQL...
This forum is for spanish users only
► NO DOY AYUDA VIA MENSAJE PRIVADO ◄
* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook
Mensajes: 19
Temas: 0
Registro en: Aug 2019
Reputación:
0
no me compila, es como que queda cargando y nunca avanza ni da errores, primera vez que me pasa con un plugin
Mensajes: 7,178
Temas: 93
Registro en: Aug 2014
Reputación:
63
capas tenes una línea muy grande y aun usas el amx studio xd
puedes revisar eso
Aunque existe el amxbans también
Mensajes: 21
Temas: 8
Registro en: Jul 2021
Reputación:
0
A mi me compilo sin ningún problema con la versión 1.8.3