Код
#include <amxmodx>
#pragma tabsize 0
#define BAN_FILE "addons/amxmodx/configs/ban_list.ini"
new Array:Name_ban; // Ник
new Array:STEAM_ID_ban; // STEAM_ID
new Array:IP_ban; // IP
new Array:Reason; // Причина
new Count = 0
new reason_ban[33];
new const REASON[][] = {
"ВХ",
"Speed Hack",
"Идиот",
"Аим",
"Выйти из меню"
}
public plugin_init()
{
register_plugin("New ban system", "1.0", "daywer")
register_clcmd("ban_me","banan")
register_clcmd("ban_menu","show_ban_menu")
set_task(0.1,"load_ban")
}
public show_ban_menu(id)
{
if(!is_user_connected(id)) return;
if(!(get_user_flags(id) & ADMIN_SLAY)) return;
new title_msg[125]
if(reason_ban[id]==4)
{
formatex(title_msg,charsmax(title_msg),"Выбрать игрока")
}
else
{
formatex(title_msg,charsmax(title_msg),"Выбрать игрока ^nПричина : %s ",REASON[reason_ban[id]])
}
new Menu = menu_create(title_msg, "ban_handler")
new Players[32], i_Num, Player
new name[50], s_Player[10]
get_players(Players, i_Num)
for (new i; i < i_Num; i++)
{
new msg_additem[70]
Player = Players[i];
get_user_name(Player, name, charsmax(name))
num_to_str(Player, s_Player, charsmax(s_Player))
if(get_user_flags(Player) & ADMIN_IMMUNITY)
formatex(msg_additem,charsmax(msg_additem),"\r[Имунитет]%s",name)
else
formatex(msg_additem,charsmax(msg_additem),"\w%s",name)
if(id !=Player)
menu_additem(Menu, msg_additem, s_Player, 0)
}
new msg[75]
if(reason_ban [id]== 4)
{
formatex(msg,charsmax(msg),"%s",REASON[reason_ban[id]])
}
else
{
formatex(msg,charsmax(msg),"%s",REASON[reason_ban[id]+1])
}
client_print(id,print_chat,"You display menu")
menu_setprop(Menu, MPROP_EXITNAME, msg)
menu_display(id, Menu, 0)
}
public ban_handler(id, menu, item)
{
if (item == MENU_EXIT)
{
if(reason_ban[id]==4)
{
reason_ban [id]= 0;
menu_destroy( menu );
return PLUGIN_HANDLED
}
else
{
reason_ban [id]+= 1;
show_ban_menu(id)
}
}
new s_Data[6], s_Name[64], i_Access, i_Callback
menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
new Player = str_to_num(s_Data)
if(!is_user_connected(Player)) return PLUGIN_HANDLED;
if (is_user_connected(Player))
{
if(get_user_flags(Player) & ADMIN_IMMUNITY)
{
client_print(id,print_chat,"У данного игрока имунитет!")
}
else
{
ban_player(Player,REASON[reason_ban[id]])
}
}
menu_destroy(menu)
return PLUGIN_HANDLED
}
public plugin_precache()
{
Name_ban = ArrayCreate(128, 1);
STEAM_ID_ban = ArrayCreate(128, 1);
IP_ban = ArrayCreate(128, 1);
Reason = ArrayCreate(128, 1);
}
public banan(id)
{
new msg[100]
formatex(msg,charsmax(msg),"Аим")
ban_player(id,msg)
}
public client_connect( id )
{
new name[46],ip[23],steam_id[40];
get_user_ip(id, ip, 22,1)
get_user_name(id,name,45)
get_user_authid(id,steam_id,39)
for (new i = 0; i < Count; i++)
{
new Ban_name[46],Ban_ip[23],Ban_steam_id[40],Reas[70];
ArrayGetString(Name_ban,i, Ban_name, charsmax(Ban_name));
ArrayGetString(STEAM_ID_ban,i, Ban_steam_id, charsmax(Ban_steam_id));
ArrayGetString(IP_ban,i, Ban_ip, charsmax(Ban_ip));
if(equali(name,Ban_name))
{
ArrayGetString(Reason,i, Reas, charsmax(Reas));
server_cmd("kick #%d ^"%s^"", get_user_userid(id),Reas)
break;
}
if(equali(Ban_steam_id,steam_id))
{
ArrayGetString(Reason,i, Reas, charsmax(Reas));
server_cmd("kick #%d ^"%s^"", get_user_userid(id),Reas)
break;
}
if(equali(Ban_ip,ip))
{
ArrayGetString(Reason,i, Reas, charsmax(Reas));
server_cmd("kick #%d ^"%s^"", get_user_userid(id),Reas)
break;
}
}
reason_ban [id]= 0;
}
stock ban_player(index,reason[])
{
if(!is_user_connected(index)) return
new name[46],ip[23],steam_id[40];
get_user_ip(index, ip, 22,1)
get_user_name(index,name,45)
get_user_authid(index,steam_id,39)
new msg[250]
formatex(msg,charsmax(msg),"^"%s^" ^"%s^" ^"%s^" ^"%s^"",name,steam_id,ip,reason)
write_file(BAN_FILE,msg,-1)
server_cmd("amx_ban #%d 1 ^"Reason: %s!^"", get_user_userid(index),reason)
set_task(10.0,"load_ban")
}
public load_ban()
{
new File=fopen(BAN_FILE,"r");
new Counts = 0
if (File)
{
new Text[1024];
new Name[44];
new STEAM_ID[40]
new IP[40]
new Reasons[100]
while (!feof(File))
{
fgets(File,Text,sizeof(Text)-1);
trim(Text);
if (Text[0]==';')
{
continue;
}
Name[0]=0;
parse(Text,Name,sizeof(Name)-1,STEAM_ID,charsmax(STEAM_ID),IP,charsmax(IP),Reasons,charsmax(Reasons))
ArrayPushString(Name_ban, Name);
ArrayPushString(STEAM_ID_ban, STEAM_ID);
ArrayPushString(IP_ban, IP);
ArrayPushString(Reason, Reasons);
Counts++;
}
Count = Counts
fclose(File);
}
}