Problemas con el afk_manager
#1
Buenas tardes!
Antes de ayer probe este plugin que me habían recomendado de acá.. el tema es el siguiente ni bien empieza la ronda me manda a todos de specs y después los kickea.. pensé que era algún tipo de problema con algún otro plugin pero sinceramente no estaría encontrando la solución que dicen que puede ser ?
PD:no tengo el sma.
Responder
#2
Si no tenes el .sma no podemos hacer nada, saludos

Responder
#3
A mi me pasa exactamente lo mismo, cambia de mapa y los que se conecta los mata y los manda como espectador.
aca esta el sma que vino con el plugin



Código PHP:
/* 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[] = "Fuiste expulsado por estar Afk por un largo tiempo!";

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"); // (Predeterminado: 1) - Autocheck para jugadores afk
pcvar[CVAR_FASTMACHINE] = register_cvar("afk_ac_fastmachine""0"); // (Predeterminado: 0) - Si este cvar está configurado en 1, los jugadores serán verificados cada segundo ( 1.0 )
pcvar[CVAR_AC_TIME] = register_cvar("afk_ac_time""20"); // (Predeterminado: 20) - El intervalo de tiempo, para verificar afk players
pcvar[CVAR_AC_IMMUNITY] = register_cvar("afk_ac_immunity""1"); // si este cvar se establece en 1, los administradores no se verifican
pcvar[CVAR_AC_MAXAFKTIME] = register_cvar("afk_ac_maxafktime""80"); // - Tiempo en segundos, cuánto puede estar afk un jugador
pcvar[CVAR_AC_BOMBTIME] = register_cvar("afk_ac_bombtime""20");// Tiempo después de que el jugador afk arroje la bomba.
pcvar[CVAR_AC_PUNISH] = register_cvar("afk_ac_punish_type""1"); // 1 = Mover a la especificación. / 2 = Kick
pcvar[CVAR_AFK_MENU] = register_cvar("afk_menu""2"); //activar / desactivar el menú Afk. ( 0 Desactivado) ( 1 Todos los jugadores) ( Solo 2 administradores)
pcvar[CVAR_UNASSIGNED_CHECK] = register_cvar("afk_unassigned_check""1"); // Si un jugador permanece más de "x" segundos en el equipo no asignado, será expulsado
pcvar[CVAR_UNASSIGNED_TIME] = register_cvar("afk_unassigned_time""20");
pcvar[CVAR_FS_KICK_SPEC] = register_cvar("afk_fs_kick_spec""1"); // ( Valor predeterminado: 1): si el servidor está lleno y un jugador se está conectando, un jugador de especificaciones será expulsado.

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);
}

Responder
#4
(25/06/2020, 05:56 PM)cahervar escribió: A mi me pasa exactamente lo mismo, cambia de mapa y los que se conecta los mata y los manda como espectador.
aca esta el sma que vino con el plugin


Código PHP:
/* 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[] = "Fuiste expulsado por estar Afk por un largo tiempo!";

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"); // (Predeterminado: 1) - Autocheck para jugadores afk
 
pcvar[CVAR_FASTMACHINE] = register_cvar("afk_ac_fastmachine""0"); // (Predeterminado: 0) - Si este cvar está configurado en 1, los jugadores serán verificados cada segundo ( 1.0 )
 
pcvar[CVAR_AC_TIME] = register_cvar("afk_ac_time""20"); // (Predeterminado: 20) - El intervalo de tiempo, para verificar afk players
 
pcvar[CVAR_AC_IMMUNITY] = register_cvar("afk_ac_immunity""1"); // si este cvar se establece en 1, los administradores no se verifican
 
pcvar[CVAR_AC_MAXAFKTIME] = register_cvar("afk_ac_maxafktime""80"); // - Tiempo en segundos, cuánto puede estar afk un jugador
 
pcvar[CVAR_AC_BOMBTIME] = register_cvar("afk_ac_bombtime""20");// Tiempo después de que el jugador afk arroje la bomba.
 
pcvar[CVAR_AC_PUNISH] = register_cvar("afk_ac_punish_type""1"); // 1 = Mover a la especificación. / 2 = Kick
 
pcvar[CVAR_AFK_MENU] = register_cvar("afk_menu""2"); //activar / desactivar el menú Afk. ( 0 Desactivado) ( 1 Todos los jugadores) ( Solo 2 administradores)
 
pcvar[CVAR_UNASSIGNED_CHECK] = register_cvar("afk_unassigned_check""1"); // Si un jugador permanece más de "x" segundos en el equipo no asignado, será expulsado
 
pcvar[CVAR_UNASSIGNED_TIME] = register_cvar("afk_unassigned_time""20");
 
pcvar[CVAR_FS_KICK_SPEC] = register_cvar("afk_fs_kick_spec""1"); // ( Valor predeterminado: 1): si el servidor está lleno y un jugador se está conectando, un jugador de especificaciones será expulsado.
 
 
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);
 }


Si, por lo visto nadie sabe como solucionarlo
Responder
#5
(25/06/2020, 06:21 PM)Gstrigl escribió: Si, por lo visto nadie sabe como solucionarlo

Usa el [/php] Whatever
Responder
#6
(25/06/2020, 06:31 PM)Ricardo01 escribió: Usa el [/php]  Whatever
??
Responder
#7
No te ahogues en un vaso de agua con algo que no te anda, edita este a tu gusto que lo encontre en internet y anda perfecto


Código PHP:
#include <amxmodx>
#include <hamsandwich>

new const g_szPluginName[] = "AFK Kicker";
new const 
g_szPluginVers[] = "v1.0";
new const 
g_szPluginAuth[] = "Cheesy Peteza (EDIT: CSAxel)";

#pragma semicolon 1

#define MIN_AFK_TIME 30
#define WARNING_TIME 20
#define CHECK_FREQ 5

new g_oldangles[33][3];
new 
g_afktime[33];
new 
bool:g_spawned[33] = { true, ... };

new 
g_iMaxPlayers;

const 
TASK_CHECK 21050;

public 
plugin_init()
{
    
register_plugin(g_szPluginNameg_szPluginVersg_szPluginAuth);
    
register_cvar(g_szPluginNameg_szPluginVersFCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY);
    
    
RegisterHam(Ham_Spawn"player""Ham_PlayerSpawn_Post"true);
    
    
register_cvar("mp_afktime""90");
    
register_cvar("mp_afkminplayers""10");
    
    
g_iMaxPlayers get_maxplayers();
    
    
set_task(float(CHECK_FREQ), "CheckPlayers"TASK_CHECK__"b");
}

public 
CheckPlayers()
{
    static 
id;
    for (
id 1id <= g_iMaxPlayersid++)
    {
        if (!
is_user_alive(id))
            continue;
        
        if (
get_user_flags(id) & ADMIN_IMMUNITY)
            continue;
        
        if (
g_spawned[id])
        {
            static 
szAngles[3];
            
get_user_origin(idszAngles);

            if (
szAngles[0] == g_oldangles[id][0] && szAngles[1] == g_oldangles[id][1] && szAngles[2] == g_oldangles[id][2])
            {
                
g_afktime[id] += CHECK_FREQ;
                
CheckTime(id);
            }
            else
            {
                
g_oldangles[id][0] = szAngles[0];
                
g_oldangles[id][1] = szAngles[1];
                
g_oldangles[id][2] = szAngles[2];
                
g_afktime[id] = 0;
            }
        }
    }
    
    return 
PLUGIN_HANDLED;
}

CheckTime(id)
{
    static 
iPlayersNumiPlayersMin;
    
iPlayersNum get_playersnum();
    
iPlayersMin get_cvar_num("mp_afkminplayers");
                    
    if (
iPlayersNum >= iPlayersMin)
    {
        static 
iTimeMaxiTimeLeft;
        
iTimeMax get_cvar_num("mp_afktime");
        
        if (
iTimeMax MIN_AFK_TIME)
        {
            
iTimeMax MIN_AFK_TIME;
            
set_cvar_num("mp_afktime"MIN_AFK_TIME);
        }

        if ((
iTimeMax WARNING_TIME) <= g_afktime[id] < iTimeMax)
        {
            
iTimeLeft = (iTimeMax g_afktime[id]);
            
ChatColor(id"^x04[^x01TuVieja^x04]^x01 Tienes ^x03%i ^x01segundos para moverte sino serás expulsado."iTimeLeft);
        }
        else if (
g_afktime[id] > iTimeMax)
        {
            static 
szName[32];
            
get_user_name(idszNamecharsmax(szName));
            
ChatColor(0"^x04[^x01TuVieja^x04]^x01 El jugador ^x03%s ^x01fue expulsado por estar ^x04%i ^x01segundos inactivo."szNameiTimeMax);
            
server_cmd("kick #%d ^"Fuiste expulsado por estar más de %i segundos inactivo^""get_user_userid(id), iTimeMax);
        }
    }
}

public 
client_connect(id)
{
    
g_afktime[id] = 0;
    return 
PLUGIN_HANDLED;
}

public 
client_putinserver(id)
{
    
g_afktime[id] = 0;
    return 
PLUGIN_HANDLED;
}

public 
Ham_PlayerSpawn_Post(id)
{
    if (!
is_user_alive(id))
        return;
    
    
g_spawned[id] = false;
    
    static 
szID[1];
    
szID[0] = id;
    
    
set_task(0.75"delayedSpawn",_szIDsizeof(szID));
}

public 
delayedSpawn(szID[])
{
    
get_user_origin(szID[0], g_oldangles[szID[0]]);
    
g_spawned[szID[0]] = true;
    return 
PLUGIN_HANDLED;
}

stock ChatColor(id, const input[], any:...)
{
    static 
szMsg[191];
    
vformat(szMsg190input3);
    
    
message_begin(id MSG_ONE_UNRELIABLE MSG_BROADCASTget_user_msgid("SayText"), .player id);
    
write_byte(id id 33);
    
write_string(szMsg);
    
message_end();

Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)