/*
* BIG tanks to "aNNakin"
* Big tanks to "Cheesy Peteza"
* 2 Plugins autokick
* Strongly Recommandate to FULLY servers
*/
#include <amxmodx>
#include <cstrike>
#define PLUGIN "Anti spec,afk"
#define VERSION "9.0"
#define AUTHOR "Prior of Sion"
#define ACCESS ADMIN_RESERVATION
#define MIN_AFK_TIME 30
#define WARNING_TIME 15
#define CHECK_FREQ 5
new const g_Reason[] = "Nem foglalj plusz slotot a spectatorban.";
new const g_Teams[2][32] = { "Terrorist", "Counter-Terrorist" }
new toggle_plugin, toggle_mode, toggle_time, toggle_announce, toggle_evoy;
new g_Count[33],g_msgsaytext;
new g_oldangles[33][3]
new g_afktime[33]
new bool:g_spawned[33] = {true, ...}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("TeamInfo","event_teaminfo", "a");
toggle_plugin = register_cvar("detectspectators", "1"); //Ezeket ne piszkald
toggle_mode = register_cvar("detectspectators_mode", "1"); //Ezeket ne piszkald
toggle_time = register_cvar("detectspectators_time", "60"); //Mennyi idejig maradhat a Spectatorba egy jatekos
toggle_evoy = register_cvar("detectspectators_admins", "0"); //Adminokat kirúgja -e azaz az adminok immunisok legyenek
toggle_announce = register_cvar("detectspectators_announe", "1");
g_msgsaytext = get_user_msgid("SayText");
register_cvar("afk_version", "1.0b", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY)
register_cvar("mp_afktime", "90") //Mennyi másodpecig AFKolhat az illető
register_cvar("mp_afkminplayers", "8") //Mennyi játékos kell ahoz hogy működjön ez az AFK rendszer.
set_task(float(CHECK_FREQ),"checkPlayers",_,_,_,"b")
register_event("ResetHUD", "playerSpawned", "be")
}
public event_teaminfo()
{
if(get_pcvar_num(toggle_plugin) != 1)
return PLUGIN_CONTINUE;
new index = read_data(1);
new team[ 2 ];
read_data(2, team, sizeof team - 1);
if(team[0] == 'S')
{
if(g_Count[ index ] >= 1)
g_Count[ index ] = 0;
print(index, "[AFK Kicker] Te nem vagy admin, es mar %d masodperce AFKoltal ezert a rendszer kirugott!", get_pcvar_num( toggle_time ) );
set_task(1.0, "count_time", index+123, _, _, "b");
} else {
g_Count[ index ] = 0;
remove_task( index+123 );
}
return PLUGIN_CONTINUE;
}
public count_time(task)
{
new index = task - 123;
if( !is_user_connected( index ))
return 0;
if( ( get_user_flags( index ) & ACCESS ) && get_pcvar_num( toggle_evoy ) == 0)
return 0;
g_Count[ index ]++;
if( get_timer( index ) >= get_pcvar_num( toggle_time ))
{
switch( get_pcvar_num( toggle_mode ) )
{
case 1:
{
new i = random_num( 1, 2 );
cs_set_user_team( index, i == 1 ? CS_TEAM_T : CS_TEAM_CT );
print( index, "[AFK Kirugo] Te %s csapatba lettel iranyitva!", i == 1 ? g_Teams[ 0 ] : g_Teams[ 1 ] );
}
case 2:
{
server_cmd( "kick #%d ^"%s^"", get_user_userid( index ), g_Reason );
if( get_pcvar_num( toggle_announce ) == 1 )
print(0, "[AFK Kirugo] %s teged kihuztak, mivel %d masodpercig AFK-oltal.!", get_pcvar_num( toggle_time ) );
}
}
remove_task( index+ 123 );
g_Count[ index ] = 0;
}
return 0;
}
public get_timer( index ) return g_Count[ index ];
public client_putinserver( id ) g_Count[ id ] = 0;
public client_disconnect( id )
{
g_Count[ id ] = 0;
remove_task(id+123);
}
print( id, const message[], {Float,Sql,Result,_}:... )
{
new Buffer[ 128 ],Buffer2[ 128 ];
new players[ 32 ], index, num, i;
formatex( Buffer2, sizeof Buffer2 - 1, "%s",message );
vformat( Buffer, sizeof Buffer - 1, Buffer2, 3 );
get_players( players, num, "ch" );
if( id )
{
if( !is_user_connected( id ))
return 0;
message_begin( MSG_ONE, g_msgsaytext, _, id );
write_byte( id );
write_string( Buffer );
message_end();
} else {
for( i = 0; i < num;i++ )
{
index = players[ i ];
if( !is_user_connected( index ))
continue;
message_begin( MSG_ONE, g_msgsaytext, _, index );
write_byte( index );
write_string( Buffer );
message_end();
}
}
return PLUGIN_HANDLED
}
public checkPlayers() {
for (new i = 1; i <= get_maxplayers(); i++) {
if (is_user_alive(i) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned[i]) {
new newangle[3]
get_user_origin(i, newangle)
if ( newangle[0] == g_oldangles[i][0] && newangle[1] == g_oldangles[i][1] && newangle[2] == g_oldangles[i][2] ) {
g_afktime[i] += CHECK_FREQ
check_afktime(i)
} else {
g_oldangles[i][0] = newangle[0]
g_oldangles[i][1] = newangle[1]
g_oldangles[i][2] = newangle[2]
g_afktime[i] = 0
}
}
}
return PLUGIN_HANDLED
}
check_afktime(id) {
new numplayers = get_playersnum()
new minplayers = get_cvar_num("mp_afkminplayers")
if (numplayers >= minplayers) {
new maxafktime = get_cvar_num("mp_afktime")
if (maxafktime < MIN_AFK_TIME) {
log_amx("cvar mp_afktime %i is too low. Minimum value is %i.", maxafktime, MIN_AFK_TIME)
maxafktime = MIN_AFK_TIME
set_cvar_num("mp_afktime", MIN_AFK_TIME)
}
if ( maxafktime-WARNING_TIME <= g_afktime[id] < maxafktime) {
new timeleft = maxafktime - g_afktime[id]
client_print(id, print_chat, "[AFK Kirugo] Ha nem mozdulsz meg: %i masodpercig atleszel iranyitva,vagy pedig kirugva.", timeleft)
} else if (g_afktime[id] > maxafktime) {
new name[32]
get_user_name(id, name, 31)
client_print(0, print_chat, "[AFK Kicker] %s teged kihuztak, mivel %i masodpercig AFK-oltal!", name, maxafktime)
log_amx("%s kirugtak mert nem mozdult meg: %i masodpercig.", name, maxafktime)
server_cmd("kick #%d ^"[AFK Kicker] You was pulled out for being AFK longer than %i seconds!^"", get_user_userid(id), maxafktime)
}
}
}
public playerSpawned(id) {
g_spawned[id] = false
new sid[1]
sid[0] = id
set_task(0.75, "delayedSpawn",_, sid, 1)
return PLUGIN_HANDLED
}
public delayedSpawn(sid[]) {
get_user_origin(sid[0], g_oldangles[sid[0]])
g_spawned[sid[0]] = true
return 1;
}