Raised This Month: $32 Target: $400
 8% 

Suggest for "AFK manager after 5:00"


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
BrainDead
Junior Member
Join Date: Dec 2020
Location: Anywhere
Old 01-17-2021 , 03:32   Suggest for "AFK manager after 5:00"
Reply With Quote #1

Can anyone make it to manage the players only if they have more than 5 minutes afk time
PHP Code:
/* AMX MOD X Plugin

This file is provided as is (no warranties)
*/

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>

#define PLUGIN "AFK Manager"
#define VERSION "1.2"
#define AUTHOR "Alka"

#define CHECK_ACTIV_FREQUENCY 1 //DON'T CHANGE
#define MIN_CHECK_TIME 10 //Just for safe
#define MAX_AFK_SPECTATORS 3

#define PLUGIN_TAG "AFK"
#define ADMIN_ACCES_FLAG ADMIN_MENU
#define ADMIN_IMMUNITY_FLAG ADMIN_KICK

enum Cvars {
    
    
CVAR_AUTOCHECK 0,
    
CVAR_FASTMACHINE,
    
CVAR_AC_TIME,
    
CVAR_AC_IMMUNITY,
    
CVAR_AC_MAXAFKTIME,
    
CVAR_AC_BOMBTIME,
    
CVAR_AC_PUNISH,
    
CVAR_AFK_MENU,
    
CVAR_UNASSIGNED_CHECK,
    
CVAR_UNASSIGNED_TIME,
    
CVAR_FS_KICK_SPEC
}

new 
lastactive[33], nextcheck[33];
new 
player_id[33], player_name[32][33];
new 
bomb_carrier;
new 
pcvar[Cvars];
new 
bool:user_recording_demo[33];

new const 
afk_kick_reason[] = "Afk:You have been kicked for beeing Afk too long!";

public 
plugin_init() {
    
    
register_plugin(PLUGINVERSIONAUTHOR);
    
    
register_dictionary("afk_manager.txt");
    
    
register_forward(FM_CmdStart"Fwd_CmdStart");
    
register_logevent("bomb_events"3"1=triggered""2=Spawned_With_The_Bomb""2=Dropped_The_Bomb""2=Got_The_Bomb""2=Planted_The_Bomb");
    
    
register_clcmd("say /afk""AfkMenu");
    
register_clcmd("say_team /afk""AfkMenu");
    
    
pcvar[CVAR_AUTOCHECK] = register_cvar("afk_autocheck""1");
    
pcvar[CVAR_FASTMACHINE] = register_cvar("afk_ac_fastmachine""0");
    
pcvar[CVAR_AC_TIME] = register_cvar("afk_ac_time""20");
    
pcvar[CVAR_AC_IMMUNITY] = register_cvar("afk_ac_immunity""1");
    
pcvar[CVAR_AC_MAXAFKTIME] = register_cvar("afk_ac_maxafktime""80");
    
pcvar[CVAR_AC_BOMBTIME] = register_cvar("afk_ac_bombtime""20");
    
pcvar[CVAR_AC_PUNISH] = register_cvar("afk_ac_punish_type""1");
    
pcvar[CVAR_AFK_MENU] = register_cvar("afk_menu""1");
    
pcvar[CVAR_UNASSIGNED_CHECK] = register_cvar("afk_unassigned_check""1");
    
pcvar[CVAR_UNASSIGNED_TIME] = register_cvar("afk_unassigned_time""15");
    
pcvar[CVAR_FS_KICK_SPEC] = register_cvar("afk_fs_kick_spec""1");
    
    if(
get_pcvar_num(pcvar[CVAR_AUTOCHECK]) && get_pcvar_num(pcvar[CVAR_FASTMACHINE]) && !get_pcvar_num(pcvar[CVAR_AC_TIME]))
    {
        
set_task(1.0"AutoCheck_Afk");
    }
    if(
get_pcvar_num(pcvar[CVAR_AUTOCHECK]) && !get_pcvar_num(pcvar[CVAR_FASTMACHINE]) && get_pcvar_num(pcvar[CVAR_AC_TIME]) > MIN_CHECK_TIME)
    {
        
set_task(get_pcvar_float(pcvar[CVAR_AC_TIME]), "AutoCheck_Afk");
    }
    
AutoCheck_Afk_Bomb();
}

public 
Fwd_CmdStart(iduc_handleseed)
{    
    new 
systime get_systime();
    
    if(
nextcheck[id] < systime)
    {
        new 
button get_uc(uc_handleUC_Buttons);
        if(
button != 0)
        {
            
lastactive[id] = systime;
            
nextcheck[id] = systime CHECK_ACTIV_FREQUENCY;
        }
    }
    return 
FMRES_HANDLED;
}

public 
AfkMenu(id)
{
    if(!
get_pcvar_num(pcvar[CVAR_AFK_MENU]))
    {
        
client_print(idprint_chat"%L"LANG_PLAYER"AFK_MENU_DISABLED"PLUGIN_TAG);
        return 
1;
    }
    if(
get_pcvar_num(pcvar[CVAR_AFK_MENU]) == && !is_user_admin(id))
    {
        
client_print(idprint_chat"%L"LANG_PLAYER"AFK_MENU_DISABLED"PLUGIN_TAG);
        return 
1;
    }
    
    new 
menu menu_create("\yAfk Players Check:""AfkMenu_Handler");
    
    new 
players[32], numxpos_id[4];
    
get_players(playersnum);
    
    new 
name[32];
    new 
actualtimeplayertimeminssecs;
    new 
Buffer[64];
    
    
actualtime get_systime();
    
    for(new 
num i++)
    {
        
players[i];
        
        
formatex(pos_idsizeof pos_id 1"%d"x);
        
get_user_name(xnamesizeof name 1);
        
        
playertime actualtime lastactive[x];
        
        if((
playertime 60) >= 1)
        {
            
mins playertime 60;
            
secs playertime 60;
        }
        else
        {
            
mins 0;
            
secs playertime;
        }
        if(
is_user_admin(x))
        {
            
formatex(Buffersizeof Buffer 1"\r* \w%s ^t^t \y(%s%d:%s%d)^t%s"namemins 10 "0" ""minssecs 10 "0" ""secsis_user_alive(x) ? "" "(Dead)");
        }
        else
        {
            
formatex(Buffersizeof Buffer 1"\w%s ^t^t \y(%s%d:%s%d)^t%s"namemins 10 "0" ""minssecs 10 "0" ""secsis_user_alive(x) ? "" "(Dead)");
        }
        
menu_additem(menuBufferpos_id0);
    }
    
menu_addblank(menu0);
    
menu_setprop(menuMPROP_EXITMEXIT_ALL);
    
menu_display(idmenu0);
    
    return 
0;
}

public 
AfkMenu_Handler(idmenuitem)
{
    if(
item == MENU_EXIT)
    {
        
menu_destroy(menu);
        return;
    }
    new 
data[6];
    new 
accesscallback;
    
menu_item_getinfo(menuitemaccessdatasizeof data 1,_,_callback);
    
    
player_id[id] = str_to_num(data);
    
get_user_name(player_id[id], player_name[id], sizeof player_name 1);
    
    if((
get_user_flags(id) & ADMIN_ACCES_FLAG))
    {
        
ShowAfkSubMenu(id);
    }
    else
    {
        
menu_display(idmenu0);
        return;
    }
}

public 
ShowAfkSubMenu(id)
{
    new 
Buffer[128];
    
formatex(Buffersizeof Buffer 1"\wManage Afk player, \y%s:"player_name[id]);
    
    new 
menu menu_create(Buffer"AfkSubMenu_Handler");
    
    
menu_additem(menu"\wMove to Spectators""1"0);
    
menu_additem(menu"\wKick""2"0);
    
    
menu_addblank(menu0);
    
menu_setprop(menuMPROP_EXITMEXIT_NORMAL);
    
menu_display(idmenu0);
}

public 
AfkSubMenu_Handler(idmenuitem)
{
    if(
item == MENU_EXIT)
    {
        
menu_destroy(menu);
        return;
    }
    new 
data[6];
    new 
accesscallback;
    
menu_item_getinfo(menuitemaccessdata2,_,_callback);
    
    new 
key str_to_num(data);
    
    switch(
key)
    {
        case 
1:
        {
            if(
is_user_connected(player_id[id]) && cs_get_user_team(player_id[id]) != CS_TEAM_SPECTATOR)
            {
                
user_silentkill(player_id[id]);
                
cs_set_user_team(player_id[id], CS_TEAM_SPECTATOR);
                
                
Check_Spec_Slots();
            }
        }
        case 
2:
        {
            
server_cmd("kick #%i ^"%s^""get_user_userid(player_id[id]), afk_kick_reason);
        }
    }
}

public 
AutoCheck_Afk()
{
    if(!
get_pcvar_num(pcvar[CVAR_AUTOCHECK]))
        return;
    
    new 
players[32], numx;
    
get_players(playersnum);
    
    new 
actualtime get_systime();
    new 
playertime;
    
    for(new 
num i++)
    {
        
players[i];
        
        if(!
is_user_connected(x))
            return;
        
        if(
get_pcvar_num(pcvar[CVAR_AC_IMMUNITY]))
        {
            if((
get_user_flags(x) & ADMIN_IMMUNITY_FLAG))
                continue;
        }
        
        
playertime actualtime lastactive[x];
        
        new 
name[32];
        
get_user_name(xnamesizeof name 1);
        
        if(
playertime >= get_pcvar_num(pcvar[CVAR_AC_MAXAFKTIME]) && cs_get_user_team(x) == CS_TEAM_CT || cs_get_user_team(x) == CS_TEAM_T)
        {
            switch(
get_pcvar_num(pcvar[CVAR_AC_PUNISH]))
            {
                case 
1:
                {
                    
user_silentkill(x);
                    
cs_set_user_team(xCS_TEAM_SPECTATOR);
                    
                    
client_print(0print_chat"%L"LANG_PLAYER"AFK_SPEC"PLUGIN_TAGnameget_pcvar_num(pcvar[CVAR_AC_MAXAFKTIME]));
                    
                    
Check_Spec_Slots();
                }
                case 
2:
                {
                    
server_cmd("kick #%i ^"%s^""get_user_userid(x), afk_kick_reason);
                    
                    
client_print(0print_chat"%L"LANG_PLAYER"AFK_KICK"PLUGIN_TAGnameget_pcvar_num(pcvar[CVAR_AC_MAXAFKTIME]));
                }
            }
        }
    }
}

public 
AutoCheck_Afk_Bomb()
{
    new 
players[32], numx;
    
get_players(playersnum"a");
    
    new 
actualtime get_systime();
    new 
playertime;
    
    for(new 
num i++)
    {
        
players[i];
        
        if(!
is_user_connected(x))
            return;
        
        
playertime actualtime lastactive[x];
        
        new 
name[32];
        
get_user_name(xnamesizeof name 1);
        
        if(
playertime >= get_pcvar_num(pcvar[CVAR_AC_BOMBTIME]) && == bomb_carrier)
        {
            
engclient_cmd(x"drop""weapon_c4");
            
            if(
num 2)
                return;
            
            new 
c4 engfunc(EngFunc_FindEntityByString, -1"classname""weapon_c4");
            if(!
c4)
                return;
            
            new 
c4_backpack pev(c4pev_owner);
            if(!
c4_backpack)
                return;
            
            new 
target random_t_player();
            
            
set_pev(c4_backpackpev_flagspev(c4_backpackpev_flags) | FL_ONGROUND);
            
dllfunc(DLLFunc_Touchc4_backpacktarget);
            
            
client_print(0print_chat"%L"LANG_PLAYER"AFK_BOMB_TRANSFER"PLUGIN_TAGname);
        }
        
    }
    
set_task(1.0"AutoCheck_Afk_Bomb");
}


public 
Check_Spec_Slots()
{
    new 
players[32], numx;
    
get_players(playersnum);
    
    new 
SpecNum;
    
    new 
actualtime get_systime();
    new 
playertime;
    
    for(new 
num i++)
    {
        
players[i];
        
        if(!
is_user_connected(x))
            continue;
        
        if(
get_pcvar_num(pcvar[CVAR_AC_IMMUNITY]))
        {
            if((
get_user_flags(x) & ADMIN_IMMUNITY_FLAG))
                continue;
        }
        
        if(
user_recording_demo[x])
            continue;
        
        
playertime actualtime lastactive[x];
        
        if(
cs_get_user_team(x) == CS_TEAM_SPECTATOR && playertime >= get_pcvar_num(pcvar[CVAR_AC_MAXAFKTIME]))
            ++
SpecNum;
    }
    if(
SpecNum MAX_AFK_SPECTATORS)
    {
        new 
rnd_player random_afk_spec_player();
        
        
server_cmd("kick #%i ^"%s^""get_user_userid(rnd_player), afk_kick_reason);
        
        
client_print(0print_chat"%L"LANG_PLAYER"AFK_KICK_RND"PLUGIN_TAG);
    }
}

public 
bomb_events()
{
    new 
arg[64], message[64], name[32], useridid
    
    
read_logargv(0argsizeof arg 1) ;
    
read_logargv(2messagesizeof message 1) ;
    
    
parse_loguser(argnamesizeof name 1userid);
    
id find_player("k"userid);
    
    if(
equali(message,"Spawned_With_The_Bomb") || equali(message,"Got_The_Bomb"))
    {
        
bomb_carrier id
    }
    else if(
equali(message"Planted_The_Bomb") || equali(message,"Dropped_The_Bomb"))
    {
        
bomb_carrier 0;
    }
    
    return 
1;
}

public 
random_t_player()
{
    new 
players[32], num;
    
get_players(playersnum"ae""TERRORIST");
    
    return 
players[random_num(0num)];
}

public 
random_afk_spec_player()
{
    new 
players[32], numplayerwhoshortest 999999;
    
get_players(playersnum"e""SPECTATORS");
    
    new 
actualtime get_systime();
    new 
playertime;
    
    for(new 
num i++)
    {
        
player players[i];
        
        if(!
is_user_connected(player))
            continue;
        
        if(
user_recording_demo[player])
            continue;
        
        
playertime actualtime lastactive[player];
        
        if(
shortest playertime)
        {
            
shortest playertime;
            
who player;
        }
    }
    return 
who;
}

public 
client_command(id)
{
    new 
arg[13];
    
read_argv(0arg sizeof arg 1);
    
    if(
equali(arg"record"))
        
user_recording_demo[id] = true;
    
    else if(
equali(arg"stopdemo"))
        
user_recording_demo[id] = false;
}

public 
client_disconnect(id)
    
user_recording_demo[id] = false;

public 
client_connect(id)
{
    if(!
get_pcvar_num(pcvar[CVAR_FS_KICK_SPEC]))
        return;
    
    if(
get_maxplayers() == get_playersnum(0))
    {
        new 
players[32], num
        get_players
(playersnum"e""SPECTATORS");
        
        if(
num 1)
        {
            new 
rnd_player random_afk_spec_player();
            
            
server_cmd("kick #%i ^"%s^""get_user_userid(rnd_player), afk_kick_reason);
        }
    }
    
player_id[id] = 0;
}
public 
client_putinserver(id)
{
    if(!
get_pcvar_num(pcvar[CVAR_UNASSIGNED_CHECK]))
        return;
    
    
set_task(get_pcvar_float(pcvar[CVAR_UNASSIGNED_TIME]), "UnassignedPlayer_Check"id);
}

public 
UnassignedPlayer_Check(id)
{
    if(!
is_user_connected(id))
        return;
    
    if(
cs_get_user_team(id) == CS_TEAM_UNASSIGNED)
    {
        
server_cmd("kick #%i ^"%s^""get_user_userid(id), afk_kick_reason);
    }


Last edited by BrainDead; 01-17-2021 at 09:59.
BrainDead is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 16:04.


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