Здравствуйте, гость Вход | Регистрация
Наши новости:
|
| Дата поста: | В теме: | За сообщение: | Спасибо сказали: | ||
|---|---|---|---|---|---|
| 28.6.2010, 16:22 | Amxbans 6.0.2 by gm | Всем привет! Буквально на днях, нашел плагин, который банит игроков через его кс (что-то типа amx_bancs). У меня возникла идея попробовать "совместить" его с Amxbans 6.0.0 Тойсть... Что должно получиться: Когда админ банит игрока, идёт стандартная команда amxbans'a на бан, и сразу после этого идёт 2 команда "amx_qwer_ban <name or #userid> <minutes> [reason]" по тем же самым параметрам, типа: amx_banip Basya 5 test amx_qwer_ban Basya 5 test В итоге, бан выдан, как и в amxbans'e так и в amx_qwer_ban... И плеер забанен, и админу без гемора вбивать 2 команды, и никто не в курсе чем собственно был выдан бан, а если игрок не знает чем был выдан бан, соответственно и искать обход будет уже сложнее! Мои мысли: есть команда, допустим "amx_qwer_ban <name or #userid> <minutes> [reason]", строка бана практически идентична строке бана через amxbans А вот куда её впихивать и в каком виде? В ATAC ещё более менее всё ясно: atac_amxbans.sma /* ATAC AMXBans * * Copyright © 2006-2007, ATAC Team * * This file is provided as is (no warranties). * */ #include <amxmodx> #include <fakemeta> #include <atac> #define PLUGIN "ATAC AMXBans" #define VERSION "1.1" #define AUTHOR "ATAC Team" new gBanning[ 33 ] new gCVARTeamKills new gCVARBanTime public plugin_init() { register_plugin( PLUGIN, VERSION, AUTHOR ) new amxbans = get_cvar_pointer( "amxbans_version" ) // Check to see if the server has AMX Bans installed if ( !amxbans ) pause( "ade", PLUGIN ) else { atac_register_addon() gCVARTeamKills = get_cvar_pointer( "atac_team_kills" ) gCVARBanTime = get_cvar_pointer( "atac_ban_time" ) } } public client_putinserver( id ) { gBanning[ id ] = 0 } public atac_punished( killer, const name[], const authid[], bantype ) { if ( !bantype ) // 0 = Kick, DO NOT BAN! return PLUGIN_CONTINUE // Allow ATAC to carry on as normal if ( gBanning[ killer ] ) // Check to make sure we are not trying to ban the client already return PLUGIN_HANDLED // Supercede ATAC's banning system new tk = get_atac_kills( killer ) new maxtk = get_pcvar_num( gCVARTeamKills ) if ( tk >= maxtk ) // Let AMX Bans take over { gBanning[ killer ] = 1 switch( bantype ) { // IP Banning case 1: server_cmd( "amx_banip %i %s Max Team Kill Warning %i/%i", get_pcvar_num( gCVARBanTime ), authid, tk, maxtk ) 1 вариант, добавить после верхней строки//case 1: server_cmd( "amx_qwer_ban %i %s Max Team Kill Warning %i/%i", get_pcvar_num( gCVARBanTime ), authid, tk, maxtk ) 2 вариант заменить верхнюю строку//case 1: server_cmd( "amx_banip %i %s Max Team Kill Warning %i/%i", get_pcvar_num( gCVARBanTime ), authid, tk, maxtk, "amx_qwer_ban %i %s Max Team Kill Warning %i/%i", get_pcvar_num( gCVARBanTime ), authid, tk, maxtk ) // STEAMID Banning case 2: server_cmd( "amx_ban %i %s Max Team Kill Warning %i/%i", get_pcvar_num( gCVARBanTime ), authid, tk, maxtk ) // Invalid Banning Type default: server_print( "%s: Invalid Banning ID - Name: %s AuthID: %s", PLUGIN, name, ( authid[ 0 ] == 0 ) ? "NULL" : authid ) } return PLUGIN_HANDLED // Supercede ATAC's banning system } return PLUGIN_CONTINUE // Allow ATAC to carry on as normal } Тойсть, там есть с чем работать и есть варианты как можно добавть ещё и 2-й бан. А вот где это можно реализовать в amxbans'e, я так и не понял. Я подозреваю несколько скриптов: cmdBan.inl #if defined _cmdban_included #endinput #endif #define _cmdban_included #include <amxmodx> #include <sqlx> public cmdMenuBan(id) { if(!id) return PLUGIN_HANDLED if(g_being_banned[g_choicePlayerId[id]]) { //client_print(id,print_chat,"[AMXBans] Blocking doubleban from <%s>", g_choicePlayerName[id]) ColorChat(id, RED, "[AMXBans]^x01 Blocking doubleban from <%s>", g_choicePlayerName[id]) } //g_being_banned[g_choicePlayerId[id]]=true if(!get_ban_type(g_ban_type[id],charsmax(g_ban_type),g_choicePlayerAuthid[id],g_ choicePlayerIp[id])) { log_amx("[AMXBans ERROR cmdMenuBan] Steamid / IP Invalid! Bantype: <%s> | Authid: <%s> | IP: <%s>",\ g_ban_type[id], g_choicePlayerAuthid[id], g_choicePlayerIp[id]) g_being_banned[g_choicePlayerId[id]]=false return PLUGIN_HANDLED } if(get_pcvar_num(pcvar_debug) >= 2) { log_amx("[AMXBans cmdMenuBan %d] %d | %s | %s | %s | %s (%d min)",id,\ g_choicePlayerId[id], g_choicePlayerName[id], g_choicePlayerAuthid[id], g_choicePlayerIp[id], g_choiceReason[id], g_choiceTime[id]) } if (equal(g_ban_type[id], "S")) { formatex(g_SqlX_Cache, charsmax(g_SqlX_Cache),"SELECT player_id FROM %s WHERE player_id='%s' and expired=0", tbl_bans, g_choicePlayerAuthid[id]) if ( get_pcvar_num(pcvar_debug) >= 2 ) log_amx("[AMXBans cmdMenuBan] Banned a player by SteamID") } else { formatex(g_SqlX_Cache, charsmax(g_SqlX_Cache),"SELECT player_ip FROM %s WHERE player_ip='%s' AND player_id='%s' and expired=0", tbl_bans, g_choicePlayerIp[id], g_choicePlayerAuthid[id]) if ( get_pcvar_num(pcvar_debug) >= 2 ) log_amx("[AMXBans cmdMenuBan] Banned a player by IP/steamID") } new pquery[1024] prepare_prefix(g_SqlX_Cache,pquery,charsmax(pquery)) new data[3] data[0] = id data[1] = g_choicePlayerId[id] SQL_ThreadQuery(g_SqlX, "_cmdMenuBan", pquery, data, 3) return PLUGIN_HANDLED } public _cmdMenuBan(failstate, Handle:query, error[], errnum, data[], size) { new id = data[0] new pid = data[1] if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans cmdMenuBan function 2]Playerid: %d", pid) if (failstate) { new szQuery[256] SQL_GetQueryString(query,szQuery,255) MySqlX_ThreadError( szQuery, error, errnum, failstate, "cmdBan.inl::cmdMenuBan" ) return PLUGIN_HANDLED } if (SQL_NumResults(query)) { //client_print(id,print_console,"[AMXBANS] %L",id,"ALREADY_BANNED", g_choicePlayerAuthid[id], g_choicePlayerIp[id]) ColorChat(id, RED, "[AMXBans]^x01 %L",id,"ALREADY_BANNED", g_choicePlayerAuthid[id], g_choicePlayerIp[id]) g_being_banned[id] = false return PLUGIN_HANDLED } new admin_nick[64], admin_steamid[35], admin_ip[22] mysql_get_username_safe(id, admin_nick, charsmax(admin_nick)) get_user_ip(id, admin_ip, charsmax(admin_ip), 1) get_user_authid(id, admin_steamid, charsmax(admin_steamid)) new server_name[256] get_cvar_string("hostname", server_name, charsmax(server_name)) if ( get_pcvar_num(pcvar_add_mapname) == 1 ) { new mapname[32] get_mapname(mapname,31) format(server_name,charsmax(server_name),"%s (%s)",server_name,mapname) } new servername_safe[256] mysql_escape_string(server_name,servername_safe,charsmax(servername_safe)) new player_nick[64] mysql_escape_string(g_choicePlayerName[id],player_nick,charsmax(player_nick)) formatex(g_SqlX_Cache, charsmax(g_SqlX_Cache), "INSERT INTO `%s` (player_id,player_ip,player_nick,admin_ip,admin_id,admin_nick,ban_type,ban_reaso n,ban_created,ban_length,server_name,server_ip,expired) \ VALUES('%s','%s','%s','%s','%s','%s','%s','%s',UNIX_TIMESTAMP(NOW()),%d,'%s','%s:%s',0)", \ tbl_bans,g_choicePlayerAuthid[id],g_choicePlayerIp[id],player_nick,admin_ip,admi n_steamid,admin_nick,g_ban_type[id],g_choiceReason[id],g_choiceTime[id],serverna m e_safe,g_ip,g_port) new pquery[1024] prepare_prefix(g_SqlX_Cache,pquery,charsmax(pquery)) new data[4] data[0] = id data[1] = g_choicePlayerId[id] //Add by ~Val~ for trigger menu ban data[3] = 0 SQL_ThreadQuery(g_SqlX, "insert_bandetails", pquery, data, 4) return PLUGIN_HANDLED } /******************************************************************************** ***********************************/ /******************************************************************************** ***********************************/ public cmdBan(id, level, cid) { /* Checking if the admin has the right access */ if (!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED new bool:serverCmd = false // Determine if this was a server command or a command issued by a player in the game if ( id == 0 ) serverCmd = true; new text[128] read_args(text, 127) // get player ident and bantime depending on the ban cmd format (old or new) new ban_length[50] if(get_pcvar_num(pcvar_newbancmd)) parse(text, g_ident, 49, ban_length, 49) else parse(text, ban_length, 49, g_ident, 49) trim(g_ident) trim(ban_length) // Check so the ban command has the right format if( !is_str_num(ban_length) || read_argc() < 3 ) { if(get_pcvar_num(pcvar_newbancmd)) client_print(id,print_console,"[AMXBans] %L",LANG_PLAYER,"AMX_BAN_SYNTAX_NEW") else client_print(id,print_console,"[AMXBans] %L",LANG_PLAYER,"AMX_BAN_SYNTAX") return PLUGIN_HANDLED } //new length1 = strlen(ban_length) //new length2 = strlen(g_ident) //new length = length1 + length2 //length+=2 new length = strlen(ban_length) + strlen(g_ident) + 2 // get and format the ban reason new reason[128] read_args(reason,127) formatex(g_choiceReason[id], charsmax(g_choiceReason[]), "%s", reason[length]) trim(g_choiceReason[id]) remove_quotes(g_choiceReason[id]) //if the reason is empty use the default ban reason from cvar if(!strlen(g_choiceReason[id])) { get_pcvar_string(pcvar_default_banreason,g_choiceReason[id],charsmax(g_choiceRea son[])) } g_choiceTime[id] = abs(str_to_num(ban_length)) new cTimeLength[128] if (g_choiceTime[id] > 0) get_time_length(id, g_choiceTime[id], 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) & get_higher_ban_time_admin_flag()) && g_choiceTime[id] == 0) { client_print(id,print_console,"[AMXBans] %L",LANG_PLAYER,"NOT_BAN_PERMANENT") return PLUGIN_HANDLED } // Try to find the player that should be banned g_choicePlayerId[id] = locate_player(id, g_ident) // Player is a BOT or has immunity if (g_choicePlayerId[id] == -1) return PLUGIN_HANDLED if(g_being_banned[g_choicePlayerId[id]]) { if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans Blocking doubleban(g_being_banned)] Playerid: %d BanLenght: %s Reason: %s", g_choicePlayerId[id], g_choiceTime[id], g_choiceReason[id]) return PLUGIN_HANDLED } g_being_banned[g_choicePlayerId[id]] = true if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans cmdBan function 1]Playerid: %d", g_choicePlayerId[id]) if (g_choicePlayerId[id]) { get_user_authid(g_choicePlayerId[id], g_choicePlayerAuthid[id], 49) get_user_ip(g_choicePlayerId[id], g_choicePlayerIp[id], 29, 1) } else { g_being_banned[0]=false if (serverCmd) server_print("[AMXBans] The Player %s was not found",g_ident) else console_print(id, "[AMXBans] The Player %s was not found",g_ident) if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans] Player %s could not be found",g_ident) return PLUGIN_HANDLED } if(!get_ban_type(g_ban_type[id],charsmax(g_ban_type[]),g_choicePlayerAuthid[id], g_choicePlayerIp[id])) { log_amx("[AMXBans ERROR cmdBan] Steamid / IP Invalid! Bantype: <%s> | Authid: <%s> | IP: <%s>",g_ban_type[id],g_choicePlayerAuthid[id],g_choicePlayerIp[id]) g_being_banned[g_choicePlayerId[id]]=false return PLUGIN_HANDLED } if (equal(g_ban_type[id], "S")) { formatex(g_SqlX_Cache, charsmax(g_SqlX_Cache),"SELECT player_id FROM %s WHERE player_id='%s' AND expired=0", tbl_bans, g_choicePlayerAuthid[id]) if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans cmdBan] Banned a player by SteamID: %s",g_choicePlayerAuthid[id]) } else { formatex(g_SqlX_Cache, charsmax(g_SqlX_Cache),"SELECT player_ip FROM %s WHERE player_ip='%s' AND expired=0", tbl_bans, g_choicePlayerIp[id]) if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans cmdBan] Banned a player by IP/steamID: %s",g_choicePlayerIp[id]) } new pquery[1024] prepare_prefix(g_SqlX_Cache,pquery,charsmax(pquery)) new data[1] data[0] = id SQL_ThreadQuery(g_SqlX, "cmd_ban_", pquery, data, 1) return PLUGIN_HANDLED } public cmd_ban_(failstate, Handle:query, error[], errnum, data[], size) { new id = data[0] if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans cmd_ban_ function 2]Playerid: %d", g_choicePlayerId[id]) new bool:serverCmd = false /* Determine if this was a server command or a command issued by a player in the game */ if ( id == 0 ) serverCmd = true; if (failstate) { new szQuery[256] SQL_GetQueryString(query,szQuery,255) MySqlX_ThreadError( szQuery, error, errnum, failstate, "cmdBan.inl::cmdBan" ) } else { if (!SQL_NumResults(query)) { if (g_choicePlayerId[id]) { get_user_name(g_choicePlayerId[id], g_choicePlayerName[id], charsmax(g_choicePlayerName[])) } else /* The player was not found in server */ { // Must make that false to be able to ban another player not on the server // Players that aren't in the server always get id = 0 g_being_banned[0] = false if (serverCmd) server_print("[AMXBans] The Player %s was not found",g_ident) else console_print(id, "[AMXBans] The Player %s was not found",g_ident) if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans] Player %s could not be found",g_ident) return PLUGIN_HANDLED } new admin_nick[100], admin_steamid[50], admin_ip[20] mysql_get_username_safe(id, admin_nick, 99) get_user_ip(id, admin_ip, 19, 1) if (!serverCmd) { get_user_authid(id, admin_steamid, 49) if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans cmdBan] Adminsteamid: %s, Servercmd: %s", admin_steamid, (serverCmd)?"Yes":"No") } else { /* If the server does the ban you cant get any steam_ID or team */ admin_steamid = "" /* This is so you can have a shorter name for the servers hostname. Some servers hostname can be very long b/c of sponsors and that will make the ban list on the web bad */ new servernick[100] get_pcvar_string(pcvar_server_nick, servernick, 99) if (strlen(servernick)) copy(admin_nick,charsmax(admin_nick),servernick) } /* If HLGUARD ban, the admin nick will be set to [HLGUARD] */ if ( contain(g_choiceReason[id], "[HLGUARD]") != -1 ) copy(admin_nick,charsmax(admin_nick),"[HLGUARD]") /* If ATAC ban, the admin nick will be set to [ATAC] */ if ( contain(g_choiceReason[id], "Max Team Kill Violation") != -1 ) copy(admin_nick,charsmax(admin_nick),"[ATAC]") if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans cmdBan] Admin nick: %s, Admin userid: %d", admin_nick, get_user_userid(id)) new server_name[200] mysql_get_servername_safe(server_name, charsmax(server_name)) if ( get_pcvar_num(pcvar_add_mapname) ) { new mapname[32]//, pre[4],post[4] get_mapname(mapname,31) format(server_name,charsmax(server_name),"%s (%s)",server_name,mapname) } new player_nick[64] mysql_escape_string(g_choicePlayerName[id],player_nick,charsmax(player_nick)) new admin_nick_safe[200] mysql_escape_string(admin_nick,admin_nick_safe,charsmax(admin_nick_safe)) format(g_SqlX_Cache, charsmax(g_SqlX_Cache), "INSERT INTO `%s` \ (player_id,player_ip,player_nick,admin_ip,admin_id,admin_nick,ban_type,ban_reaso n,ban_created,ban_length,server_name,server_ip,expired) \ VALUES('%s','%s','%s','%s','%s','%s','%s','%s',UNIX_TIMESTAMP(NOW()),%d,'%s','%s:%s',0)", \ tbl_bans, g_choicePlayerAuthid[id], g_choicePlayerIp[id], player_nick, admin_ip, admin_steamid, admin_nick_safe, g_ban_type[id], \ g_choiceReason[id], g_choiceTime[id], server_name, g_ip, g_port) new pquery[1024] prepare_prefix(g_SqlX_Cache,pquery,charsmax(pquery)) new data[4] data[0] = id //Add by ~Val~ for trigger on cmd ban data[3] = 1 SQL_ThreadQuery(g_SqlX, "insert_bandetails", pquery, data, 4) } else { if ( serverCmd ) log_message("[AMXBans] %L",LANG_SERVER,"ALREADY_BANNED", g_choicePlayerAuthid[id], g_choicePlayerIp[id]) else client_print(id,print_console,"[AMXBans] %L",LANG_PLAYER,"ALREADY_BANNED", g_choicePlayerAuthid[id], g_choicePlayerIp[id]) // Must make that false to be able to ban another player not on the server // Players that aren't in the server always get id = 0 g_being_banned[g_choicePlayerId[id]] = false } } return PLUGIN_HANDLED } /******************************************************************************** ***********************************/ /******************************************************************************** ***********************************/ /******************************************************************************** ***********************************/ public insert_bandetails(failstate, Handle:query, error[], errnum, data[], size) { new id = data[0] new cmd = data[3] if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans cmdBan function 5]Playerid: %d",g_choicePlayerId[id]) if (failstate) { new szQuery[256] if(cmd) MySqlX_ThreadError( szQuery, error, errnum, failstate, "cmdBan.inl::cmd_ban_") else MySqlX_ThreadError( szQuery, error, errnum, failstate, "cmdBan.inl::_cmdMenuBan" ) return PLUGIN_HANDLED } new bid = SQL_GetInsertId(query) select_amxbans_motd(id,g_choicePlayerId[id],bid) return PLUGIN_HANDLED } /******************************************************************************** ***********************************/ public select_amxbans_motd(id,player,bid) { if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans cmdBan function 5]Bid: %d", bid) //get ban details from db format(g_SqlX_Cache, charsmax(g_SqlX_Cache), "SELECT si.amxban_motd,ba.player_nick,ba.player_id,ba.player_ip, \ ba.admin_nick,ba.admin_id,ba.ban_type,ba.ban_reason,ba.ban_length FROM `%s` as si,`%s` as ba \ WHERE ba.bid=%d AND si.address = '%s:%s'", tbl_serverinfo, tbl_bans,bid,g_ip, g_port) new pquery[1024] prepare_prefix(g_SqlX_Cache,pquery,charsmax(pquery)) new data[4] data[0] = id data[1] = bid data[2] = player SQL_ThreadQuery(g_SqlX, "_select_amxbans_motd", pquery, data, 4) return PLUGIN_HANDLED } public _select_amxbans_motd(failstate, Handle:query, error[], errnum, data[], size) { new id = data[0] new bid = data[1] new player = data[2] //new iBanLength = g_choiceTime[id] if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans cmdBan function 6]Playerid: %d, Bid: %d", player, bid) new bool:serverCmd = false /* Determine if this was a server command or a command issued by a player in the game */ if ( id == 0 ) serverCmd = true; if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, "cmdBan.inl::select_amxbans_motd" ) return PLUGIN_HANDLED } new amxban_motd_url[256] new admin_steamid[35], admin_nick[100],pl_steamid[35],pl_nick[100],pl_ip[22] new ban_type[32],ban_reason[128],iBanLength if (!SQL_NumResults(query)) { amxban_motd_url[0]='^0' log_amx("[AMXBans cmdBan function 6.1] select_motd without result: %d, Bid: %d", player, bid) if(player && is_user_connected(player)) { new pid=player+200 set_task(kick_delay, "delayed_kick", pid) } return PLUGIN_HANDLED //copy(amxban_motd_url,256, "0") } else { SQL_ReadResult(query, 0, amxban_motd_url, 256) SQL_ReadResult(query, 1, pl_nick, 99) SQL_ReadResult(query, 2, pl_steamid, 34) SQL_ReadResult(query, 3, pl_ip, 21) SQL_ReadResult(query, 4, admin_nick, 99) SQL_ReadResult(query, 5, admin_steamid, 34) SQL_ReadResult(query, 6, ban_type, 31) SQL_ReadResult(query, 7, ban_reason, 127) iBanLength=SQL_ReadResult(query,8) } new admin_team[11] get_user_team(id, admin_team, 10) //get_user_authid(id, admin_steamid, charsmax(admin_steamid)) //mysql_get_username_safe(id,admin_nick,charsmax(admin_nick)) new cTimeLengthPlayer[128] new cTimeLengthServer[128] if (iBanLength > 0) { get_time_length(player, iBanLength, timeunit_minutes, cTimeLengthPlayer, 127) get_time_length(0, iBanLength, timeunit_minutes, cTimeLengthServer, 127) } else { //Permanent Ban format(cTimeLengthPlayer, 127, "%L", player, "TIME_ELEMENT_PERMANENTLY") format(cTimeLengthServer, 127, "%L", LANG_SERVER, "TIME_ELEMENT_PERMANENTLY") } new show_activity = get_cvar_num("amx_show_activity") if( (get_user_flags(id)&get_admin_mole_access_flag() || id == 0) && (get_pcvar_num(pcvar_show_name_evenif_mole) == 0) ) show_activity = 1 if (player) { new complain_url[256] get_pcvar_string(pcvar_complainurl ,complain_url, 255) client_print(player,print_console,"[AMXBans] ===============================================") new ban_motd[1400] if (show_activity == 2) { client_print(player,print_console,"[AMXBans] %L",player,"MSG_6", admin_nick) client_print(player,print_console,"[AMXBans] %L",player,"MSG_7", complain_url) format(ban_motd, charsmax(ban_motd), "%L", player, "MSG_MOTD_2", ban_reason, cTimeLengthPlayer, pl_steamid, admin_nick) } else { client_print(player,print_console,"[AMXBans] %L",player,"MSG_1") client_print(player,print_console,"[AMXBans] %L",player,"MSG_7", complain_url) format(ban_motd, charsmax(ban_motd), "%L", player, "MSG_MOTD_1", ban_reason, cTimeLengthPlayer, pl_steamid) } client_print(player,print_console,"[AMXBans] %L",player,"MSG_2", ban_reason) client_print(player,print_console,"[AMXBans] %L",player,"MSG_3", cTimeLengthPlayer) client_print(player,print_console,"[AMXBans] %L",player,"MSG_4", pl_steamid) client_print(player,print_console,"[AMXBans] %L",player,"MSG_5", pl_ip) client_print(player,print_console,"[AMXBans] ===============================================") new msg[1400] if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans cmdBan function 6.2]Bid: %d URL= %s Kickdelay:%f", bid, amxban_motd_url, kick_delay) if(contain(amxban_motd_url,"sid=%s&adm=%d&lang=%s") != -1) { new bidstr[10],lang[5] formatex(bidstr,9,"B%d",bid) get_user_info(player,"lang",lang,charsmax(lang)) if(equal(lang,"")) get_cvar_string("amx_language",lang,charsmax(lang)) format(msg, charsmax(msg), amxban_motd_url,bidstr,(show_activity==2)?1:0,lang) if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans cmdBan function 6.3]Motd: %s",msg) } else formatex(msg, charsmax(msg), ban_motd) if(is_user_connected(player)) { new ret ExecuteForward(MFHandle[Ban_MotdOpen],ret,player) new motdTitle[64] formatex(motdTitle,charsmax(motdTitle),"Banned by Amxbans %s",VERSION) //add(motdTitle,255,VERSION,0) show_motd(player, msg, motdTitle) new pid=player+200 set_task(kick_delay, "delayed_kick", pid) } } else { /* The player was not found in server */ if (serverCmd) server_print("[AMXBans] The Player %s was not found",g_ident) else console_print(id, "[AMXBans] The Player %s was not found",g_ident) if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans] Player %s could not be found",g_ident) return PLUGIN_HANDLED } if (equal(ban_type, "S")) { if ( serverCmd ) log_message("[AMXBans] %L",LANG_SERVER,"STEAMID_BANNED_SUCCESS_IP_LOGGED",pl_steamid) else client_print(id,print_console,"[AMXBans] %L",id,"STEAMID_BANNED_SUCCESS_IP_LOGGED",pl_steamid) } else { if ( serverCmd ) log_message("[AMXBans] %L",LANG_SERVER,"STEAMID_IP_BANNED_SUCCESS") else client_print(id,print_console,"[AMXBans] %L",id,"STEAMID_IP_BANNED_SUCCESS") } if (serverCmd) { /* If the server does the ban you cant get any steam_ID or team */ admin_steamid[0] = '^0' admin_team[0] = '^0' } // Logs all bans by admins/server to amxx logs if (g_choiceTime[id] > 0) { log_amx("%L", LANG_SERVER, "BAN_LOG",admin_nick, get_user_userid(id), admin_steamid, admin_team, \ pl_nick, pl_steamid, cTimeLengthServer, iBanLength, ban_reason) if ( get_pcvar_num(pcvar_show_in_hlsw) ) { // 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, get_user_userid(id), admin_steamid, admin_team, \ LANG_SERVER, "BAN_CHATLOG", pl_nick, pl_steamid, cTimeLengthServer, iBanLength, ban_reason) } } else { log_amx("%L", LANG_SERVER, "BAN_LOG_PERM", admin_nick, get_user_userid(id), admin_steamid, admin_team, pl_nick, pl_steamid, ban_reason) if ( get_pcvar_num(pcvar_show_in_hlsw) ) { // 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, get_user_userid(id), admin_steamid, admin_team, \ LANG_SERVER, "BAN_CHATLOG_PERM", pl_nick, pl_steamid, ban_reason) } } new message[191] if (show_activity == 1) { new playerCount, idx, players[32] get_players(players, playerCount) for (idx=0; idx<playerCount; idx++) { if (is_user_hltv(players[idx]) || is_user_bot(players[idx])) continue // Dont count HLTV or bots as players get_time_length(players[idx], iBanLength, timeunit_minutes, cTimeLengthPlayer, 127) if (g_choiceTime[id] > 0) format(message,190,"%L", players[idx],"PUBLIC_BAN_ANNOUNCE", pl_nick, cTimeLengthPlayer, ban_reason) else format(message,190,"%L", players[idx],"PUBLIC_BAN_ANNOUNCE_PERM", pl_nick, ban_reason) if ( get_pcvar_num(pcvar_show_hud_messages) == 1 ) { set_hudmessage(0, 255, 0, 0.05, 0.30, 0, 6.0, 10.0 , 0.5, 0.15, -1) ShowSyncHudMsg(players[idx], g_MyMsgSync, "%s", message) } //client_print(players[idx],print_chat, "%s", message) ColorChat(players[idx], RED, "[AMXBans]^x01 %s", message) client_print(players[idx],print_console, "%s", message) } } if (show_activity == 2) { new playerCount, idx, players[32] get_players(players, playerCount) for (idx=0; idx<playerCount; idx++) { if (is_user_hltv(players[idx]) || is_user_bot(players[idx])) continue // Dont count HLTV or bots as players get_time_length(players[idx], iBanLength, timeunit_minutes, cTimeLengthPlayer, 127) if (g_choiceTime[id] > 0) format(message,190, "%L", players[idx], "PUBLIC_BAN_ANNOUNCE_2", pl_nick, cTimeLengthPlayer, ban_reason, admin_nick) else format(message,190, "%L", players[idx], "PUBLIC_BAN_ANNOUNCE_2_PERM", pl_nick, ban_reason, admin_nick) if ( get_pcvar_num(pcvar_show_hud_messages) == 1 ) { set_hudmessage(0, 255, 0, 0.05, 0.30, 0, 6.0, 10.0 , 0.5, 0.15, -1) ShowSyncHudMsg(players[idx], g_MyMsgSync, "%s", message) } //client_print(players[idx],print_chat, "%s", message) ColorChat(players[idx], RED, "[AMXBans]^x01 %s", message) client_print(players[idx],print_console, "%s", message) } } return PLUGIN_HANDLED } /* public insert_ban_cmd(failstate, Handle:query, error[], errnum, data[], size) { if (failstate) { new szQuery[256] MySqlX_ThreadError( szQuery, error, errnum, failstate, 12 ) } return PLUGIN_HANDLED } */ public locate_player(id, identifier[]) { g_ban_type[id] = "S" // Check based on steam ID new player = find_player("c", identifier) // Check based on a partial non-case sensitive name if (!player) { player = find_player("bl", identifier) } // Check based on IP address if (!player) { player = find_player("d", identifier) if ( player ) g_ban_type[id] = "SI" } // Check based on user ID if ( !player && identifier[0]=='#' && identifier[1] ) { player = find_player("k",str_to_num(identifier[1])) } if ( player ) { /* Check for immunity */ if (get_user_flags(player) & ADMIN_IMMUNITY) { new name[32] get_user_name(player, name, 31) if( id == 0 ) server_print("[AMXBans] Client ^"%s^" has immunity", name) else console_print(id,"[AMXBans] Client ^"%s^" has immunity", name) return -1 } /* Check for a bot */ else if (is_user_bot(player)) { new name[32] get_user_name(player, name, 31) if( id == 0 ) server_print("[AMXBans] Client ^"%s^" is a bot", name) else console_print(id,"[AMXBans] Client ^"%s^" is a bot", name) return -1 } } else { // add function for disconnected players, maybe later ^^ return -1 } return player } amxbans_main.sma new AUTHOR[] = "AMXBans & ~Val~" new PLUGIN_NAME[] = "AMXBans Main" new VERSION[] = "6.0.2" // This is used in the plugins name new amxbans_version[] = "6.0.0" // This is for the DB #include <amxmodx> #include <amxmisc> #include <sqlx> #include <time> // Amxbans Core natives #include "include/amxbans_core.inc" // Amxbans .inl files #include "amxbans/global_vars.inl" // edited (endless) #include "amxbans/color_chat.inl" // not need edit #include "amxbans/init_functions.inl" // edited #include "amxbans/check_player.inl" // edited #include "amxbans/check_flag.inl" // not edit #include "amxbans/menu_stocks.inl" // edited (endless) #include "amxbans/menu_ban.inl" // edited #include "amxbans/menu_disconnected.inl" // edited #include "amxbans/menu_history.inl" // edited #include "amxbans/menu_flag.inl" // not edit #include "amxbans/cmdBan.inl" // edited #include "amxbans/web_handshake.inl" // edited // 16k * 4 = 64k stack size #pragma dynamic 16384 // Give the plugin some extra memory to use public plugin_init() { register_plugin(PLUGIN_NAME, VERSION, AUTHOR) register_cvar("amxbans_version", VERSION, FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY) register_dictionary("amxbans.txt") register_dictionary("common.txt") register_dictionary("time.txt") register_clcmd("amx_banmenu", "cmdBanMenu", ADMIN_BAN, "- displays ban menu") register_clcmd("amxbans_custombanreason", "setCustomBanReason", ADMIN_BAN, "- configures custom ban message") register_clcmd("amx_banhistorymenu", "cmdBanhistoryMenu", ADMIN_BAN, "- displays banhistorymenu") register_clcmd("amx_bandisconnectedmenu", "cmdBanDisconnectedMenu", ADMIN_BAN, "- displays bandisconnectedmenu") register_clcmd("amx_flaggingmenu","cmdFlaggingMenu",ADMIN_BAN,"- displays flagging menu") register_srvcmd("amx_sethighbantimes", "setHighBantimes") register_srvcmd("amx_setlowbantimes", "setLowBantimes") register_srvcmd("amx_setflagtimes","setFlagTimes") register_concmd("amx_reloadreasons", "cmdFetchReasons", ADMIN_CFG) pcvar_serverip = register_cvar("amxbans_server_address","") pcvar_server_nick = register_cvar("amxbans_servernick", "") pcvar_complainurl = register_cvar("amxbans_complain_url", "www.yoursite.com") // Dont use http:// then the url will not show pcvar_debug = register_cvar("amxbans_debug", "0") // Set this to 1 to enable debug pcvar_newbancmd = register_cvar("amxbans_use_newbancmd","1") pcvar_add_mapname = register_cvar("amxbans_add_mapname_in_servername", "0") pcvar_flagged_all = register_cvar("amxbans_flagged_all_server","1") pcvar_show_in_hlsw = register_cvar("amxbans_show_in_hlsw", "1") pcvar_show_hud_messages = register_cvar("amxbans_show_hud_messages", "1") pcvar_higher_ban_time_admin = register_cvar("amxbans_higher_ban_time_admin", "n") pcvar_admin_mole_access = register_cvar("amxbans_admin_mole_access", "r") pcvar_show_name_evenif_mole = register_cvar("amxbans_show_name_evenif_mole", "1") pcvar_custom_statictime = register_cvar("amxbans_custom_statictime","1440") pcvar_show_prebanned = register_cvar("amxbans_show_prebanned","1") pcvar_show_prebanned_num = register_cvar("amxbans_show_prebanned_num","2") pcvar_default_banreason = register_cvar("amxbans_default_ban_reason","unknown") register_concmd("amx_ban", "cmdBan", ADMIN_BAN, "<steamID or nickname or #authid or IP> <time in mins> <reason>") register_srvcmd("amx_ban", "cmdBan", -1, "<steamID or nickname or #authid or IP> <time in mins> <reason>") register_concmd("amx_banip", "cmdBan", ADMIN_BAN, "<steamID or nickname or #authid or IP> <time in mins> <reason>") register_srvcmd("amx_banip", "cmdBan", -1, "<steamID or nickname or #authid or IP> <time in mins> <reason>") register_srvcmd("amx_list", "cmdLst", ADMIN_RCON, "sends playerinfos to web") g_coloredMenus = colored_menus() g_MyMsgSync = CreateHudSyncObj() g_banReasons = ArrayCreate(128,7) g_banReasons_Bantime = ArrayCreate(1,7) g_disconPLname = ArrayCreate(32) g_disconPLauthid = ArrayCreate(35) g_disconPLip = ArrayCreate(22) iMaxPlrs = get_maxplayers() new configsDir[64] get_configsdir(configsDir, 63) server_cmd("exec %s/sql.cfg", configsDir) server_cmd("exec %s/amxbans.cfg", configsDir) color_chat_init() } create_forwards() { MFHandle[Ban_MotdOpen]=CreateMultiForward("amxbans_ban_motdopen",ET_IGNORE,FP_CELL) MFHandle[Player_Flagged]=CreateMultiForward("amxbans_player_flagged",ET_IGNORE,FP_CELL,FP_CELL,FP_STRING) MFHandle[Player_UnFlagged]=CreateMultiForward("amxbans_player_unflagged",ET_IGNORE,FP_CELL) } public addMenus() { new szKey[64] format(szKey,charsmax(szKey),"%L",LANG_SERVER,"ADMMENU_FLAGGING") AddMenuItem(szKey,"amx_flaggingmenu",ADMIN_BAN,PLUGIN_NAME) format(szKey,charsmax(szKey),"%L",LANG_SERVER,"ADMMENU_DISCONNECTED") AddMenuItem(szKey,"amx_bandisconnectedmenu",ADMIN_BAN,PLUGIN_NAME) format(szKey,charsmax(szKey),"%L",LANG_SERVER,"ADMMENU_HISTORY") AddMenuItem(szKey,"amx_banhistorymenu",ADMIN_BAN,PLUGIN_NAME) } //forward from amxbans_core public amxbans_sql_initialized(Handle:sqlTuple,dbPrefix[]) { copy(g_dbPrefix,charsmax(g_dbPrefix),dbPrefix) //db was already initialized, second init can be caused by a second forward from main plugin //this should never happen!! if(g_SqlX != Empty_Handle) { log_amx("[AMXBans Error] DB Info Tuple from amxbans_core initialized twice!!") return PLUGIN_HANDLED } g_SqlX=sqlTuple if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBans] Received DB Info Tuple from amxbans_core: %d | %s", sqlTuple,g_dbPrefix) if(g_SqlX==Empty_Handle) { log_amx("[AMXBans Error] DB Info Tuple from amxbans_main is empty! Trying to get a valid one") new host[64], user[64], pass[64], db[64] get_cvar_string("amx_sql_host", host, 63) get_cvar_string("amx_sql_user", user, 63) get_cvar_string("amx_sql_pass", pass, 63) get_cvar_string("amx_sql_db", db, 63) g_SqlX = SQL_MakeDbTuple(host, user, pass, db) get_cvar_string("amx_sql_prefix",g_dbPrefix,charsmax(g_dbPrefix)) } create_forwards() set_task(0.1, "banmod_online") set_task(0.2, "fetchReasons") set_task(2.0, "addMenus") return PLUGIN_HANDLED } /* public plugin_cfg() { //set_task(0.1, "sql_init") } public sql_init() { new host[64], user[64], pass[64], db[64] get_cvar_string("amx_sql_host", host, 63) get_cvar_string("amx_sql_user", user, 63) get_cvar_string("amx_sql_pass", pass, 63) get_cvar_string("amx_sql_db", db, 63) get_cvar_string("amx_sql_prefix",g_dbPrefix,charsmax(g_dbPrefix)) //amxbans_get_db_prefix(g_dbPrefix,charsmax(g_dbPrefix)) g_SqlX = SQL_MakeDbTuple(host, user, pass, db) create_forwards() set_task(0.1, "banmod_online") set_task(0.2, "fetchReasons") set_task(2.0, "addMenus") } */ ////////////////////////////////////////////////////////////////// public get_higher_ban_time_admin_flag() { new flags[24] get_pcvar_string(pcvar_higher_ban_time_admin, flags, 23) return(read_flags(flags)) } public get_admin_mole_access_flag() { new flags[24] get_pcvar_string(pcvar_admin_mole_access, flags, 23) return(read_flags(flags)) } public delayed_kick(player_id) { player_id-=200 new userid = get_user_userid(player_id) new kick_message[128] format(kick_message,127,"%L", player_id,"KICK_MESSAGE") if ( get_pcvar_num(pcvar_debug) >= 1 ) log_amx("[AMXBANS DEBUG] Delayed Kick ID: <%d>", player_id) server_cmd("kick #%d %s",userid, kick_message) g_kicked_by_amxbans[player_id]=true g_being_banned[player_id] = false return PLUGIN_CONTINUE } /********* Error handler ***************/ MySqlX_ThreadError(szQuery[], error[], errnum, failstate, place[]) { if (failstate == TQUERY_CONNECT_FAILED) log_amx("%L", LANG_SERVER, "TCONNECTION_FAILED") else if (failstate == TQUERY_QUERY_FAILED) log_amx("%L", LANG_SERVER, "TQUERY_FAILED") log_amx("%L", LANG_SERVER, "TQUERY_ERROR", place) log_amx("%L", LANG_SERVER, "TQUERY_MSG", error, errnum) log_amx("%L", LANG_SERVER, "TQUERY_STATEMENT", szQuery) } /********* client functions ************/ public client_authorized(id) { //fix for the invalid tuple error at mapchange, only a fast fix now if(g_SqlX==Empty_Handle) { set_task(2.0,"client_authorized",id) return PLUGIN_HANDLED } //check if an activ ban exists check_player(id) return PLUGIN_CONTINUE } public client_putinserver(id) { //fix for the invalid tuple error at mapchange, only a fast fix now if(g_SqlX==Empty_Handle) { set_task(5.0,"client_putinserver",id) return PLUGIN_HANDLED } //check if the player was banned before prebanned_check(id) //remove the player from the disconnect player list because he is already connected ;-) disconnect_remove_player(id) return PLUGIN_CONTINUE } public client_disconnect(id) { g_being_banned[id]=false if(!g_kicked_by_amxbans[id]) { //only add players to disconnect list if not kicked by amxbans disconnected_add_player(id) } else if(g_being_flagged[id]) { // if kicked by amxbans maybe remove the flagged, not added yet /*****///remove_flagged_by_steam(0,id,0) } //reset some vars g_kicked_by_amxbans[id]=false g_being_flagged[id]=false } /********* timecmd functions ************/ public setHighBantimes() { new arg[32] new argc = read_argc() - 1 g_highbantimesnum = argc if(argc < 1 || argc > 14) { log_amx("[AMXBANS] You have more than 14 or less than 1 bantimes set in amx_sethighbantimes") log_amx("[AMXBANS] Loading default bantimes") loadDefaultBantimes(1) return PLUGIN_HANDLED } new i = 0 new num[32], flag[32] while (i < argc) { read_argv(i + 1, arg, 31) parse(arg, num, 31, flag, 31) if(equali(flag, "m")) g_HighBanMenuValues[i] = str_to_num(num) else if(equali(flag, "h")) g_HighBanMenuValues[i] = (str_to_num(num) * 60) else if(equali(flag, "d")) g_HighBanMenuValues[i] = (str_to_num(num) * 1440) else if(equali(flag, "w")) g_HighBanMenuValues[i] = (str_to_num(num) * 10080) i++ } return PLUGIN_HANDLED } public setLowBantimes() { new arg[32] new argc = read_argc() - 1 g_lowbantimesnum = argc if(argc < 1 || argc > 14) { log_amx("[AMXBANS] You have more than 14 or less than 1 bantimes set in amx_setlowbantimes") log_amx("[AMXBANS] Loading default bantimes") loadDefaultBantimes(2) return PLUGIN_HANDLED } new i = 0 new num[32], flag[32] while (i < argc) { read_argv(i + 1, arg, 31) parse(arg, num, 31, flag, 31) if(equali(flag, "m")) g_LowBanMenuValues[i] = str_to_num(num) else if(equali(flag, "h")) g_LowBanMenuValues[i] = (str_to_num(num) * 60) else if(equali(flag, "d")) g_LowBanMenuValues[i] = (str_to_num(num) * 1440) else if(equali(flag, "w")) g_LowBanMenuValues[i] = (str_to_num(num) * 10080) i++ } return PLUGIN_HANDLED } public setFlagTimes() { new arg[32] new argc = read_argc() - 1 g_flagtimesnum = argc if(argc < 1 || argc > 14) { log_amx("[AMXBANS] You have more than 14 or less than 1 flagtimes set in amx_setflagtimes") log_amx("[AMXBANS] Loading default flagtimes") loadDefaultBantimes(3) return PLUGIN_HANDLED } new i = 0 new num[32], flag[32] while (i < argc) { read_argv(i + 1, arg, 31) parse(arg, num, 31, flag, 31) if(equali(flag, "m")) g_FlagMenuValues[i] = str_to_num(num) else if(equali(flag, "h")) g_FlagMenuValues[i] = (str_to_num(num) * 60) else if(equali(flag, "d")) g_FlagMenuValues[i] = (str_to_num(num) * 1440) else if(equali(flag, "w")) g_FlagMenuValues[i] = (str_to_num(num) * 10080) i++ } return PLUGIN_HANDLED } loadDefaultBantimes(num) { if(num == 1 || num == 0) server_cmd("amx_sethighbantimes 5 60 240 600 6000 0") if(num == 2 || num == 0) server_cmd("amx_setlowbantimes 5 30 60 480 600 1440") if(num == 3 || num == 0) server_cmd("amx_setflagtimes 60 240 600 1440 10080 40320 90720 0") } /********* mysql escape functions ************/ mysql_escape_string(const source[],dest[],len) { SQL_QuoteString(Empty_Handle,dest,len,source) } mysql_get_username_safe(id,dest[],len) { new name[128] get_user_name(id,name,127) SQL_QuoteString(Empty_Handle,dest,len,name) } mysql_get_servername_safe(dest[],len) { new server_name[256] get_cvar_string("hostname", server_name, charsmax(server_name)) SQL_QuoteString(Empty_Handle,dest,len,server_name) } Подозреваю что этот исходжник оперирует параметрами скриптов .inl и на прямую к выдаче бана он не относиться menu_ban.inl #if defined _menu_ban_included #endinput #endif #define _menu_ban_included #include <amxmodx> #include <amxmisc> public cmdBanMenu(id,level,cid) { if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED cmdBanMenu2(id) return PLUGIN_HANDLED } public cmdBanMenu2(id) { new menu = menu_create("menu_player","actionBanMenu") MenuSetProps(id,menu,"BAN_MENU") new callback=menu_makecallback("callback_MenuGetPlayers") MenuGetPlayers(menu,callback) menu_display(id,menu,0) return PLUGIN_HANDLED } public actionBanMenu(id,menu,item) { if(item < 0) { menu_destroy(menu) return PLUGIN_HANDLED } new acc,szInfo[3],szText[128],callb menu_item_getinfo(menu,item,acc,szInfo,charsmax(szInfo),szText,charsmax(szText), callb) new pid=str_to_num(szInfo) if(!is_user_connected(pid)) { //client_print(id,print_chat,"%L",id,"PLAYER_LEAVED",g_PlayerName[pid]) ColorChat(id, RED, "[AMXBans]^x01 %L",id,"PLAYER_LEAVED",g_PlayerName[pid]) client_cmd(id,"amx_bandisconnectedmenu") return PLUGIN_HANDLED } copy(g_choicePlayerName[id],charsmax(g_choicePlayerName[]),g_PlayerName[pid]) get_user_authid(pid,g_choicePlayerAuthid[id],charsmax(g_choicePlayerAuthid[])) get_user_ip(pid,g_choicePlayerIp[id],charsmax(g_choicePlayerIp[]),1) g_choicePlayerId[id]=pid if(get_pcvar_num(pcvar_debug) >= 2) log_amx("[AMXBans PlayerMenu %d] %d choice: %d | %s | %s | %d",menu,id,g_choicePlayerName[id],g_choicePlayerAuthid[id],g_choicePlayerIp[i d],g_choicePlayerId[id]) //see if the admin can choose the bantime if(amxbans_get_static_bantime(id) && !bLoadStatReason ) { set_task(0.2,"cmdReasonMenu",id) } else { set_task(0.2,"cmdBantimeMenu",id) } menu_destroy(menu) return PLUGIN_HANDLED } public cmdBantimeMenu(id) { new menu = menu_create("menu_bantime","actionBantimeMenu") MenuSetProps(id,menu,"BANTIME_MENU") MenuGetBantime(id,menu) menu_display(id,menu,0) return PLUGIN_HANDLED } public actionBantimeMenu(id,menu,item) { if(item < 0) { menu_destroy(menu) return PLUGIN_HANDLED } new acc,szInfo[11],szText[128],callb menu_item_getinfo(menu,item,acc,szInfo,10,szText,127,callb) g_choiceTime[id]=str_to_num(szInfo) if(get_pcvar_num(pcvar_debug) >= 2) log_amx("[AMXBans BantimeMenu %d] %d choice: %d min",menu,id,g_choiceTime[id]) set_task(0.2,"cmdReasonMenu",id) menu_destroy(menu) return PLUGIN_HANDLED } public cmdReasonMenu(id) { new menu = menu_create("menu_banreason","actionReasonMenu") MenuSetProps(id,menu,"REASON_MENU") MenuGetReason(id,menu,amxbans_get_static_bantime(id)) menu_display(id,menu,0) return PLUGIN_HANDLED } public actionReasonMenu(id,menu,item) { if(item < 0) { menu_destroy(menu) return PLUGIN_HANDLED } new acc,szInfo[3],szText[128],callb menu_item_getinfo(menu,item,acc,szInfo,charsmax(szInfo),szText,charsmax(szText), callb) new aid=str_to_num(szInfo) if(aid == 99) { if(amxbans_get_static_bantime(id)) g_choiceTime[id]=get_pcvar_num(pcvar_custom_statictime) set_custom_reason[id]=true client_cmd(id,"messagemode amxbans_custombanreason") menu_destroy(menu) return PLUGIN_HANDLED } else { ArrayGetString(g_banReasons,aid,g_choiceReason[id],charsmax(g_choiceReason[])) if(amxbans_get_static_bantime(id)) g_choiceTime[id]=ArrayGetCell(g_banReasons_Bantime,aid) } if(get_pcvar_num(pcvar_debug) >= 2) log_amx("[AMXBans ReasonMenu %d] %d choice: %s (%d min)",menu,id,g_choiceReason[id],g_choiceTime[id]) if(g_choicePlayerId[id] == -1) //disconnected ban cmdMenuBanDisc(id) else cmdMenuBan(id) menu_destroy(menu) return PLUGIN_HANDLED } Подозреваю, что этот скрипт относиться только к самому меню, но не к выдачи бана Прошу помощи и содействия :) Прикрепил к теме все скрипты |
syslik | ||
| 31.10.2009, 5:21 | Csdm Random Spawn Creator | CSDM Random Spawn Creator Info: Этот плагин позволяет разметить spawn точки на картах для мода DM (Dead Match) Commands:
Примечание:
Install Всё как всегда :)
Информация и плагин взяты с alliedmods.net (с) P.S.: Благодарю WhiteBear за информацию о существовании данного плагина, без него я бы ещё долго мучился с разметкой :) спс ;) |
complrg | ||