Код за потвърждение: Избери целия код
/*
Plugin: Simple AFK Manager
Version: 2.3
© [gm-project.net] #Staff.
Support on alliedmods.net: http://forums.alliedmods.net/showthread.php?t=110536
Support on gm-project.net: http://gm-community.net/showthread.php?t=581
*/
/*
* It is FIXED version NOT original!
* Changes by Safety1st
*/
#include <amxmodx>
#include <fakemeta>
#include <colorprint>
#define PLUGIN "Simple AFK Manager"
#define VERSION "2.4"
#define AUTHOR "[gm-project.net] #Staff"
#define PREFIX "^1[^4Control-Game^1]"
#define OFFSET_LAST_MOVEMENT 124
new Float:g_spec_time[33]
new g_Reason, g_aTime, g_sTime, g_Report, g_Info, g_iTeam
new g_Immunity, g_showMsg
new g_afkCount[2], bool:gbNoCheckNow
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_cvar("sam_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY)
register_dictionary("sam.txt")
g_Reason = register_cvar("afk_kick_reason", "AFK")
g_aTime = register_cvar("afk_time", "150.0")
g_sTime = register_cvar("afk_spec_time", "300.0")
g_Report = register_cvar("afk_report", "2")
g_showMsg = register_cvar("afk_showmsg", "0")
g_Info = register_cvar("afk_info_time", "20.0")
g_Immunity = register_cvar("afk_immunity_flag", "а")
g_iTeam = register_cvar("afk_team", "2")
set_task(10.0, "checkAFK", _, _, _, "b")
register_event( "HLTV", "Event_NewRound", "a", "1=0", "2=0" )
}
public client_putinserver(id) {
g_spec_time[id] = 0.0
}
public Event_NewRound() {
gbNoCheckNow = true // avoid checking first 10 seconds after new round (formerly dead players should be able to move)
}
public checkAFK() {
static bAnnounce = false
new iPlayers[32], iCount, i, iPlayer
get_players( iPlayers, iCount, "ach" ) // skip bots and HLTV
if ( !iCount )
return
if (gbNoCheckNow) {
gbNoCheckNow = false
if (get_pcvar_num(g_showMsg))
bAnnounce = true
return
}
if (bAnnounce) {
ColorPrint(0, "%s %L", PREFIX, LANG_SERVER, "AFK_MSG", g_afkCount[1], g_afkCount[0])
bAnnounce = false
}
new Float:afk_time = get_pcvar_float(g_aTime)
new Float:afk_spec_time = get_pcvar_float(g_sTime)
new Float:afk_info_time = get_pcvar_float(g_Info)
new Float:cur_time, Float:last_activity
new iTeam = get_pcvar_num(g_iTeam)
g_afkCount[0] = 0
g_afkCount[1] = 0
new strFlag[20]
get_pcvar_string(g_Immunity, strFlag, 19)
new flag = read_flags(strFlag)
cur_time = get_gametime()
if (afk_time)
afk_time = cur_time - afk_time
if (afk_spec_time)
afk_spec_time = cur_time - afk_spec_time
if (afk_info_time)
afk_info_time = cur_time - afk_info_time
for ( i = 0, iUserTeam; i < iCount; i++ ) {
iPlayer = iPlayers[i]
iUserTeam = get_user_team(iPlayer)
if (get_user_flags(iPlayer) & flag || iUserTeam != iTeam)
continue
if (iUserTeam)
{
if (!is_user_alive(iPlayer) || !afk_time)
continue
g_spec_time[iPlayer] = 0.0
last_activity = get_pdata_float(iPlayer, OFFSET_LAST_MOVEMENT)
if (last_activity < afk_time)
kickAFK(iPlayer)
else
{
if (last_activity < afk_info_time) {
ColorPrint(iPlayer, "%s %L", PREFIX, LANG_PLAYER, "AFK_WARN", floatround(last_activity - afk_time))
g_afkCount[iUserTeam - 1]++
}
}
}
else
{
if (!afk_spec_time)
continue
if (!g_spec_time[iPlayer])
g_spec_time[iPlayer] = cur_time
else {
if (g_spec_time[iPlayer] < afk_spec_time )
kickAFK(iPlayer)
}
}
}
}
is_user_ingame(id) {
new szTeam[2]
get_user_team(id, szTeam, 1)
switch( szTeam[0] ) {
case 'T': return 1
case 'C': return 2
default : return 0
}
return 0
}
public kickAFK(id) {
new name[32], reason[128], report
if(get_user_team(id) != get_pcvar_num(g_iTeam))
return
get_user_name(id, name, 31)
get_pcvar_string(g_Reason, reason, 127)
report = get_pcvar_num(g_Report)
message_begin( MSG_ONE, SVC_DISCONNECT, _, id )
write_string( reason )
message_end( )
switch (report) {
case 2 : ColorPrint(0, "%s %L", PREFIX, LANG_SERVER, "AFK_KICK", name)
case 1 : {
new iPlayers[32], iCount, i, iPlayer
get_players( iPlayers, iCount, "ch" ) // skip bots and HLTV
if ( !iCount )
return
for ( i = 0; i < iCount; i++ ) {
iPlayer = iPlayers[i]
if (get_user_flags(iPlayer) & ADMIN_CHAT)
ColorPrint(iPlayer, "%s %L", PREFIX, LANG_PLAYER, "AFK_KICK", name)
}
}
}
}
/* Fedcomp is bot */