Untitled

 avatar
unknown
c_cpp
6 months ago
2.0 kB
5
Indexable

#include <sdkhooks>
#include <sourcemod>
#include <liquidHelpers>

ConVar TimeUntilKicked;
float TimeToKick;
float LastActionTimer[MAXPLAYERS + 1];
char FilePath[PLATFORM_MAX_PATH];

public void OnPluginStart()
{
    TimeUntilKicked = CreateConVar("sm_afk_kick_time", "1200.0", "Time to kick AFK player");
    TimeUntilKicked.AddChangeHook(ChangeHook);
    GetCvars();
    for (int i = 1; i <= MaxClients; i++)
    {
        LastActionTimer[i] = GetEngineTime();
    }
    BuildPath(Path_SM, FilePath, sizeof(FilePath), "logs/afk_kicks.log");
}

public void OnMapStart()
{
    CreateTimer(1.0, AFKCheck, _, TIMER_FLAG_NO_MAPCHANGE | TIMER_REPEAT);
}

public void OnClientPostAdminCheck(int client)
{
    LastActionTimer[client] = GetEngineTime();
}

void ChangeHook(ConVar convar, const char[] oldValue, const char[] newValue)
{
    GetCvars();
}

void GetCvars()
{
    TimeToKick = TimeUntilKicked.FloatValue;
}

public Action OnPlayerRunCmd(int client, int& buttons, int& impulse, float vel[3], float angles[3], int& weapon, int& subtype, int& cmdnum, int& tickcount, int& seed, int mouse[2]) {

    if (buttons)
        LastActionTimer[client] = GetEngineTime();
    return Plugin_Continue;
}

public Action AFKCheck(Handle timer)
{
    float currentTime = GetEngineTime();
    for (int i = 1; i <= MaxClients; i++)
    {
        if (!IsValidClient(i) || !IsPlayerAlive(i))
            continue;

        if (IsFakeClient(i))
            continue;

        if (currentTime - LastActionTimer[i] > TimeToKick)
        {
            LogKick(i);
            KickClient(i, "AFK for %im", RoundToNearest(TimeToKick / 60));
        }
    }
    return Plugin_Continue;
}

void LogKick(int client)
{
    File file = OpenFile(FilePath, "a");
    if (file)
    {
        WriteFileLine(file, "Kicked player %N for being AFK for more than %0.1f seconds", client, TimeToKick);
        FlushFile(file);
        delete file;
    }
    else
    {
        LogError("Log file not found!");

    }
}
Editor is loading...
Leave a Comment