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

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

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

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

voteban

, переделать плагин что бы голосовать только могли с доступом С
Статус пользователя kot1
сообщение 18.9.2012, 18:36
Сообщение #1
Стаж: 13 лет

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

помогите пожалуйста переделать плагин что бы голосовать только могли с доступом С
Код
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Vote Ban"
#define VERSION "1.0"
#define AUTHOR "Alka"

#define MAX_PLAYERS 33

#define MENU_KEYS (1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9)
#define MENU_SLOTS 8

new g_iMenuPage[MAX_PLAYERS];
new g_iVotedPlayers[MAX_PLAYERS];
new g_iVotes[MAX_PLAYERS];
new g_szVoteReason[MAX_PLAYERS][64];

new g_iPlayers[MAX_PLAYERS - 1];
new g_iNum;

new g_iMsgidSayText;

enum {
    CVAR_PERCENT = 0,
    CVAR_BANTYPE,
    CVAR_BANTIME
};
new g_szCvarName[][] = {
    "voteban_percent",
    "voteban_type",
    "voteban_time"
};
new g_szCvarValue[][] = {
    "80",
    "1",
    "100"
};
new g_iPcvar[3];
new g_szLogFile[64];

public plugin_init() {
    
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    register_saycmd("voteban", "Cmd_VoteBan", -1, "");
    register_clcmd("_voteban_reason", "Cmd_VoteBanReason", -1, "");
    
    register_menucmd(register_menuid("\rVOTEBAN \yMenu:"), MENU_KEYS, "Menu_VoteBan");
    
    for(new i = 0; i < 3; i++)
    {
        g_iPcvar[i] = register_cvar(g_szCvarName[i], g_szCvarValue[i]);
    }
    g_iMsgidSayText = get_user_msgid("SayText");
    
    new szLogInfo[] = "amx_logdir";
    get_localinfo(szLogInfo, g_szLogFile, charsmax(g_szLogFile));
    add(g_szLogFile, charsmax(g_szLogFile), "/voteban");
    
    if(!dir_exists(g_szLogFile))
        mkdir(g_szLogFile);
        
    new szTime[32];
    get_time("%d-%m-%Y", szTime, charsmax(szTime));
    format(g_szLogFile, charsmax(g_szLogFile), "%s/%s.log", g_szLogFile, szTime);
}

public client_disconnect(id)
{
    if(g_iVotedPlayers[id])
    {
        get_players(g_iPlayers, g_iNum, "h");
        
        for(new i = 0; i < g_iNum; i++)
        {
            if(g_iVotedPlayers[id] & (1 << g_iPlayers[i]))
            {
                g_iVotes[g_iPlayers[i]]--;
            }
        }
        g_iVotedPlayers[id] = 0;
    }
}

public Cmd_VoteBan(id)
{
    get_players(g_iPlayers, g_iNum, "h");
    
    if(g_iNum < 3)
    {
        client_printc(id, "\g> \dThis command is unavailable! Need at least 3 players.");
        return PLUGIN_HANDLED;
    }
    ShowBanMenu(id, g_iMenuPage[id] = 0);
    return PLUGIN_CONTINUE;
}

public ShowBanMenu(id, iPos)
{
    static i, iPlayer, szName[32];
    static szMenu[256], iCurrPos; iCurrPos = 0;
    static iStart, iEnd; iStart = iPos * MENU_SLOTS;
    static iKeys;
    
    get_players(g_iPlayers, g_iNum, "h");
    
    if(iStart >= g_iNum)
    {
        iStart = iPos = g_iMenuPage[id] = 0;
    }
    
    static iLen;
    iLen = formatex(szMenu, charsmax(szMenu), "\rVOTEBAN \yMenu:^n^n");
    
    iEnd = iStart + MENU_SLOTS;
    iKeys = MENU_KEY_0;
    
    if(iEnd > g_iNum)
    {
        iEnd = g_iNum;
    }
    
    for(i = iStart; i < iEnd; i++)
    {
        iPlayer = g_iPlayers[i];
        get_user_name(iPlayer, szName, charsmax(szName));
        
        iKeys |= (1 << iCurrPos++);
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r%d\w.%s \d(\r%d%%\d)^n", iCurrPos, szName, get_percent(g_iVotes[iPlayer], g_iNum));
    }
    
    if(iEnd != g_iNum)
    {
        formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r9\w.Next ^n\r0\w.%s", iPos ? "Back" : "Exit");
        iKeys |= MENU_KEY_9;
    }
    else
    {
        formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r0\w.%s", iPos ? "Back" : "Exit");
    }
    show_menu(id, iKeys, szMenu, -1, "");
    return PLUGIN_HANDLED;
}

public Menu_VoteBan(id, key)
{
    switch(key)
    {
        case 8:
        {
            ShowBanMenu(id, ++g_iMenuPage[id]);
        }
        case 9:
        {
            if(!g_iMenuPage[id])
                return PLUGIN_HANDLED;
            
            ShowBanMenu(id, --g_iMenuPage[id]);
        }
        default: {
            static iPlayer;
            iPlayer = g_iPlayers[g_iMenuPage[id] * MENU_SLOTS + key];
            
            if(!is_user_connected(iPlayer))
            {
                ShowBanMenu(id, g_iMenuPage[id]);
                return PLUGIN_HANDLED;
            }
            if(iPlayer == id)
            {
                client_print(id, print_center, "*You cannot voteban yourself!*");
                ShowBanMenu(id, g_iMenuPage[id]);
                
                return PLUGIN_HANDLED;
            }
            if(g_iVotedPlayers[id] & (1 << iPlayer))
            {
                client_print(id, print_center, "*You already votebanned this player!*");
                ShowBanMenu(id, g_iMenuPage[id]);
                
                return PLUGIN_HANDLED;
            }
            g_iVotes[iPlayer]++;
            g_iVotedPlayers[id] |= (1 << iPlayer);
            
            static szName[2][32];
            get_user_name(id, szName[0], charsmax(szName[]));
            get_user_name(iPlayer, szName[1], charsmax(szName[]));
            
            client_printc(0, "\g> \dPlayer \t%s \dvotebanned \t%s\d!", szName[0], szName[1]);
            
            CheckVotes(iPlayer, id);
            client_cmd(id, "messagemode _voteban_reason");
            
            ShowBanMenu(id, g_iMenuPage[id]);
        }
    }
    return PLUGIN_HANDLED;
}

public Cmd_VoteBanReason(id)
{
    if(!g_iVotedPlayers[id])
        return PLUGIN_HANDLED;
    
    new szArgs[64];
    read_argv(1, szArgs, charsmax(szArgs));
    
    if(szArgs[0])
    {
        formatex(g_szVoteReason[id], charsmax(g_szVoteReason[]), szArgs);
    }
    return PLUGIN_HANDLED;
}

public CheckVotes(id, voter)
{
    get_players(g_iPlayers, g_iNum, "h");
    new iPercent = get_percent(g_iVotes[id], g_iNum);
    
    if(iPercent >= get_pcvar_num(g_iPcvar[CVAR_PERCENT]))
    {
        switch(get_pcvar_num(g_iPcvar[CVAR_BANTYPE]))
        {
            case 1:
            {
                new szAuthid[32];
                get_user_authid(id, szAuthid, charsmax(szAuthid));
                server_cmd("kick #%d;wait;wait;wait;banid %d ^"%s^";wait;wait;wait;writeid", get_user_userid(id), get_pcvar_num(g_iPcvar[CVAR_BANTIME]), szAuthid);
            }
            case 2:
            {
                new szIp[32];
                get_user_ip(id, szIp, charsmax(szIp), 1);
                server_cmd("kick #%d;wait;wait;wait;addip %d ^"%s^";wait;wait;wait;writeip", get_user_userid(id), get_pcvar_num(g_iPcvar[CVAR_BANTIME]), szIp);
            }
        }
        g_iVotes[id] = 0;
        
        new szName[2][32];
        get_user_name(id, szName[0], charsmax(szName[]));
        get_user_name(id, szName[1], charsmax(szName[]));
        client_printc(0, "\g> \dPlayer \t%s \dhas been banned for \g%d\dmin. due voteban!", szName[0], get_pcvar_num(g_iPcvar[CVAR_BANTIME]));
        
        log_to_file(g_szLogFile, "Player '%s' voted for banning '%s' for: %s", szName[1], szName[0], g_szVoteReason[voter]);
    }
}

stock get_percent(value, tvalue)
{    
    return floatround(floatmul(float(value) / float(tvalue) , 100.0));
}

stock register_saycmd(saycommand[], function[], flags = -1, info[])
{
    static szTemp[64];
    formatex(szTemp, charsmax(szTemp), "say %s", saycommand);
    register_clcmd(szTemp, function, flags, info);
    formatex(szTemp, charsmax(szTemp), "say_team %s", saycommand);
    register_clcmd(szTemp, function, flags, info);
    formatex(szTemp, charsmax(szTemp), "say /%s", saycommand);
    register_clcmd(szTemp, function, flags, info);
    formatex(szTemp, charsmax(szTemp), "say .%s", saycommand);
    register_clcmd(szTemp, function, flags, info);
    formatex(szTemp, charsmax(szTemp), "say_team /%s", saycommand);
    register_clcmd(szTemp, function, flags, info);
    formatex(szTemp, charsmax(szTemp), "say_team .%s", saycommand);
    register_clcmd(szTemp, function, flags, info);
}

stock client_printc(id, const text[], any:...)
{
    
    new szMsg[191], iPlayers[32], iCount = 1;
    vformat(szMsg, charsmax(szMsg), text, 3);
    
    replace_all(szMsg, charsmax(szMsg), "\g","^x04");
    replace_all(szMsg, charsmax(szMsg), "\d","^x01");
    replace_all(szMsg, charsmax(szMsg), "\t","^x03");
    
    if(id)
        iPlayers[0] = id;
    else
        get_players(iPlayers, iCount, "ch");
    
    for(new i = 0; i < iCount; i++)
    {
        if(!is_user_connected(iPlayers[i]))
            continue;
        
        message_begin(MSG_ONE_UNRELIABLE, g_iMsgidSayText, _, iPlayers[i]);
        write_byte(iPlayers[i]);
        write_string(szMsg);
        message_end();
    }
}


Отредактировал: kot1, - 18.9.2012, 18:45
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Pakistan
сообщение 18.9.2012, 18:44
Сообщение #2
Стаж: 14 лет

Сообщений: 808
Благодарностей: 246
Полезность: 554

(Не хочешь сообщить нам что именно нужно?)
ps.gif Извини не увидел названия темы. blush.gif

Отредактировал: Pakistan, - 18.9.2012, 18:47
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя kot1
сообщение 18.9.2012, 18:47
Сообщение #3
Стаж: 13 лет

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

Цитата(Pakistan @ 18.9.2012, 19:44) *
Не хочешь сообщить нам что именно нужно?

переделать плагин что бы голосовать только могли с доступом С
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 19.9.2012, 6:48
Сообщение #4
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Изменить строчку в начале:
Код
register_saycmd("voteban", "Cmd_VoteBan", "ADMIN_KICK", "");


Это было нужно?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя kot1
сообщение 19.9.2012, 12:53
Сообщение #5
Стаж: 13 лет

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

Цитата(Safety1st @ 19.9.2012, 6:48) *
Изменить строчку в начале:
Код
register_saycmd("voteban", "Cmd_VoteBan", "ADMIN_KICK", "");


Это было нужно?

1 Error.
Could not locate output file voteban.amx (compile failed).
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 19.9.2012, 13:51
Сообщение #6
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Это конец ошибки, он ни о чём не говорит))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя kot1
сообщение 19.9.2012, 14:14
Сообщение #7
Стаж: 13 лет

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

Цитата(Safety1st @ 19.9.2012, 14:51) *
Это конец ошибки, он ни о чём не говорит))

Прикрепленные файлы:
Прикрепленное изображение
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 19.9.2012, 14:16
Сообщение #8
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Тьфу ;)
ADMIN_KICK без кавычек пишется)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя kot1
сообщение 19.9.2012, 14:52
Сообщение #9
Стаж: 13 лет

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

Цитата(Safety1st @ 19.9.2012, 14:16) *
Тьфу ;)
ADMIN_KICK без кавычек пишется)

вотебан не работает пишет > This command is unavailable! Need at least 3 players.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 19.9.2012, 14:55
Сообщение #10
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

LOL
Ты его раньше-то использовал?
Когда на сервере меньше 3-х игроков - этот voteban не работает, специально так сделано.

Отредактировал: Safety1st, - 19.9.2012, 14:56
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 19.9.2012, 19:53
Сообщение #11


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

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Не получится (скорее всего, т.к нужна еще проверка на флаг).

Код
register_saycmd("voteban", "Cmd_VoteBan", -1, "");

-->
Код
register_saycmd("voteban", "Cmd_VoteBan", ADMIN_KICK, "");


Код
public Cmd_VoteBan(id)
{
    get_players(g_iPlayers, g_iNum, "h");
    
    if(g_iNum < 3)
    {
        client_printc(id, "\g> \dThis command is unavailable! Need at least 3 players.");
        return PLUGIN_HANDLED;
    }
    ShowBanMenu(id, g_iMenuPage[id] = 0);
    return PLUGIN_CONTINUE;
}

-->
Код
public Cmd_VoteBan(id,level,cid)
{
    if( !cmd_access( id, level, cid, 1 ) )
    {
        return PLUGIN_HANDLED
    }

    get_players(g_iPlayers, g_iNum, "h");
    
    if(g_iNum < 3)
    {
        client_printc(id, "\g> \dThis command is unavailable! Need at least 3 players.");
        return PLUGIN_HANDLED;
    }
    ShowBanMenu(id, g_iMenuPage[id] = 0);
    return PLUGIN_CONTINUE;
}


вот как-то так

Отредактировал: AndrewZ, - 19.9.2012, 19:54


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя kot1
сообщение 20.9.2012, 1:36
Сообщение #12
Стаж: 13 лет

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

Цитата(AndrewZ @ 19.9.2012, 19:53) *
Не получится (скорее всего, т.к нужна еще проверка на флаг).

Код
register_saycmd("voteban", "Cmd_VoteBan", -1, "");

-->
Код
register_saycmd("voteban", "Cmd_VoteBan", ADMIN_KICK, "");


Код
public Cmd_VoteBan(id)
{
    get_players(g_iPlayers, g_iNum, "h");
    
    if(g_iNum < 3)
    {
        client_printc(id, "\g> \dThis command is unavailable! Need at least 3 players.");
        return PLUGIN_HANDLED;
    }
    ShowBanMenu(id, g_iMenuPage[id] = 0);
    return PLUGIN_CONTINUE;
}

-->
Код
public Cmd_VoteBan(id,level,cid)
{
    if( !cmd_access( id, level, cid, 1 ) )
    {
        return PLUGIN_HANDLED
    }

    get_players(g_iPlayers, g_iNum, "h");
    
    if(g_iNum < 3)
    {
        client_printc(id, "\g> \dThis command is unavailable! Need at least 3 players.");
        return PLUGIN_HANDLED;
    }
    ShowBanMenu(id, g_iMenuPage[id] = 0);
    return PLUGIN_CONTINUE;
}


вот как-то так

спасибо за помощь

Отредактировал: kot1, - 20.9.2012, 9:18
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 20.9.2012, 1:39
Сообщение #13
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

По ходу он издевается над нами :D
Не-не, больше кода ты из нас не выманишь ;)
Загони на сервер 2-х друзей, дай им флаг 'c' и пробуйте друг друга заvoteban'ить.

Отредактировал: Safety1st, - 20.9.2012, 2:52
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя kot1
сообщение 20.9.2012, 9:18
Сообщение #14
Стаж: 13 лет

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

Цитата(Safety1st @ 20.9.2012, 1:39) *
По ходу он издевается над нами :D
Не-не, больше кода ты из нас не выманишь ;)
Загони на сервер 2-х друзей, дай им флаг 'c' и пробуйте друг друга заvoteban'ить.

спасибо за помощь
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: