Ребята помогите переделать чтобы банило по ip игроков
Код:
Код
#include <amxmodx>
#if AMXX_VERSION_NUM < 183
#include <colorchat>
#endif
#define MIN_PLAYERS 3 // Минимальное кол-во игроков на сервере для запуска голосования
#define BAN_RATIO 0.6 // Коэффицент голосов для бана. 0.1 - 10% | 1.0 - 100%
#define VB_DELAY 120 // Время(в секундах) между голосованиями. Защита от лалок, которые хотят всех перебанить xD
new bool:iBoolVoted[33], szName[33][32];
new iVbTime, iVoteCount, iVbInsider, iVbBanPl, iVbCount, iVbPl[33], iCustomReason[33][20];
new num[3], _access, callback, item_num[3], item_name[36], iRsnMenu, iVoteMenu;
public plugin_init()
{
#define VERSION "1.7.3b"
register_plugin("VoteBan", VERSION, "neygomon");
register_cvar("vb_neygomon", VERSION, FCVAR_SERVER | FCVAR_SPONLY);
register_clcmd("say /ban", "cmd_say_voteban");
register_clcmd("say_team /ban", "cmd_say_voteban");
register_clcmd("say /voteban", "cmd_say_voteban");
register_clcmd("say_team /voteban", "cmd_say_voteban");
register_clcmd("vb_reason", "cmd_vote_reason");
}
public plugin_cfg()
{
iRsnMenu = menu_create("\d[\rVoteBan\d] \yВыберите причину", "custom_menu_handle");
iVoteMenu = menu_create("VOTEBAN_MENU", "votebanpl_handle");
menu_setprop(iRsnMenu, MPROP_EXIT, MEXIT_NEVER);
menu_setprop(iVoteMenu, MPROP_EXIT, MEXIT_NEVER);
menu_additem(iRsnMenu, "\yСвоя причина", "1");
menu_additem(iRsnMenu, "\rСтандартная", "0");
menu_additem(iVoteMenu, "\yДа", "1");
menu_additem(iVoteMenu, "\rНет", "0");
}
public client_disconnect(id)
{
if(iBoolVoted[id])
{
iBoolVoted[id] = false;
iVoteCount--;
}
}
public cmd_say_voteban(id)
{
static players[32], pnum, delay;
if(iVbInsider)
return client_print_color(id, 0, "^1[^4VoteBan^1] ^4Голосование ^3уже запущено^4!");
delay = iVbTime + VB_DELAY - get_systime();
if(delay > 0)
return client_print_color(id, 0, "^1[^4VoteBan^1] ^4Голосование будет доступно через ^3%d ^4мин. ^3%d ^4сек.", (delay / 60), (delay % 60));
get_players(players, pnum);
if(MIN_PLAYERS > pnum)
return client_print_color(id, 0, "^1[^4VoteBan^1] ^4Необходимо не менее ^3%d ^4игроков для запуска голосования!", MIN_PLAYERS);
iVbCount = 0;
for(new i; i < pnum; i++)
{
if(get_user_flags(players[i]) & ADMIN_MENU)
{
client_print_color(id, 0, "^1[^4VoteBan^1] ^4На сервере присутствует ^3администратор^4!");
log_to_file("voteban.log", "[Fail] Vote non active. Reason: Admins on server... This is good :)");
return PLUGIN_HANDLED;
}
else
{
get_user_name(players[i], szName[players[i]], charsmax(szName[]));
iVbPl[iVbCount++] = players[i];
}
}
return choosepl_menu(id);
}
choosepl_menu(id)
{
static iPlMenu, iCallBack;
iPlMenu = menu_create("\d[\rVoteBan\d] \yВыберите игрока:\w", "choosepl_handle");
iCallBack = menu_makecallback("menu_callback");
menu_setprop(iPlMenu, MPROP_BACKNAME, "Назад");
menu_setprop(iPlMenu, MPROP_NEXTNAME, "Далее");
menu_setprop(iPlMenu, MPROP_EXITNAME, "Закрыть");
for(new i; i < iVbCount; ++i)
{
if(iVbPl[i] == id) continue;
num_to_str(iVbPl[i], num, charsmax(num));
menu_additem(iPlMenu, szName[iVbPl[i]], num, 0, iCallBack);
}
return menu_display(id, iPlMenu);
}
public menu_callback(id, menu, item)
{
menu_item_getinfo(menu, item, _access, item_num, charsmax(item_num), item_name, charsmax(item_name), callback);
static item_newname[64], ITEM_STATUS; ITEM_STATUS = ITEM_DISABLED;
if(get_user_flags(str_to_num(item_num)) & ADMIN_IMMUNITY)
{
formatex(item_newname, charsmax(item_newname), "\d%s \y[\rИммунитет\y]", item_name);
menu_item_setname(menu, item, item_newname);
}
else ITEM_STATUS = ITEM_ENABLED;
return ITEM_STATUS;
}
public choosepl_handle(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
menu_item_getinfo(menu, item, _access, item_num, charsmax(item_num), _, _, callback);
iVbBanPl = str_to_num(item_num);
menu_destroy(menu);
return menu_display(id, iRsnMenu);
}
public custom_menu_handle(id, menu, item)
{
if(item == MENU_EXIT) return PLUGIN_HANDLED;
menu_item_getinfo(menu, item, _access, item_num, charsmax(item_num), _, _, callback);
if(str_to_num(item_num)) client_cmd(id, "messagemode vb_reason");
else votebanpl_menu(id);
return PLUGIN_HANDLED;
}
votebanpl_menu(id)
{
static szStrReason[64], szTitle[128];
formatex(szStrReason, charsmax(szStrReason), "^n\rReason\w: \y%s", iCustomReason[id]);
formatex(szTitle, charsmax(szTitle), "\d[\rVoteBan\d] \wBan \y%s\w?%s", szName[iVbBanPl], iCustomReason[id][0] ? szStrReason : "");
menu_setprop(iVoteMenu, MPROP_TITLE, szTitle);
iVoteCount = 0; iVbTime = get_systime(); iVbInsider = id;
arrayset(iBoolVoted, false, 33);
for(new i; i < iVbCount; ++i)
{
if(iVbPl[i] == iVbBanPl) continue;
menu_display(iVbPl[i], iVoteMenu);
}
set_task(10.0, "voteban_count_votes", iVoteMenu);
return PLUGIN_HANDLED;
}
public votebanpl_handle(id, menu, item)
{
if(item == MENU_EXIT)
{
show_menu(id, 0, "^n", 1);
return PLUGIN_HANDLED;
}
menu_item_getinfo(menu, item, _access, item_num, charsmax(item_num), _, _, callback);
if(str_to_num(item_num))
{
iVoteCount++;
iBoolVoted[id] = true;
}
return PLUGIN_HANDLED;
}
public voteban_count_votes(vmenu)
{
new menu, newmenu, menupage;
for(new i; i < iVbCount; i++)
{
if(!is_user_connected(iVbPl[i]) || iBoolVoted[iVbPl[i]]) continue;
player_menu_info(iVbPl[i], menu, newmenu, menupage);
if(vmenu == newmenu)
menu_cancel(iVbPl[i]);
}
static iMinVoteBan, iLol;
iMinVoteBan = floatround(BAN_RATIO * float(iVbCount) + 0.49);
iLol = (iVoteCount >= iMinVoteBan);
if(iLol)
server_cmd("amx_ban 360 #%d ^"[VoteBan] %s^"", get_user_userid(iVbBanPl), iCustomReason[iVbInsider][0] ? iCustomReason[iVbInsider] : "Демо на форум!");
client_print_color(0, 0, "^1[^4VoteBan^1] ^4Голосование завершено! Игрок ^3%s %s ^3забанен^4! ^1[^4Голосов: ^3%d ^1| ^4Необходимо: ^3%d^1]", szName[iVbBanPl], iLol ? "^1был" : "^1не был", iVoteCount, iMinVoteBan);
log_to_file("voteban.log", "[Voteban] Vote %s. Player ^"%s^" [Reason: ^"%s^"][Vote: %d | MinVote: %d][Players: %d]", iLol ? "SUCCESS [Ban]" : "FAILED [No Ban]", szName[iVbBanPl], iCustomReason[iVbInsider][0] ? iCustomReason[iVbInsider] : "Default", iVoteCount, iMinVoteBan, iVbCount);
iVbInsider = iVbBanPl = iCustomReason[iVbInsider][0] = 0; /* Обнуляем переменные и массив */
}
public cmd_vote_reason(id)
{
static szArgs[20];
read_args(szArgs, charsmax(szArgs));
remove_quotes(szArgs);
iCustomReason[id] = szArgs;
return votebanpl_menu(id);
}