Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Переделать Вотебан

Статус пользователя OverOne
сообщение 30.5.2015, 21:58
Сообщение #1


Стаж: 11 лет

Сообщений: 2
Благодарностей: 1
Полезность: 0

Ребята помогите переделать чтобы банило по 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);
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя coca-cola :)
сообщение 30.5.2015, 22:05
Сообщение #2


Иконка группы

Стаж: 12 лет
Город: Москва

Сообщений: 1306
Благодарностей: 1031
Полезность: 1247

Меценат Меценат

Это зависит от вашей бан системы. Плагин просто посылает команду amx_ban, а далее уже работает Ваша бан система.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Norman111
сообщение 30.5.2015, 23:04
Сообщение #3


Стаж: 13 лет

Сообщений: 328
Благодарностей: 230
Полезность: 403

Не знаю, получится или нет, но вот
189 строка
Код:
server_cmd("amx_ban 360 #%d ^"[VoteBan] %s^"", get_user_ip(iVbBanPl), iCustomReason[iVbInsider][0] ? iCustomReason[iVbInsider] : "Демо на форум!");
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: