AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Suggestions / Requests (https://forums.alliedmods.net/forumdisplay.php?f=12)
-   -   |REQ| Vote Ban (https://forums.alliedmods.net/showthread.php?t=263962)

Krtola 06-05-2015 11:56

|REQ| Vote Ban
 
Need help with this:set to be able to vote only once for only one player,and then after a certain number of seconds that can vote again.
PHP Code:

#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(PLUGINVERSIONAUTHOR);
    
    
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++)
    {
        
g_iPcvar[i] = register_cvar(g_szCvarName[i], g_szCvarValue[i]);
    }
    
g_iMsgidSayText get_user_msgid("SayText");
    
    new 
szLogInfo[] = "amx_logdir";
    
get_localinfo(szLogInfog_szLogFilecharsmax(g_szLogFile));
    
add(g_szLogFilecharsmax(g_szLogFile), "/voteban");
    
    if(!
dir_exists(g_szLogFile))
        
mkdir(g_szLogFile);
        
    new 
szTime[32];
    
get_time("%d-%m-%Y"szTimecharsmax(szTime));
    
format(g_szLogFilecharsmax(g_szLogFile), "%s/%s.log"g_szLogFileszTime);
}

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

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

public 
ShowBanMenu(idiPos)
{
    static 
iiPlayerszName[32];
    static 
szMenu[256], iCurrPosiCurrPos 0;
    static 
iStartiEndiStart iPos MENU_SLOTS;
    static 
iKeys;
    
    
get_players(g_iPlayersg_iNum"h");
    
    if(
iStart >= g_iNum)
    {
        
iStart iPos g_iMenuPage[id] = 0;
    }
    
    static 
iLen;
    
iLen formatex(szMenucharsmax(szMenu), "\rVOTEBAN \yMenu:^n^n");
    
    
iEnd iStart MENU_SLOTS;
    
iKeys MENU_KEY_0;
    
    if(
iEnd g_iNum)
    {
        
iEnd g_iNum;
    }
    
    for(
iStart iEnd i++)
    {
        
iPlayer g_iPlayers[i];
        
get_user_name(iPlayerszNamecharsmax(szName));
        
        
iKeys |= (<< iCurrPos++);
        
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\r%d\w.%s \d(\r%d%%\d)^n"iCurrPosszNameget_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(idiKeysszMenu, -1"");
    return 
PLUGIN_HANDLED;
}

public 
Menu_VoteBan(idkey)
{
    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(idg_iMenuPage[id]);
                return 
PLUGIN_HANDLED;
            }
            if(
iPlayer == id)
            {
                
client_print(idprint_center"*You cannot voteban yourself!*");
                
ShowBanMenu(idg_iMenuPage[id]);
                
                return 
PLUGIN_HANDLED;
            }
            if(
g_iVotedPlayers[id] & (<< iPlayer))
            {
                
client_print(idprint_center"*You already votebanned this player!*");
                
ShowBanMenu(idg_iMenuPage[id]);
                
                return 
PLUGIN_HANDLED;
            }
            
g_iVotes[iPlayer]++;
            
g_iVotedPlayers[id] |= (<< iPlayer);
            
            static 
szName[2][32];
            
get_user_name(idszName[0], charsmax(szName[]));
            
get_user_name(iPlayerszName[1], charsmax(szName[]));
            
            
client_printc(0"\g> \dPlayer \t%s \dvotebanned \t%s\d!"szName[0], szName[1]);
            
            
CheckVotes(iPlayerid);
            
client_cmd(id"messagemode _voteban_reason");
            
            
ShowBanMenu(idg_iMenuPage[id]);
        }
    }
    return 
PLUGIN_HANDLED;
}

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

public 
CheckVotes(idvoter)
{
    
get_players(g_iPlayersg_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(idszAuthidcharsmax(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(idszIpcharsmax(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(idszName[0], charsmax(szName[]));
        
get_user_name(idszName[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(valuetvalue)
{     
    return 
floatround(floatmul(float(value) / float(tvalue) , 100.0));
}

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

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




All times are GMT -4. The time now is 20:07.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.