Untitled
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