1. SNEG Пользователь

    Регистрация:
    31.05.15
    Сообщения:
    152
    Симпатии:
    34
    Пол:
    Мужской
    Как записать чтобы бан был по ip или steamid?
    server_cmd("amx_ban 360 #%d ^"%s^"", get_user_userid(iVbBanPl), iCustomReason[iVbInsider][0] ? iCustomReason[iVbInsider] : "");
     
    Владимирович нравится это.
  2. Phantom Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.691
    Симпатии:
    796
    Пол:
    Мужской
    Telegram:
    ph4nt0m
    get_user_userid => get_user_ip
    Не?
     
  3. SNEG Пользователь

    Регистрация:
    31.05.15
    Сообщения:
    152
    Симпатии:
    34
    Пол:
    Мужской
    Не компилирует ошибки выдает ((( я уже что только не ставил addip и т.п че то не доганяю как записать правильно addip со временем..
    /*
    neygomon created ^_^ | http://www.neugomon.ru

    Наказание на 200 строке. По стандарту бан через AMXBans/FreshBans
    Superban: server_cmd("amx_ban #%d 360 ^"[VoteBan] %s^"", get_user_userid(iVbBanPl), iCustomReason[iVbInsider][0] ? iCustomReason[iVbInsider] : "Демо на форум!")
    Kick: server_cmd("kick #%d ^"[VoteBan] %s^"", get_user_userid(iVbBanPl), iCustomReason[iVbInsider][0] ? iCustomReason[iVbInsider] : "Демо на форум!")


    Credits:
    * UFPS vip.Predator - помощь с менюшками
    * Safety1st - подсказка с item = -3
    */
    #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) & 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, szName[players], charsmax(szName[]));
    iVbPl[iVbCount++] = players;
    }
    }
    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 == id) continue;
    num_to_str(iVbPl, num, charsmax(num));
    menu_additem(iPlMenu, szName[iVbPl], 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 == iVbBanPl) continue;
    menu_display(iVbPl, 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) || iBoolVoted[iVbPl]) continue;
    player_menu_info(iVbPl, menu, newmenu, menupage);
    if(vmenu == newmenu)
    menu_cancel(iVbPl);
    }

    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);
    }
     
    Последнее редактирование модератором: 31.05.15
  4. jokin Команда форума

    Регистрация:
    28.02.15
    Сообщения:
    828
    Симпатии:
    212
    А под спойлер запихнуть, не?
     
  5. SNEG Пользователь

    Регистрация:
    31.05.15
    Сообщения:
    152
    Симпатии:
    34
    Пол:
    Мужской
    куда?
     
  6. jokin Команда форума

    Регистрация:
    28.02.15
    Сообщения:
    828
    Симпатии:
    212
    Просто не удобно листать пол страницы, только чтобы исходник посмотреть.
     

    Вложения:

  7. SNEG Пользователь

    Регистрация:
    31.05.15
    Сообщения:
    152
    Симпатии:
    34
    Пол:
    Мужской
    да я вот его искал куда бы вставить да не нашел(( буду знать.
     
  8. Phantom Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.691
    Симпатии:
    796
    Пол:
    Мужской
    Telegram:
    ph4nt0m
    Скинь ошибки сюда. Те, что при компиляции появляются
     
  9. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.594
    Симпатии:
    4.169
    Пол:
    Мужской
    new sIP[16]; get_user_ip(iVbBanPl, sIP, charsmax(sIP), 1);
    server_cmd("addip 360.0 %s", sIP);
     
  10. SNEG Пользователь

    Регистрация:
    31.05.15
    Сообщения:
    152
    Симпатии:
    34
    Пол:
    Мужской
    new sIP[16]; get_user_ip(iVbBanPl, sIP, charsmax(sIP), 1);
    server_cmd("addip 900.0 %s ^"%s^".", sIP, iCustomReason[iVbInsider][0] ? iCustomReason[iVbInsider] : "Тест");
    Пойдет с причиной ? А то сам на себе проверить не могу(( .
     
  11. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.594
    Симпатии:
    4.169
    Пол:
    Мужской
    SNEG, причины там нет
     
  12. SNEG Пользователь

    Регистрация:
    31.05.15
    Сообщения:
    152
    Симпатии:
    34
    Пол:
    Мужской
    iCustomReason[iVbInsider][0] ? iCustomReason[iVbInsider] : "Тест"); а это тогда что?
     
  13. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.594
    Симпатии:
    4.169
    Пол:
    Мужской
    SNEG, бля...
    addip не имеет причины -_-
     
    XyLiGaN нравится это.
  14. XyLiGaN Guest

    SNEG, При бане сервером через addip - причину НЕЛЬЗЯ указать.
     
  15. SNEG Пользователь

    Регистрация:
    31.05.15
    Сообщения:
    152
    Симпатии:
    34
    Пол:
    Мужской
    Без обид, буду знать, оставлю так как ты скинул.. Спасибо.
     
  16. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.594
    Симпатии:
    4.169
    Пол:
    Мужской
    SNEG, да нет обид:)
    просто я скинул готовый вариант, зачем спрашивать?;)
     
  17. SNEG Пользователь

    Регистрация:
    31.05.15
    Сообщения:
    152
    Симпатии:
    34
    Пол:
    Мужской
    upload_2015-5-31_20-44-16.png
    Ошибки при компиляции
     
  18. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.594
    Симпатии:
    4.169
    Пол:
    Мужской
    че там за строка?
     
  19. SNEG Пользователь

    Регистрация:
    31.05.15
    Сообщения:
    152
    Симпатии:
    34
    Пол:
    Мужской
    new sIP[16]; get_user_ip(iVbBanPl, sIP, charsmax(sIP), 1);
     
  20. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.594
    Симпатии:
    4.169
    Пол:
    Мужской
    new sIP[16];
    get_user_ip(iVbBanPl, sIP, charsmax(sIP), 1);
    так попробуй