razery Posted March 19, 2008 Report Share Posted March 19, 2008 Labvakar. Velejos konsulteeties par vienu lietu. Es taisiiju savus amxbans ar РO pamaaciibu. Kaa var pielikt klaat vienu rindinju tajaa vietaa, ko raada kad uzliek banu. Tjipa nobanotais niks, laiks, kas nobanoja utt. Un pashaa apakshaa es gribu pievienot veel shaadu tekstu: Ja tavuprвt tev bans tikka uzlikts nepamatoti, dodies uz http://lalala.lv forumu un raksti suudziibu! Kuraa vietaa tieshi failaa amxbans_4.3.1.sma man tas teksts ir japievieno? Luudzu var kaads pievienot to manaa vietaa? Luuk mans amxbans_4.3.1.sma fails: /* AMXBans, уïðàâëеíèе áàíàìè дëÿ ìîдèôèêàцèй Half-Life Àâòîðñêèе ïðàâà (C) 2003, 2004 Ronald Renes / Jeroen de Ðîâеð web : http://www.lantznet.com/amxbans/ IRC : #hlm (Quakenet, íèê lantz69) IRC2 : #amxmodx (GameSurge, íèê lantz69) Ýòîò ôàйë - чàñòь AMXBans. AMXBans - ñâîáîдíîе ïðîãðàììíîе îáеñïечеíèе; âû ìîїеòе ðàñïðîñòðàíÿòь è/èëè ìîдèôèцèðîâàòь еãî ïî ëèцеíçèè GNU Library General Public License âеðñèè 2 èëè (íà âàёе уñìîòðеíèе) ëþáîй áîëее ïîçдíей âеðñèè, îïуáëèêîâàííîй Free Software Foundation. Ýòîò ïðîдуêò ðàñïðîñòðàíÿеòñÿ â íàдеїде, чòî îí îêàїеòñÿ ïîëеçíûì, íî ÁЕÇ ÊÀÊÈХ ËÈÁÎ ÃÀÐÀÍÒÈЙ. Çà ïîдðîáíîñòÿìè îáðàùàйòеñь ê ëèцеíçèè GNU Library General Public License. Âìеñòе ñ ïðîдуêòîì âû дîëїíû áûëè ïîëучèòь êîïèþ ëèцеíçèè GNU Library General Public License, еñëè ее íеò, íàïèёèòе ïî àдðеñу: Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA. Îáðàòèòеñь ê readme.html çà дîïîëíèòеëьíîй èíôîðìàцèей Òеêуùàÿ âеðñèÿ: v4.3.1 -------------------------------------------------------------- Changelog for Plugin Amxbans changes/fixes by lantz69 after version 4.0 by YoMama -------------------------------------------------------------- 4.3.1 - Fixed: When baning on LAN it would ban alla players - Fixed: Now you can also ban using IP ------------------------------------------------------------- 4.3 Friday October 28, 2005 - Fixed: MOTDURL in amxbans web Interface was broken in 4.2 (reported by QuakerOates) - Fixed: amx_find & amx_findex got an error when no result was found.(reported by QuakerOates) - Fixed: Better filtering of data before it goes to a mysql query. - Added: log_amx commands to make all sql errors write to the amxmodx/logs. - Changed: New method of banning players to minimize bad data to the DB. You can enable the old system by commenting #define USE_NEW_BANMETHOD - Fixed: Removed some dbi_free_result that should not be there. (reported by Janet J) - Fixed: (DOD) When banning with HLSW or in server console an error would occour. (reported by [MUPPETS]Gonzo]) - Added: A check for STEAM_ID_PENDING so they will be kicked. a new cvar is added for the above amxbans_steamid_pending 1 enabled 0 disabled (default 1) - Added: new cvar amxbans_servernick to be able to set the admin name you want to have when the server bans with Ie. hlsw, atac or hlguard this was requested by Us3r. ------------------------------------------------------------- 4.2 Thursday October 13, 2005 - Changed: Merged amxbans and amxbans_menu into one plugin (amxbans_4.2.sma). - Added: Made defines at the top of source to make it easy to change bantimes etc. - Changed: Rearranged the functions and changed the coding style. - Fixed: The get port bug is solved. Before the port always was 27015 even if the server was 27017 or another port. - Fixed: Some data was not written to the data base correctly when player pruned the data base himself - Changed: Now you get the bantime in weeks, days, hours, minutes and seconds instead of only minutes (thx Brad Jones) - Recomendation: Dont use the MOTDURL from the web. You should use the one in the plugin as it is more reliable and faster. - Fixed: amx_find now works and searches the active amx_ban table. Syntax: amx_find <steamID>. - Added: amx_findex searches in the expired ban_history table. Syntax: amx_findex <steamID>. - Fixed: Banmenu reasons could max be 6 now it can be 7 like it should (thx DerProfi) - Added: The map name can be added to the servername in the ban. This is by Default disabled. - Added: New cvar amxbans_debug <1|0>. Use this if you want to debug false kicked players. - Changed: Implemented Brad Jones function to get hours,days week in HLSW chat and amxx logs (thx Brad Jones) - Updated: Language file amxmodx\data\lang\amxbans.txt is updated. Dont forget to update or amxbans 4.2 won't work properly -------------------------------------------------------------- 4.1 Fri Sep 23, 2005 - Added so admins with the d-flag can ban max 600 minutes in console. - Added so admins with the d-flag AND n-flag can ban whatever time they like in console and will also get higher bantimes in the menu. - Fixed an issue when a string was formatted incorrectly when banning. - Changed the way results from the data base are handled to ged rid of memory leaks. - Fixed so you can compile when you want STATIC REASONS and not reasons from the DB. -------------------------------------------------------------- 4.01 Sun Sep 04, 2005 - Fixed some result variables that where wrong and crashed the server when using amxmodx 1.50 and later versions. - Fixed when a recently banned player comes back after ban is expired. Now the data base gets pruned correctly. - Fixed so Bots don't triggers errors in the logs when connecting. - Changed so players recieve better info when they get kicked when they are banned. */ /**************************************************************************************** * ÎÒ ÑÞДÀ ÂÛ ÌÎЇЕÒЕ ÐЕДÀÊÒÈÐÎÂÀÒЬ ÈÑХÎДÍÛЙ ÊÎД ÈÑХÎДЯ ÈÇ ÂÀЁÈХ ÏÐЕДÏÎЧÒЕÍÈЙ * ****************************************************************************************/ // This admin will get the higher bantimes and also able to ban freely in console // If you set this to ADMIN_BAN (d-flag) they will get the HighBanMenuValues and also ban freely in console #define HIGHER_BAN_TIME_ADMIN ADMIN_LEVEL_B // DEFAULT ADMIN_LEVEL_B n-FLAG IN YOUR ACCESS. This admin also needs the d-flag // ban minutes for admin with d-flag and can only ban max 600 min in console // IMPORTANT put the lowest value first and the highest value last. You can only have 4 values!!! new g_LowBanMenuValues[4] = {5, 60, 240, 600} // The numbers are in minutes // ban minutes for admin with n-flag and d-flag // IMPORTANT!! put the lowest value first and the highest value last. You can only have 4 values!!! new g_HighBanMenuValues[4] = {5, 60, 6000, 0} // The numbers are in minutes.. 0 = PERMANENT BAN // If you want bans broadcasted to all players in the server, uncomment this #define BCAST_BANS // If you want to add the mapname in the servername uncomment this Ie banned on Server: Servername (de_mapname) #define ADD_MAPNAME_IN_SERVERNAME // If you want static reasons instead of reasons fetched from the database, uncomment this //#define STATIC_REASONS // This new method is much safer and stops bad data from going to the DB, but you can only ban players in the server. // Comment if you want to use the old method where you can ban steamid not in the server #define USE_NEW_BANMETHOD /**************************************************************************************** * ÍЕ ÐЕДÀÊÒÈÐУЙÒЕ ÎÒ ÑÞДÀ È ÍÈЇЕ ЕÑËÈ ÍЕ УÂЕÐЕÍÛ Â ÑÂÎÈХ ДЕЙÑÒÂÈЯХ * ****************************************************************************************/ #define TIMEUNIT_SECONDS 0 #define TIMEUNIT_MINUTES 1 #define TIMEUNIT_HOURS 2 #define TIMEUNIT_DAYS 3 #define TIMEUNIT_WEEKS 4 // define how many seconds are in each time unit #define SECONDS_IN_MINUTE 60 #define SECONDS_IN_HOUR 3600 #define SECONDS_IN_DAY 86400 #define SECONDS_IN_WEEK 604800 // specify tablenames here #define tbl_reasons "amx_banreasons" #define tbl_svrnfo "amx_serverinfo" #define tbl_bans "amx_bans" #define tbl_banhist "amx_banhistory" #define tbl_svrnfo "amx_serverinfo" #include <amxmodx> #include <amxmisc> #include <dbi> new AUTHOR[] = "YoMama & lantz69" new PLUGIN_NAME[] = "AMXBans" new VERSION[] = "4.3.1" new g_menuPosition[33] new g_menuPlayers[33][32] new g_menuPlayersNum[33] new g_menuOption[33] new g_menuSettings[33] new g_bannedPlayer[33] new g_banReasons[7][128] new g_lastCustom[33][128] new g_inCustomReason[33] new g_coloredMenus #if !defined STATIC_REASONS new g_aNum = 0 #endif // 16k * 4 = 64k stack size #pragma dynamic 16384 new Sql:sql new merror[128] new amxbans_version[10] = "amxx_4.3" new ban_motd[4096] new Float:kick_delay=10.0 public client_connect(id) { g_lastCustom[id][0]='^0' g_inCustomReason[id]=0 } public plugin_init() { #if defined STATIC_REASONS copy(g_banReasons[0],127,"Cheating") copy(g_banReasons[1],127,"Laming") copy(g_banReasons[2],127,"Swearing") copy(g_banReasons[3],127,"Wallhack") copy(g_banReasons[4],127,"Aimbot") copy(g_banReasons[5],127,"Wallhack + Aimbot") copy(g_banReasons[6],127,"Camping") #endif #if !defined STATIC_REASONS register_concmd("amx_reloadreasons","reasonReload",ADMIN_CFG) #endif register_clcmd("amx_banmenu","cmdBanMenu",ADMIN_BAN,"- displays ban menu") //Changed this line to make this menu come up instead of the normal amxx ban menu register_clcmd("amxbans_menureason","cmdBanMenuReason",ADMIN_BAN,"- configures custom ban message") register_menucmd(register_menuid("Ban Menu"),1023,"actionBanMenu") register_menucmd(register_menuid("Ban Reason Menu"),1023,"actionBanMenuReason") g_coloredMenus = colored_menus() register_plugin(PLUGIN_NAME, VERSION, AUTHOR) register_cvar("amxbans_version",VERSION,FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY) register_cvar("amxbans_debug","0") // Set this to 1 to enable debug register_cvar("amxbans_steamid_pending","1") // 1 enable and 0 disable steamid_pending check register_cvar("amxbans_servernick","") // Set this cvar to what the adminname should be if the server make the ban. // Ie. amxbans_servernick "My Great server" put this in server.cfg or amxx.cfg register_dictionary("amxbans.txt") register_dictionary("common.txt") register_concmd("amx_ban","amx_ban",ADMIN_BAN,"<time in mins> <steamID or nickname or #authid> <reason>") register_srvcmd("amx_ban","amx_ban",-1,"<time in min> <steamID or nickname or #authid or IP> <reason>") register_concmd("amx_banip","amx_banip",ADMIN_BAN,"<time in mins> <steamID or nickname or #authid or IP> <reason>") register_srvcmd("amx_banip","amx_banip",-1,"<time in mins> <steamID or nickname or #authid> <reason>") //New to be able to remove bans from the data base ingame.. that might get done later on //register_concmd("amx_unban","amx_unban",HIGHER_BAN_TIME_ADMIN,"<steamID or ip>") //register_srvcmd("amx_unban","amx_unban",-1,"<steamID or ip>") register_concmd("amx_find","amx_find",ADMIN_BAN,"<steamID>") register_srvcmd("amx_find","amx_find",-1,"<steamID>") register_concmd("amx_findex","amx_findex",ADMIN_BAN,"<steamID>") register_srvcmd("amx_findex","amx_findex",-1,"<steamID>") register_concmd("amx_list","cmdLst",0,"Displays playerinfo") set_task(0.1,"init_function") return PLUGIN_CONTINUE } public init_function() { sql_init() banmod_online() #if !defined STATIC_REASONS fetchReasons() banmenu_online() #endif } // Connect to database public sql_init() { new mhost[64], muser[32], mpass[32], mdb[32] get_cvar_string("amx_sql_host",mhost,64) get_cvar_string("amx_sql_user",muser,32) get_cvar_string("amx_sql_pass",mpass,32) get_cvar_string("amx_sql_db",mdb,32) sql = dbi_connect(mhost,muser,mpass,mdb,merror,128) if(sql <= SQL_FAILED) { server_print("[AMXBANS] %L",LANG_SERVER,"SQL_CANT_CON",merror) log_amx("[AMXBANS] %L",LANG_SERVER,"SQL_CANT_CON",merror) } return PLUGIN_CONTINUE } public banmod_online() { new timestamp = get_systime(0) new ip[32] get_cvar_string("ip", ip, 32) // The old way of getting the port number /*new port[10] get_cvar_string("port", port, 10)*/ // This is a new way of getting the port number new ip_port[42], ip_tmp[32], port[10] get_user_ip(0, ip_port, 41) // Takes in the whole IP:port string.. (0 is always the server) strtok(ip_port, ip_tmp, 31, port, 9, ':') // Divides the string with the help of strtok and delimiter : if ( get_cvar_num("amxbans_debug") == 2 ) { server_print("[AMXBANS DEBUG_2] The server IP:port is: %s:%s", ip, port) log_amx("[AMXBANS DEBUG_2] The server IP:port is: %s:%s", ip, port) } new servername[200] get_cvar_string("hostname",servername,100) new modname[32] get_modname(modname,31) if ( get_cvar_num("amxbans_debug") == 2 ) { server_print("[AMXBANS DEBUG_2] select timestamp,hostname,address,gametype,rcon,amxban_version,amxban_motd,motd_delay from `%s` where address = '%s:%s'",tbl_svrnfo,ip,port) log_amx("[AMXBANS DEBUG_2] select timestamp,hostname,address,gametype,rcon,amxban_version,amxban_motd,motd_delay from `%s` where address = '%s:%s'",tbl_svrnfo,ip,port) } new Result:result = dbi_query(sql,"select timestamp,hostname,address,gametype,rcon,amxban_version,amxban_motd,motd_delay from `%s` where address = '%s:%s'",tbl_svrnfo,ip,port) if (result == RESULT_FAILED) { dbi_error(sql,merror,128) server_print("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) log_amx("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) return PLUGIN_HANDLED } szQuerySafe(servername) replaceall(servername, 100, "\", "") replaceall(servername, 100, "'", "") if (dbi_nextrow(result)==0) { if ( get_cvar_num("amxbans_debug") == 2 ) { server_print("AMXBANS DEBUG_2] INSERT INTO `%s` VALUES ('', '%i','%s', '%s:%s', '%s', '', '%s', '', '', '0')", tbl_svrnfo, timestamp, servername, ip, port, modname, amxbans_version) log_amx("AMXBANS DEBUG_2] INSERT INTO `%s` VALUES ('', '%i','%s', '%s:%s', '%s', '', '%s', '', '', '0')", tbl_svrnfo, timestamp, servername, ip, port, modname, amxbans_version) } result = dbi_query(sql,"INSERT INTO `%s` VALUES ('', '%i','%s', '%s:%s', '%s', '', '%s', '', '', '0')", tbl_svrnfo, timestamp, servername, ip, port, modname, amxbans_version) if (result == RESULT_FAILED) { dbi_error(sql,merror,128) server_print("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) log_amx("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) return PLUGIN_HANDLED } if(result > RESULT_NONE) { dbi_free_result(result) log_amx("AMXBans dbi_free_result in banmod_online") } } else { new kick_delay_str[10] dbi_field(result, 8, kick_delay_str, 10) if (floatstr(kick_delay_str)>1.0) { kick_delay=floatstr(kick_delay_str) } else { kick_delay=12.0 } if ( get_cvar_num("amxbans_debug") == 2 ) { server_print("AMXBANS DEBUG_2] update `%s` set timestamp='%i',hostname='%s',gametype='%s',amxban_version='%s', amxban_menu='0' where address = '%s:%s'", tbl_svrnfo, timestamp, servername, modname, amxbans_version, ip, port) log_amx("[AMXBANS DEBUG_2] update `%s` set timestamp='%i',hostname='%s',gametype='%s',amxban_version='%s', amxban_menu='0' where address = '%s:%s'", tbl_svrnfo, timestamp, servername, modname, amxbans_version, ip, port) } new Result:register = dbi_query(sql,"update `%s` set timestamp='%i',hostname='%s',gametype='%s',amxban_version='%s', amxban_menu='0' where address = '%s:%s'", tbl_svrnfo, timestamp, servername, modname, amxbans_version, ip, port) if (register == RESULT_FAILED) { dbi_error(sql,merror,128) server_print("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) log_amx("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) return PLUGIN_HANDLED } if (register > RESULT_NONE) { dbi_free_result(register) log_amx("AMXBans dbi_free_result register in banmod_online") } } if ( !(get_cvar_num("amxbans_debug") == 10) ) log_amx("AMXBans %s is online",VERSION) return PLUGIN_CONTINUE } #if !defined STATIC_REASONS public banmenu_online() { new ip[32] get_cvar_string("ip", ip, 32) /*new port[10] get_cvar_string("port", port, 10)*/ // This is a new way of getting the port number new ip_port[42], ip_tmp[32] , port[10] get_user_ip(0, ip_port, 41) strtok(ip_port, ip_tmp, 31, port, 9, ':') new Result:register = dbi_query(sql,"UPDATE `%s` set amxban_menu = '1' where address = '%s:%s'", tbl_svrnfo, ip, port) if (register == RESULT_FAILED) { dbi_error(sql,merror,128) server_print("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) log_amx("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) //dbi_free_result(register) dbi_close(sql) return PLUGIN_HANDLED } if ( !(get_cvar_num("amxbans_debug") == 10) ) { if (g_aNum == 1) log_amx("AMXBans Menu %s is online (1 reason loaded)", VERSION) else log_amx("AMXBans Menu %s is online (%d reasons loaded)", VERSION, g_aNum) } return PLUGIN_CONTINUE } public fetchReasons() { new ip[32] //,port[10] get_cvar_string("ip",ip,32) //get_cvar_string("port",port,10) // This is a new way of getting the port number new ip_port[42], ip_tmp[32] , port[10] get_user_ip(0, ip_port, 41) strtok(ip_port, ip_tmp, 31, port, 9, ':') new Result:get_reasons = dbi_query(sql,"SELECT reason FROM %s WHERE address = '%s:%s'",tbl_reasons,ip,port) if (get_reasons == RESULT_FAILED) { dbi_error(sql,merror,127) server_print("[AMXBANS] %L",LANG_SERVER,"SQL_CANT_LOAD_REASONS",merror) log_amx("[AMXBANS] %L",LANG_SERVER,"SQL_CANT_LOAD_REASONS",merror) //dbi_free_result(get_reasons) dbi_close(sql) return PLUGIN_HANDLED } else if (get_reasons == RESULT_NONE) { server_print("[AMXBANS] %L",LANG_SERVER,"NO_REASONS") dbi_free_result(get_reasons) return PLUGIN_HANDLED } g_aNum = 0 while( dbi_nextrow(get_reasons) > 0 ) { dbi_result(get_reasons, "reason", g_banReasons[g_aNum], 127) ++g_aNum } if(get_reasons > RESULT_NONE) { dbi_free_result(get_reasons) } if (g_aNum == 1) server_print("[AMXBANS] %L", LANG_SERVER, "SQL_LOADED_REASON" ) else server_print("[AMXBANS] %L", LANG_SERVER, "SQL_LOADED_REASONS", g_aNum ) return PLUGIN_HANDLED } public reasonReload(id,level,cid) { if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED else { fetchReasons() if (id != 0) { if (g_aNum == 1) console_print(id,"[AMXBANS] %L", LANG_SERVER, "SQL_LOADED_REASON" ) else console_print(id,"[AMXBANS] %L", LANG_SERVER, "SQL_LOADED_REASONS", g_aNum ) } } return PLUGIN_HANDLED } #endif /* Ban menu */ public actionBanMenu(id,key) { switch (key) { case 7: { ++g_menuOption[id] g_menuOption[id] %= 4 // Admins with flag n or what HIGHER_BAN_TIME_ADMIN is set to, will get the following ban times if (get_user_flags(id)&HIGHER_BAN_TIME_ADMIN) { switch(g_menuOption[id]) { case 0: g_menuSettings[id] = g_HighBanMenuValues[0] case 1: g_menuSettings[id] = g_HighBanMenuValues[1] case 2: g_menuSettings[id] = g_HighBanMenuValues[2] case 3: g_menuSettings[id] = g_HighBanMenuValues[3] } } // Admins with flag d (std for BAN) will get the following ban times if (!(get_user_flags(id)&HIGHER_BAN_TIME_ADMIN)) { switch(g_menuOption[id]) { case 0: g_menuSettings[id] = g_LowBanMenuValues[0] case 1: g_menuSettings[id] = g_LowBanMenuValues[1] case 2: g_menuSettings[id] = g_LowBanMenuValues[2] case 3: g_menuSettings[id] = g_LowBanMenuValues[3] } } displayBanMenu(id,g_menuPosition[id]) } case 8: displayBanMenu(id,++g_menuPosition[id]) case 9: displayBanMenu(id,--g_menuPosition[id]) default: { g_bannedPlayer[id] = g_menuPlayers[id][g_menuPosition[id] * 6 + key] cmdBanReasonMenu(id) } } return PLUGIN_HANDLED } displayBanMenu(id,pos) { if (pos < 0) return get_players(g_menuPlayers[id],g_menuPlayersNum[id]) new menuBody[512] new b = 0 new i new name[32] new start = pos * 6 if (start >= g_menuPlayersNum[id]) start = pos = g_menuPosition[id] = 0 new len = format(menuBody,511, g_coloredMenus ? "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n", id,"BAN_MENU",pos+1,( g_menuPlayersNum[id] / 6 + ((g_menuPlayersNum[id] % 6) ? 1 : 0 )) ) new end = start + 6 new keys = MENU_KEY_0|MENU_KEY_8 if (end > g_menuPlayersNum[id]) end = g_menuPlayersNum[id] for (new a = start; a < end; ++a) { i = g_menuPlayers[id][a] get_user_name(i,name,31) if ( (is_user_bot(i)) || (access(i,ADMIN_IMMUNITY))) { ++b if ( g_coloredMenus ) len += format(menuBody[len],511-len,"\d%d. %s^n\w",b,name) else len += format(menuBody[len],511-len,"#. %s^n",name) } else { keys |= (1<<b) len += format(menuBody[len],511-len,"%d. %s^n",++b,name) } } if ( g_menuSettings[id] ) len += format(menuBody[len],511-len,"^n8. %L^n", id, "BAN_FOR_MIN", g_menuSettings[id] ) else len += format(menuBody[len],511-len,"^n8. %L^n", id, "BAN_PERM" ) if (end != g_menuPlayersNum[id]) { format(menuBody[len],511-len,"^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT") keys |= MENU_KEY_9 } else format(menuBody[len],511-len,"^n0. %L", id, pos ? "BACK" : "EXIT") show_menu(id,keys,menuBody,-1,"Ban Menu") } public cmdBanMenu(id,level,cid) { if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED g_menuOption[id] = 0 // This is the first menuoption that is used g_menuSettings[id] = 5 // This number is the first bantime option when you want to ban with the menu displayBanMenu(id,g_menuPosition[id] = 0) return PLUGIN_HANDLED } cmdBanReasonMenu(id) { new menuBody[1024] new len = format(menuBody,1023, g_coloredMenus ? "\y%s\R^n\w^n" : "%s^n^n","Reason") new i=0; while (i<7) // This might wanna be changed to 7 if you want to be able to have 7 reasons { len+=format(menuBody[len],1023-len,"%d. %s^n",i+1,g_banReasons[i]) i++ } len+=format(menuBody[len],1023-len,"^n8. Custom^n") if (g_lastCustom[id][0]!='^0') len+=format(menuBody[len],1023-len,"^n9. %s^n",g_lastCustom[id]) len+=format(menuBody[len],1023-len,"^n0. %L^n",id,"EXIT") new keys = MENU_KEY_1 | MENU_KEY_2 | MENU_KEY_3 | MENU_KEY_4 | MENU_KEY_5 | MENU_KEY_6 | MENU_KEY_7 | MENU_KEY_8 | MENU_KEY_0 if (g_lastCustom[id][0]!='^0') keys |= MENU_KEY_9 show_menu(id,keys,menuBody,-1,"Ban Reason Menu") } public actionBanMenuReason(id,key) { switch (key) { case 9: // go back to ban menu { displayBanMenu(id,g_menuPosition[id]) } case 7: { g_inCustomReason[id]=1 client_cmd(id,"messagemode amxbans_menureason") return PLUGIN_HANDLED } case 8: { banUser(id,g_lastCustom[id]) } default: { banUser(id,g_banReasons[key]) } } return PLUGIN_HANDLED } /* id is the player banning, not player being banned :] */ banUser(id,banReason[]) { new player = g_bannedPlayer[id] new name[32], name2[32], authid[32],authid2[32] get_user_name(player,name2,31) get_user_authid(player,authid2,31) get_user_authid(id,authid,31) get_user_name(id,name,31) /* lan */ // if (equal("4294967295",authid2)) if ( (equal("4294967295", authid2)) || (equal("HLTV", authid2)) || equal("STEAM_ID_LAN",authid2) || equal("VALVE_ID_LAN",authid2) ) { new ipa[32] get_user_ip(player,ipa,31,1) console_cmd(id,"amx_banip %d %s %s" ,g_menuSettings[id],ipa,banReason) /*new userid userid = get_user_userid(player) console_cmd(id,"amx_banip %d #%d %s" ,g_menuSettings[id],userid,banReason)*/ } else console_cmd(id,"amx_ban %d %s %s" ,g_menuSettings[id],authid2,banReason) server_exec() } public cmdBanMenuReason(id,level,cid) { if (!cmd_access(id,level,cid,1)) { return PLUGIN_HANDLED } new szReason[128] read_argv(1,szReason,127) copy(g_lastCustom[id],127,szReason) if (g_inCustomReason[id]) { g_inCustomReason[id]=0 banUser(id,g_lastCustom[id]) } return PLUGIN_HANDLED } public sql_ban(adminid,player,ban_type[],player_ip[], player_nick[], admin_ip[], admin_steamid[], admin_nick[], ban_reason[], ban_length[]) { new query[1024] if (equal(ban_type, "S")) { format(query,1024,"SELECT player_ip FROM %s WHERE player_ip='%s'", tbl_bans, player_ip) } else { format(query,1024,"SELECT player_ip FROM %s WHERE player_ip='%s'", tbl_bans, player_ip) } new Result:result = dbi_query(sql,query) new Result:Retval = RESULT_NONE if (result == RESULT_FAILED) { dbi_error(sql,merror,128) client_print(adminid,print_console,"[AMXBANS] %L",LANG_PLAYER,"SQL_BAN_ERROR",merror) server_print("[AMXBANS] %L",LANG_SERVER,"SQL_BAN_ERROR",merror) log_amx("[AMXBANS] %L",LANG_SERVER,"SQL_BAN_ERROR",merror) return PLUGIN_HANDLED } if (dbi_nextrow(result)>0) { dbi_free_result(result) if (strlen(player_ip)>0) { Retval = dbi_query(sql,"UPDATE `%s` SET player_ip='%s' WHERE player_ip='%s'", tbl_bans, player_ip) if (Retval == RESULT_FAILED) { dbi_error(sql,merror,128) client_print(adminid,print_console,"[AMXBANS] %L",LANG_PLAYER,"SQL_BAN_UPDATE_ERROR",merror) server_print("[AMXBANS] %L",LANG_SERVER,"SQL_BAN_UPDATE_ERROR",merror) log_amx("[AMXBANS] %L",LANG_SERVER,"SQL_BAN_UPDATE_ERROR",merror) } else { client_print(adminid,print_console,"[AMXBANS] %L",LANG_PLAYER,"ALLREADY_BANNED_IP_ADDED",player_ip, player_ip) server_print("[AMXBANS] %L",LANG_SERVER,"ALLREADY_BANNED_IP_ADDED",player_ip, player_ip) } } else { client_print(adminid,print_console,"[AMXBANS] %L",LANG_PLAYER,"ALLREADY_BANNED",player_ip) server_print("[AMXBANS] %L",LANG_SERVER,"ALLREADY_BANNED",player_ip) } return PLUGIN_HANDLED } new ip[32] get_cvar_string("ip", ip, 32) /*new port[10] get_cvar_string("port", port, 10)*/ // This is a new way of getting the port number new ip_port[42], ip_tmp[32] , port[10] get_user_ip(0, ip_port, 41) strtok(ip_port, ip_tmp, 31, port, 9, ':') new server_name[100] get_cvar_string("hostname",server_name,100) new ban_created = get_systime(0) #if defined ADD_MAPNAME_IN_SERVERNAME new mapname[32], pre[4],post[4] get_mapname(mapname,31) pre = " (" post = ")" add(server_name,255,pre,0) add(server_name,255,mapname,0) add(server_name,255,post,0) #endif //make sure there are no single quotes in these 4 vars szQuerySafe(player_nick) replaceall(player_nick, 50, "\", "") replaceall(player_nick, 50, "'", "") szQuerySafe(admin_nick) replaceall(admin_nick, 50, "\", "") replaceall(admin_nick, 50, "'", "") szQuerySafe(ban_reason) replaceall(ban_reason, 255, "\", "") replaceall(ban_reason, 255, "'", "") szQuerySafe(server_name) replaceall(server_name, 100, "\", "") replaceall(server_name, 100, "'", "") Retval = dbi_query(sql,"INSERT into `%s` (player_id,player_ip,player_nick,admin_ip,admin_id,admin_nick,ban_type,ban_reason,ban_created,ban_length,server_name,server_ip) values('%s','%s','%s','%s','%s','%s','%s','%s','%i','%s','%s','%s:%s')",tbl_bans, player_ip, player_ip, player_nick, admin_ip, admin_steamid, admin_nick, ban_type,ban_reason, ban_created, ban_length,server_name, ip,port) if (Retval == RESULT_FAILED) { dbi_error(sql,merror,128) client_print(adminid,print_console,"[AMXBANS] %L",LANG_PLAYER,"SQL_BAN_INSERT_ERROR",merror) server_print("[AMXBANS] %L",LANG_SERVER,"SQL_BAN_INSERT_ERROR",merror) log_amx("[AMXBANS] %L",LANG_SERVER,"SQL_BAN_INSERT_ERROR",merror) return PLUGIN_HANDLED } new bid[20] new Result:Result2 = dbi_query(sql,"SELECT bid FROM `%s` WHERE player_ip='%s'", tbl_bans, player_ip) if (Result2 == RESULT_FAILED) { dbi_error(sql,merror,128) client_print(adminid,print_console,"[AMXBANS] %L",LANG_PLAYER,"SQL_ERROR",merror) server_print("[AMXBANS] %L",LANG_SERVER,"SQL_ERROR",merror) log_amx("[AMXBANS] %L",LANG_SERVER,"SQL_ERROR",merror) return PLUGIN_HANDLED } if (dbi_nextrow(Result2)>0) { dbi_field(Result2,1,bid,20) } else { copy(bid,20, "0") } dbi_free_result(Result2) new amxban_motd_url[256] new Result:Result3 = dbi_query(sql,"SELECT amxban_motd FROM `%s` where address = '%s:%s'",tbl_svrnfo,ip,port) if (Result3 == RESULT_FAILED) { dbi_error(sql,merror,128) client_print(adminid,print_console,"[AMXBANS] %L",LANG_PLAYER,"SQL_ERROR",merror) server_print("[AMXBANS] %L",LANG_SERVER,"SQL_ERROR",merror) log_amx("[AMXBANS] %L",LANG_SERVER,"SQL_ERROR",merror) return PLUGIN_HANDLED } if (dbi_nextrow(Result3)>0) { dbi_field(Result3,1,amxban_motd_url,256) } else { copy(amxban_motd_url,256, "0") } dbi_free_result(Result3) if (player) { if (equal(ban_type, "S")) { client_print(adminid,print_console,"[AMXBANS] %L",LANG_PLAYER,"STEAMID_BANNED_SUCCESS_IP_LOGGED",player_ip) } else { client_print(adminid,print_console,"[AMXBANS] %L",LANG_PLAYER,"STEAMID_BANNED_SUCCESS",player_ip) } new cTimeLength[128], iBanLength = str_to_num(ban_length) if (iBanLength > 0) get_time_length(str_to_num(ban_length), TIMEUNIT_MINUTES, cTimeLength, 127) else format(cTimeLength, 127, "%L", LANG_PLAYER, "TIME_ELEMENT_PERMANENTLY") client_print(player,print_console,"[AMXBANS] ===============================================") client_print(player,print_console,"[AMXBANS] %L",LANG_PLAYER,"MSG_1") client_print(player,print_console,"[AMXBANS] %L",LANG_PLAYER,"MSG_2", ban_reason) client_print(player,print_console,"[AMXBANS] %L",LANG_PLAYER,"MSG_3", cTimeLength) client_print(player,print_console,"[AMXBANS] %L",LANG_PLAYER,"MSG_4", player_ip) client_print(player,print_console,"[AMXBANS] %L",LANG_PLAYER,"MSG_5", player_ip) client_print(player,print_console,"[AMXBANS] ===============================================") if (get_cvar_num("amx_show_activity") == 2) { client_print(player,print_console,"[AMXBANS] Banned by admin %s", admin_nick) ban_motd = "<body bgcolor=#9CB3B3><font size=^"18^" color=^"red^">You have been banned.</font><br><br><font color=^"black^">Reason: %s<br>Length: %s<br>Steam ID: %s<br>Admin: %s</font>" } else { client_print(player,print_console,"[AMXBANS] You have been banned from this server") ban_motd = "<body bgcolor=#9CB3B3><font size=^"18^" color=^"red^">You have been banned.</font><br><br><font color=^"black^">Reason: %s<br>Length: %s<br>Steam ID: %s</font>" } new msg[4096] if (equal(amxban_motd_url, "")) { if (get_cvar_num("amx_show_activity") == 2) format(msg, 4096, ban_motd, ban_reason, cTimeLength, player_ip, admin_nick) else format(msg, 4096, ban_motd, ban_reason, cTimeLength, player_ip) } else format(msg, 4096, amxban_motd_url, bid) show_motd(player, msg, "Banned") new id_str[3] num_to_str(player,id_str,3) set_task(kick_delay,"delayed_kick",1,id_str,3) } else { client_print(adminid,print_console,"[AMXBANS] %L",LANG_PLAYER,"STEAMID_BANNED_SUCCESS",player_ip) } return PLUGIN_CONTINUE } public amx_ban(id,level,cid) { if (!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED if (read_argc() < 4) { client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"AMX_BAN_SYNTAX") return PLUGIN_HANDLED } new admin_ip[100], admin_steamid[50], admin_nick[100], admin_userid, admin_team[10] new player_ip[50], player_nick[100], ban_reason[255], ban_length[50] get_user_ip(id,admin_ip,100,1) get_user_name(id,admin_nick,100) admin_userid = get_user_userid(id) if (admin_userid != 0) { get_user_authid(id, admin_steamid, 50) get_user_team(id, admin_team, 10) } else { admin_steamid = "" admin_team = "" new servernick[100] get_cvar_string("amxbans_servernick", servernick, 99) if (strlen(servernick)) admin_nick = servernick } new steamidorusername[50] new text[128] read_args(text,128) parse(text,ban_length,50,steamidorusername,50) new length1 = strlen(ban_length) new length2 = strlen(steamidorusername) new length = length1 + length2 length+=2 new reason[128] read_args(reason,128) format(ban_reason, 255, "%s", reason[length]) new cTimeLength[128], iBanLength = str_to_num(ban_length) if (iBanLength > 0) get_time_length(str_to_num(ban_length), TIMEUNIT_MINUTES, cTimeLength, 127) else format(cTimeLength, 127, "%L", LANG_PLAYER, "TIME_ELEMENT_PERMANENTLY") // This stops admins from banning perm in console if not adminflag n if(!(get_user_flags(id)&HIGHER_BAN_TIME_ADMIN) && iBanLength == 0) { client_print(id,print_console,"You are not allowed to ban Permanently in console!!") return PLUGIN_HANDLED } // This stops admins from banning more than 600 min in console if not adminflag n if(!(get_user_flags(id)&HIGHER_BAN_TIME_ADMIN) && iBanLength > g_LowBanMenuValues[3]) { client_print(id,print_console,"You can ban max %i minutes in console!!", g_LowBanMenuValues[3]) return PLUGIN_HANDLED } #if defined USE_NEW_BANMETHOD new player = cmd_target(id, steamidorusername, 11) if (!player) { player = find_player("d",steamidorusername)//Finds player with given ip if(player) log_amx("[AMXBANS DEBUG amx_ban] Found a player from ip given") } else log_amx("[AMXBANS DEBUG amx_ban] Found a player with cmd_target") if (!player){ log_amx("[AMXBANS DEBUG amx_ban] No player was found") return PLUGIN_HANDLED } get_user_authid(player, player_ip, 50) get_user_name(player, player_nick, 100) get_user_ip(player, player_ip, 50, 1) if(equal(player_ip,"STEAM_ID_PENDING")) { client_print(id,print_chat,"Player: <%s> steamid: <%s> has STEAM_ID_PENDING. USE KICK Instead",player_nick ,player_ip) client_print(id,print_console,"Player: <%s> steamid: <%s> has STEAM_ID_PENDING. USE KICK Instead",player_nick ,player_ip) server_print("Player: <%s> steamid: <%s> has STEAM_ID_PENDING",player_nick ,player_ip) log_amx("Player: <%s> steamid: <%s> has STEAM_ID_PENDING",player_nick ,player_ip) return PLUGIN_HANDLED } /* If it is on a lan the steamid must not be inserted then everybode on the LAN would be considered banned. Only IP and nick is enough for LAN bans */ if ( (equal("4294967295", player_ip)) || (equal("HLTV", player_ip)) || equal("STEAM_ID_LAN",player_ip) || equal("VALVE_ID_LAN",player_ip) ) player_ip = "" #else new player = find_player("c",steamidorusername) if (!player) { player = find_player("bl",steamidorusername) } if (player) { if (get_user_flags(player)&ADMIN_IMMUNITY) { client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"HAS_IMMUNITY") return PLUGIN_HANDLED } else if (is_user_bot(player)) { client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"IS_BOT") return PLUGIN_HANDLED } else if (is_user_hltv(player)) { client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"IS_HLTV") return PLUGIN_HANDLED } get_user_authid(player, player_ip, 50) get_user_name(player, player_nick, 100) get_user_ip(player, player_ip, 50, 1) } else { format(player_ip, 50, "%s", steamidorusername) format(player_nick, 100, "unknown_%s", player_ip) format(player_ip, 50, "") } #endif // Logs all bans by admins to amxx logs log_amx("%L", LANG_SERVER, "BAN_LOG", admin_nick, admin_userid, admin_steamid, admin_team, player_nick, player_ip, cTimeLength, iBanLength, ban_reason) // If you use HLSW you will see when someone ban a player if you can see the chatlogs log_message("^"%s<%d><%s><%s>^" triggered ^"amx_chat^" (text ^"%L^")", admin_nick, admin_userid, admin_steamid, admin_team, LANG_SERVER, "BAN_CHATLOG", player_nick, player_ip, cTimeLength, iBanLength, ban_reason) sql_ban(id,player,"S",player_ip, player_nick, admin_ip, admin_steamid, admin_nick, ban_reason, ban_length) #if defined BCAST_BANS if (get_cvar_num("amx_show_activity") == 2) client_print(0,print_chat,"%L",LANG_PLAYER,"PUBLIC_BAN_ANNOUNCE_2", player_nick, cTimeLength, ban_reason, admin_nick) else client_print(0,print_chat,"%L",LANG_PLAYER,"PUBLIC_BAN_ANNOUNCE", player_nick, cTimeLength, ban_reason) #endif return PLUGIN_HANDLED } public amx_banip(id,level,cid) { if (!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED if (read_argc() < 4) { client_print(id,print_console,"[AMXBANS] %L",LANG_SERVER,"AMX_BANIP_SYNTAX") return PLUGIN_HANDLED } new admin_ip[100], admin_steamid[50], admin_nick[100], admin_userid, admin_team[10] new player_ip[50], player_nick[100], ban_reason[255], ban_length[50] get_user_ip(id,admin_ip,100,1) get_user_name(id,admin_nick,100) admin_userid = get_user_userid(id) if (admin_userid != 0) { get_user_authid(id, admin_steamid, 50) get_user_team(id, admin_team, 10) } else { admin_steamid = "" admin_team = "" new servernick[100] get_cvar_string("amxbans_servernick", servernick, 99) if (strlen(servernick)) admin_nick = servernick } new steamidorusername[50] new text[128] read_args(text,128) parse(text,ban_length,50,steamidorusername,50) new length1 = strlen(ban_length) new length2 = strlen(steamidorusername) new length = length1 + length2 length+=2 new reason[128] read_args(reason,128) format(ban_reason, 255, "%s", reason[length]) new cTimeLength[128], iBanLength = str_to_num(ban_length) if (iBanLength > 0) get_time_length(iBanLength, TIMEUNIT_MINUTES, cTimeLength, 127) else format(cTimeLength, 127, "%L", LANG_PLAYER, "TIME_ELEMENT_PERMANENTLY") // This stops admins from banning perm in console if not adminflag n if(!(get_user_flags(id)&HIGHER_BAN_TIME_ADMIN) && iBanLength == 0) { client_print(id,print_console,"You are not allowed to ban Permanently in console") return PLUGIN_HANDLED } // This stops admins from banning more than 600 min in console if not adminflag n if(!(get_user_flags(id)&HIGHER_BAN_TIME_ADMIN) && iBanLength > g_LowBanMenuValues[3]) { client_print(id,print_console,"You are not allowed to ban more than %i min in console", g_LowBanMenuValues[3]) return PLUGIN_HANDLED } #if defined USE_NEW_BANMETHOD new player = cmd_target(id, steamidorusername, 11) if (!player) { player = find_player("d",steamidorusername)//Finds player with given ip if(player) log_amx("[AMXBANS DEBUG amx_banip] Found a player from ip given") } else log_amx("[AMXBANS DEBUG amx_banip] Found a player with cmd_target") if (!player){ log_amx("[AMXBANS DEBUG amx_banip] No player was found") return PLUGIN_HANDLED } get_user_authid(player, player_ip, 50) get_user_name(player, player_nick, 100) get_user_ip(player, player_ip, 50, 1) if(equal(player_ip,"STEAM_ID_PENDING")) { client_print(id,print_chat,"Player: <%s> steamid: <%s> has STEAM_ID_PENDING. USE KICK Instead",player_nick ,player_ip) client_print(id,print_console,"Player: <%s> steamid: <%s> has STEAM_ID_PENDING. USE KICK Instead",player_nick ,player_ip) server_print("Player: <%s> steamid: <%s> has STEAM_ID_PENDING",player_nick ,player_ip) log_amx("Player: <%s> steamid: <%s> has STEAM_ID_PENDING",player_nick ,player_ip) return PLUGIN_HANDLED } /* If it is on a lan the steamid must not be inserted then everybode on the LAN would be considered banned. Only IP and nick is enough for LAN bans */ if ( (equal("4294967295", player_ip)) || (equal("HLTV", player_ip)) || equal("STEAM_ID_LAN",player_ip) || equal("VALVE_ID_LAN",player_ip) ) player_ip = "" #else new player = find_player("c",steamidorusername) if (!player) { player = find_player("bl",steamidorusername) } if (player) { if (get_user_flags(player)&ADMIN_IMMUNITY) { client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"HAS_IMMUNITY") return PLUGIN_HANDLED } else if (is_user_bot(player)) { client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"IS_BOT") return PLUGIN_HANDLED } else if (is_user_hltv(player)) { client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"IS_HLTV") return PLUGIN_HANDLED } get_user_authid(player, player_ip, 50) get_user_name(player, player_nick, 100) get_user_ip(player, player_ip, 50, 1) } else { format(player_ip, 50, "%s", steamidorusername) format(player_nick, 100, "unknown_%s", player_ip) format(player_ip, 50, ""); } #endif // Logs all bans by admins to amxx logs log_amx("%L", LANG_SERVER, "BAN_LOG", admin_nick, admin_userid, admin_steamid, admin_team, player_nick, player_ip, cTimeLength, iBanLength, ban_reason) // If you use HLSW you will see when someone ban a player if you can see the chatlogs log_message("^"%s<%d><%s><%s>^" triggered ^"amx_chat^" (text ^"%L^")", admin_nick, admin_userid, admin_steamid, admin_team, LANG_SERVER, "BAN_CHATLOG", player_nick, player_ip, cTimeLength, iBanLength, ban_reason) sql_ban(id,player,"SI",player_ip, player_nick, admin_ip, admin_steamid, admin_nick, ban_reason, ban_length) #if defined BCAST_BANS if (get_cvar_num("amx_show_activity") == 2) client_print(0,print_chat,"%L",LANG_PLAYER,"PUBLIC_BAN_ANNOUNCE_2",player_nick,cTimeLength,ban_reason, admin_nick) else client_print(0,print_chat,"%L",LANG_PLAYER,"PUBLIC_BAN_ANNOUNCE",player_nick,cTimeLength,ban_reason) #endif return PLUGIN_HANDLED } // This function searches the active bans amx_bans table public amx_find(id,level,cid) { if (!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED if (dbi_error(sql,merror,128)) { client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"GENERIC_SQL_ERROR",merror) server_print("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) log_amx("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) return PLUGIN_HANDLED } new player_ip[50] , steamidorusername[50] read_args(steamidorusername,50) trim(steamidorusername) new player = find_player("c",steamidorusername) if (!player) { player = find_player("bl",steamidorusername) } if (player) { if (get_user_flags(player)&ADMIN_IMMUNITY) { client_print(id,print_console,"[AMXX] %L",LANG_PLAYER,"HAS_IMMUNITY") return PLUGIN_HANDLED } else if (is_user_bot(player)) { client_print(id,print_console,"[AMXX] %L",LANG_PLAYER,"IS_BOT") return PLUGIN_HANDLED } else if (is_user_hltv(player)) { client_print(id,print_console,"[AMXX] %L",LANG_PLAYER,"IS_HLTV") return PLUGIN_HANDLED } get_user_authid(player, player_ip, 50) } else format(player_ip, 50, "%s", steamidorusername) new Result:result = dbi_query(sql,"SELECT bid,ban_created,ban_length,ban_reason,admin_nick,admin_id,player_nick FROM `%s` WHERE player_ip='%s' order by ban_created desc", tbl_bans, player_ip) //log_amx("SELECT bid,ban_created,ban_length,ban_reason,admin_nick,admin_id,player_nick FROM `%s` WHERE player_id='%s' order by ban_created desc", tbl_bans, player_ip) if (result == RESULT_FAILED) { dbi_error(sql,merror,127) client_print(id, print_console, "[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) server_print("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) log_amx("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) //dbi_free_result(result) return PLUGIN_HANDLED } else if (result == RESULT_NONE) { client_print(id, print_console, "[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_NORESULT", player_ip) server_print("[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_NORESULT", player_ip) dbi_free_result(result) return PLUGIN_HANDLED } new bid[20], ban_created[50], ban_length[50], ban_reason[255], admin_nick[100],admin_steamid[50],player_nick[100],remaining[128] new ban_created_int, ban_length_int, current_time_int, ban_left new res = dbi_num_rows(result) //new res = dbi_nextrow(result) if (res > 0) { client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_RESULT_1",player_ip) //while (res>0) while (dbi_nextrow(result)>0) { dbi_field(result,1,bid,20) dbi_field(result,2,ban_created,50) dbi_field(result,3,ban_length,50) dbi_field(result,4,ban_reason,255) dbi_field(result,5,admin_nick,50) dbi_field(result,6,admin_steamid,50) dbi_field(result,7,player_nick,50) current_time_int = get_systime(0) ban_created_int = str_to_num(ban_created) ban_length_int = str_to_num(ban_length) * 60 // in secs if ((ban_length_int == 0) || (ban_created_int==0)) { remaining = "eternity!" } else { ban_left = (ban_created_int+ban_length_int-current_time_int) if (ban_left <= 0) format(remaining,127,"none",ban_left) else get_time_length(ban_left, TIMEUNIT_SECONDS, remaining, 127) } client_print(id,print_console," ") client_print(id,print_console,"[AMXBANS] =================") client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_RESULT_2", bid, player_nick) client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_RESULT_3", admin_nick, admin_steamid, ban_reason) client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_RESULT_4", ban_length,remaining) client_print(id,print_console,"[AMXBANS] =================") client_print(id,print_console," ") server_print(" ") server_print("[AMXBANS] =================") server_print("[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_RESULT_2", bid, player_nick) server_print("[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_RESULT_3", admin_nick, admin_steamid, ban_reason) server_print("[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_RESULT_4", ban_length,remaining) server_print("[AMXBANS] =================") server_print(" ") } dbi_free_result(result) } else { client_print(id, print_console, "[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_NORESULT", player_ip) } return PLUGIN_HANDLED } // This function searches the expired bans amx_banhistory table public amx_findex(id,level,cid) { if (!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED if (dbi_error(sql,merror,128)) { client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"GENERIC_SQL_ERROR",merror) server_print("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) log_amx("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) return PLUGIN_HANDLED } new player_ip[50] , steamidorusername[50] read_args(steamidorusername,50) trim(steamidorusername) new player = find_player("c",steamidorusername) if (!player) { player = find_player("bl",steamidorusername) } if (player) { if (get_user_flags(player)&ADMIN_IMMUNITY) { client_print(id,print_console,"[AMXX] %L",LANG_PLAYER,"HAS_IMMUNITY") return PLUGIN_HANDLED } else if (is_user_bot(player)) { client_print(id,print_console,"[AMXX] %L",LANG_PLAYER,"IS_BOT") return PLUGIN_HANDLED } else if (is_user_hltv(player)) { client_print(id,print_console,"[AMXX] %L",LANG_PLAYER,"IS_HLTV") return PLUGIN_HANDLED } get_user_authid(player, player_ip, 50) } else format(player_ip, 50, "%s", steamidorusername) new Result:result = dbi_query(sql,"SELECT bhid,ban_created,ban_length,ban_reason,admin_nick,admin_id,player_nick FROM `%s` WHERE player_ip='%s' order by ban_created desc", tbl_banhist, player_ip) //log_amx("SELECT bhid,ban_created,ban_length,ban_reason,admin_nick,admin_id,player_nick FROM `%s` WHERE player_id='%s' order by ban_created desc", tbl_banhist, player_ip) if (result == RESULT_FAILED) { dbi_error(sql,merror,127) client_print(id, print_console, "[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) server_print("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) log_amx("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) //dbi_free_result(result) return PLUGIN_HANDLED } else if (result == RESULT_NONE) { client_print(id, print_console, "[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_NORESULT", player_ip) server_print("[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_NORESULT", player_ip) dbi_free_result(result) return PLUGIN_HANDLED } new bid[20], ban_created[50], ban_length[50], ban_reason[255], admin_nick[100],admin_steamid[50],player_nick[100],remaining[128] new ban_created_int, ban_length_int, current_time_int, ban_left new res = dbi_num_rows(result) //new res = dbi_nextrow(result) if (res > 0) { client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_RESULT_1",player_ip) //while (res>0) while (dbi_nextrow(result)>0) { dbi_field(result,1,bid,20) dbi_field(result,2,ban_created,50) dbi_field(result,3,ban_length,50) dbi_field(result,4,ban_reason,255) dbi_field(result,5,admin_nick,50) dbi_field(result,6,admin_steamid,50) dbi_field(result,7,player_nick,50) current_time_int = get_systime(0) ban_created_int = str_to_num(ban_created) ban_length_int = str_to_num(ban_length) * 60 // in secs if ((ban_length_int == 0) || (ban_created_int==0)) { remaining = "eternity!" } else { ban_left = (ban_created_int+ban_length_int-current_time_int) if (ban_left <= 0) format(remaining,127,"none",ban_left) else get_time_length(ban_left, TIMEUNIT_SECONDS, remaining, 127) } client_print(id,print_console," ") client_print(id,print_console,"[AMXBANS] =================") client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_RESULT_2", bid, player_nick) client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_RESULT_3", admin_nick, admin_steamid, ban_reason) client_print(id,print_console,"[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_RESULT_4", ban_length,remaining) client_print(id,print_console,"[AMXBANS] =================") client_print(id,print_console," ") server_print(" ") server_print("[AMXBANS] =================") server_print("[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_RESULT_2", bid, player_nick) server_print("[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_RESULT_3", admin_nick, admin_steamid, ban_reason) server_print("[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_RESULT_4", ban_length,remaining) server_print("[AMXBANS] =================") server_print(" ") } dbi_free_result(result) } else { client_print(id, print_console, "[AMXBANS] %L",LANG_PLAYER,"AMX_FIND_NORESULT", player_ip) } return PLUGIN_HANDLED } public client_authorized(id) { new parm[1] parm[0] = id set_task(0.5, "check_player", 0, parm, 1) return PLUGIN_CONTINUE } public check_player(parms[]) { new id = parms[0] if(is_user_bot(id) || is_user_hltv(id)) return PLUGIN_HANDLED new player_ip[50] get_user_authid(id,player_ip,50) get_user_ip(id,player_ip,50,1) new query[4096] format(query,4096,"SELECT bid,ban_created,ban_length,ban_reason,admin_nick,admin_id,player_nick,server_name,server_ip,ban_type FROM `%s` WHERE (player_ip='%s')",tbl_bans,player_ip) new Result:result = dbi_query(sql,query) if (result == RESULT_FAILED) { dbi_error(sql,merror,127) server_print("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) log_amx("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) //dbi_free_result(result) return PLUGIN_HANDLED } else if (result == RESULT_NONE) { dbi_free_result(result) return PLUGIN_HANDLED } if(dbi_nextrow(result)>0) { new bid[20], ban_created[50], ban_length[50], ban_reason[255], admin_nick[100],admin_steamid[50],player_nick[100],server_name[100],server_ip[100],bantype[10] dbi_field(result,1,bid,20) dbi_field(result,2,ban_created,50) dbi_field(result,3,ban_length,50) dbi_field(result,4,ban_reason,255) dbi_field(result,5,admin_nick,50) dbi_field(result,6,admin_steamid,50) dbi_field(result,7,player_nick,50) dbi_field(result,8,server_name,100) dbi_field(result,9,server_ip,100) dbi_field(result,10,bantype,10) new current_time_int = get_systime(0) new ban_created_int = str_to_num(ban_created) new ban_length_int = str_to_num(ban_length) * 60 // in secs dbi_free_result(result) // A ban was found for the connecting player!! Lets see how long it is or if it has expired if ((ban_length_int == 0) || (ban_created_int==0) || (ban_created_int+ban_length_int > current_time_int)) { if (get_cvar_num("amx_show_activity") == 2) client_cmd(id, "echo ^"[AMXBANS] You have been banned by admin %s from this server.^"", admin_nick) else client_cmd(id, "echo ^"[AMXBANS] You have been banned from this server.^"") if (ban_length_int==0) { client_cmd(id, "echo ^"[AMXBANS] You are permanently banned.^"") } else { new cTimeLength[128], iSecondsLeft = (ban_created_int + ban_length_int - current_time_int) get_time_length(iSecondsLeft, TIMEUNIT_SECONDS, cTimeLength, 127) client_cmd(id, "echo ^"[AMXBANS] %s remaining. ^"", cTimeLength) //log_amx("Tid kvar: %s", cTimeLength) } client_cmd(id, "echo ^"[AMXBANS] Reason: %s. ^"", ban_reason) client_cmd(id, "echo ^"[AMXBANS] Your nick: %s.^"", player_nick) client_cmd(id, "echo ^"[AMXBANS] Your IP is: %s. ^"", player_ip) if ( get_cvar_num("amxbans_debug") == 1 ) log_amx("[AMXBANS DEBUG] BID:<%s> Player:<%s> <%s> connected and got kicked, because of an active ban", bid, player_nick, player_ip) new id_str[3] num_to_str(id,id_str,3) if ( get_cvar_num("amxbans_debug") == 1 ) log_amx("[AMXBANS DEBUG] Delayed Kick-TASK ID1: <%d> ID2: <%s>", id, id_str) set_task(3.5,"delayed_kick",0,id_str,3) return PLUGIN_HANDLED } else // The ban has expired { client_cmd(id, "echo ^"[AMXBANS] You were been banned at least once, dont let it happen again!.^"") new unban_created = get_systime(0) //make sure there are no single quotes in these 4 vars szQuerySafe(player_nick) replaceall(player_nick, 50, "\", "") replaceall(player_nick, 50, "'", "") szQuerySafe(admin_nick) replaceall(admin_nick, 50, "\", "") replaceall(admin_nick, 50, "'", "") szQuerySafe(ban_reason) replaceall(ban_reason, 255, "\", "") replaceall(ban_reason, 255, "'", "") szQuerySafe(server_name) replaceall(server_name, 100, "\", "") replaceall(server_name, 100, "'", "") new Result:Retval = dbi_query(sql,"INSERT INTO `%s` (player_id,player_ip,player_nick,admin_id,admin_nick,ban_type,ban_reason,ban_created,ban_length,server_ip,server_name,unban_created,unban_reason,unban_admin_nick) values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%i','Bantime expired','amxbans')",tbl_banhist,player_ip,player_ip,player_nick,admin_steamid,admin_nick,bantype,ban_reason,ban_created,ban_length,server_ip,server_name,unban_created) if ( get_cvar_num("amxbans_debug") == 1 ) log_amx("[AMXBANS DEBUG] PRUNE BAN: INSERT INTO `%s` (values('%s','%s','%s')",tbl_banhist,player_ip,player_nick,ban_length) new Result:Retval2 = dbi_query(sql,"DELETE FROM `%s` WHERE bid=%s",tbl_bans,bid) if ( get_cvar_num("amxbans_debug") == 1 ) log_amx("[AMXBANS DEBUG] PRUNE BAN: DELETE FROM `%s` WHERE bid=%s",tbl_bans,bid) if (Retval == RESULT_FAILED) { dbi_error(sql,merror,128) server_print("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) log_amx("[AMXBANS DEBUG] PRUNE BAN: Retval GENERIC_SQL_ERROR") return PLUGIN_HANDLED } if (Retval > RESULT_NONE) { dbi_free_result(Retval) log_amx("[AMXBANS DEBUG] dbi_free_result(Retval in check_player)") } if (Retval2 == RESULT_FAILED) { dbi_error(sql,merror,128) server_print("[AMXBANS] %L",LANG_SERVER,"GENERIC_SQL_ERROR",merror) log_amx("[AMXBANS DEBUG] PRUNE BAN: Retval2 GENERIC_SQL_ERROR") return PLUGIN_HANDLED } if (Retval2 > RESULT_NONE) { dbi_free_result(Retval2) // Added to free Result:Retval2 050904 lantz69 log_amx("[AMXBANS DEBUG] dbi_free_result(Retval2 in check_player)") } return PLUGIN_HANDLED } } return PLUGIN_CONTINUE } public delayed_kick(id_str[]) { new player_ip = str_to_num(id_str) new userid = get_user_userid(player_ip) if ( get_cvar_num("amxbans_debug") == 1 ) log_amx("[AMXBANS DEBUG] Delayed Kick IP: <%s>", id_str) server_cmd("kick #%d ^"You are BANNED. Check your console.^"",userid) return PLUGIN_CONTINUE } public kick_steamID_pending(id) { new player_ip[50] get_user_authid(id,player_ip,49) if(equal(player_ip,"STEAM_ID_PENDING")) // If still have STEAM_ID_PENDING Then KICK { new name[32],ip[40] get_user_name(id,name,31) get_user_ip(id,ip,39) client_print(0,print_chat,"[AMXBANS] %s was kicked for having STEAM_ID_PENDING",name) log_amx("[AMXBANS] %s (IP: %s ) was kicked for having STEAM_ID_PENDING",name,ip) server_cmd("kick #%d because of STEAM_ID_PENDING",get_user_userid(id)) } else // If not STEAM_ID_PENDING then a new check if banned will be done { new parm[1] parm[0] = id set_task(0.5, "check_player", 0, parm, 1) } return PLUGIN_CONTINUE } public cmdLst(id,level,cid) { new players[32], inum, authid[32],name[32],ip[50] get_players(players,inum) console_print(id,"playerinfo") for(new a = 0; a < inum; ++a) { get_user_ip(players[a],ip,49,1) get_user_authid(players[a],authid,31) get_user_name(players[a],name,31) console_print(id,"#WM#%s#WMW#%s#WMW#%s#WMW#",name,authid,ip) } return PLUGIN_HANDLED } public plugin_end() { dbi_close(sql) } //escapes ' and " characters szQuerySafe(szString[], iStringSize = 0) { new helpString[128] //temporary string copy(helpString,127,szString) if (!iStringSize) //no length specified { //as soon as we stumble on a character stop the length counting while ( szString[iStringSize] ) { iStringSize++ } } if ( !contain(szString, "'") && !contain(szString, "^"") ) return //do nothing" new i, j while (i < iStringSize) { if (helpString[i] == '^'' || helpString[i] == '^"') { szString[j++] = '\' //replace the single quote with a space } szString[j] = helpString[i] i++ j++ } } stock replaceall(text[], const LEN, const WHAT[], const WITH[]) { while (contain(text, WHAT) != -1){ server_print("[AMXXBANS DEBUG] Replacing a bad charachter <%s> with <%s> for Sql queries :D", WHAT, WITH) replace(text, LEN, WHAT, WITH) } } /* stock escape(search[]) { new array[3] = { "^'^"\" } new len = strlen(search) - 1 for(new i = 0; i < 3; i++) { new new_array[2] new_array[0] = "\" new_array[1] = array[i] while(contain(search, array[i]) != -1) replace(text, len, array[i], new_array) } } */ get_time_length(iTimeUnits, iUnitType, cOutput[], iOutputLen) { // iUnits: The number of time units you want translated into verbose text. // iUnitType: The type of unit (i.e. seconds, minutes, hours, days, weeks) that you are passing in. See the defines for TIMEUNIT_. // cOutput: The variable you want the verbose text to be placed in. // iOutputLen: The length of the cOutput variable. if (iTimeUnits > 0) { // determine the number of each time unit there are new iWeekCnt = 0, iDayCnt = 0, iHourCnt = 0, iMinuteCnt = 0, iSecondCnt = 0 switch (iUnitType) { case TIMEUNIT_SECONDS: iSecondCnt = iTimeUnits case TIMEUNIT_MINUTES: iSecondCnt = iTimeUnits * SECONDS_IN_MINUTE case TIMEUNIT_HOURS: iSecondCnt = iTimeUnits * SECONDS_IN_HOUR case TIMEUNIT_DAYS: iSecondCnt = iTimeUnits * SECONDS_IN_DAY case TIMEUNIT_WEEKS: iSecondCnt = iTimeUnits * SECONDS_IN_WEEK } iWeekCnt = iSecondCnt / SECONDS_IN_WEEK iSecondCnt -= (iWeekCnt * SECONDS_IN_WEEK) iDayCnt = iSecondCnt / SECONDS_IN_DAY iSecondCnt -= (iDayCnt * SECONDS_IN_DAY) iHourCnt = iSecondCnt / SECONDS_IN_HOUR iSecondCnt -= (iHourCnt * SECONDS_IN_HOUR) iMinuteCnt = iSecondCnt / SECONDS_IN_MINUTE iSecondCnt -= (iMinuteCnt * SECONDS_IN_MINUTE) // translate the unit counts into verbose text new iMaxElementIdx = -1 new acElement[5][33] if (iWeekCnt > 0) format(acElement[++iMaxElementIdx], 32, "%i %L", iWeekCnt, LANG_PLAYER, (iWeekCnt == 1) ? "TIME_ELEMENT_WEEK" : "TIME_ELEMENT_WEEKS") if (iDayCnt > 0) format(acElement[++iMaxElementIdx], 32, "%i %L", iDayCnt, LANG_PLAYER, (iDayCnt == 1) ? "TIME_ELEMENT_DAY" : "TIME_ELEMENT_DAYS") if (iHourCnt > 0) format(acElement[++iMaxElementIdx], 32, "%i %L", iHourCnt, LANG_PLAYER, (iHourCnt == 1) ? "TIME_ELEMENT_HOUR" : "TIME_ELEMENT_HOURS") if (iMinuteCnt > 0) format(acElement[++iMaxElementIdx], 32, "%i %L", iMinuteCnt, LANG_PLAYER, (iMinuteCnt == 1) ? "TIME_ELEMENT_MINUTE" : "TIME_ELEMENT_MINUTES") if (iSecondCnt > 0) format(acElement[++iMaxElementIdx], 32, "%i %L", iSecondCnt, LANG_PLAYER, (iSecondCnt == 1) ? "TIME_ELEMENT_SECOND" : "TIME_ELEMENT_SECONDS") switch(iMaxElementIdx) { case 0: format(cOutput, iOutputLen, "%s", acElement[0]) case 1: format(cOutput, iOutputLen, "%s %L %s", acElement[0], LANG_PLAYER, "TIME_ELEMENT_AND", acElement[1]) case 2: format(cOutput, iOutputLen, "%s, %s %L %s", acElement[0], acElement[1], LANG_PLAYER, "TIME_ELEMENT_AND", acElement[2]) case 3: format(cOutput, iOutputLen, "%s, %s, %s %L %s", acElement[0], acElement[1], acElement[2], LANG_PLAYER, "TIME_ELEMENT_AND", acElement[3]) case 4: format(cOutput, iOutputLen, "%s, %s, %s, %s %L %s", acElement[0], acElement[1], acElement[2], acElement[3], LANG_PLAYER, "TIME_ELEMENT_AND", acElement[4]) } } } Link to comment Share on other sites More sharing options...
GOMA smile Posted March 19, 2008 Report Share Posted March 19, 2008 Lieto amxbans V.5. taja var ta izdarit Link to comment Share on other sites More sharing options...
razery Posted March 20, 2008 Author Report Share Posted March 20, 2008 un tu gribi teikt, ka shajaa nevar? Link to comment Share on other sites More sharing options...
razery Posted March 21, 2008 Author Report Share Posted March 21, 2008 neviens nevar paliidzeet? ;( Link to comment Share on other sites More sharing options...
*jancis38* Posted March 21, 2008 Report Share Posted March 21, 2008 Nahuj tu tik garu kodu kopē? Nākamreiz kodu iekopē *.txt failā un *.txt failu pievieno pie attačmenta. Iespējams to var nomainīt @ amxbans.txt P.S. Priecīgas lieldienas visiem! Link to comment Share on other sites More sharing options...
hakeris132 Posted March 21, 2008 Report Share Posted March 21, 2008 Liec jaunako versiju tam visu war izdariit PS. sodien naw LielDienas,bet gan Liela Piektdiena, bet labi ka dzivo nakotnee. Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now