diff --git a/PlaytimeReward/scripting/PlaytimeReward.sp b/PlaytimeReward/scripting/PlaytimeReward.sp new file mode 100644 index 00000000..395e04dd --- /dev/null +++ b/PlaytimeReward/scripting/PlaytimeReward.sp @@ -0,0 +1,66 @@ +#pragma semicolon 1 + +#include + +#include "loghelper.inc" + +#pragma newdecls required + +int g_iClientConnectionTime[MAXPLAYERS + 1]; + +public Plugin myinfo = +{ + name = "Play Time Reward", + author = "Obus", + description = "Handle ranking rewards", + version = "0.0.1" +}; + +public void OnPluginStart() +{ + CreateTimer(30.0, Timer_CheckConnectionTime, _, TIMER_REPEAT); + + HookEvent("player_disconnect", EventHook_PlayerDisconnect, EventHookMode_Post); +} + +public void OnPluginEnd() +{ + UnhookEvent("player_disconnect", EventHook_PlayerDisconnect, EventHookMode_Post); +} + +public void OnMapStart() +{ + GetTeams(); +} + +public void EventHook_PlayerDisconnect(Event hEvent, const char[] sName, bool bDontBroadcast) +{ + bool bIsBot = view_as(hEvent.GetInt("bot")); + + if (bIsBot) + return; + + int client = GetClientOfUserId(hEvent.GetInt("userid")); + + g_iClientConnectionTime[client] = 0; +} + +public Action Timer_CheckConnectionTime(Handle hThis) +{ + for (int i = 1; i <= MaxClients; i++) + { + if (!IsValidClient(i)) + continue; + + if ((g_iClientConnectionTime[i] += 30) >= 1200) + { + LogPlayerEvent(i, "triggered", "staying_server"); + g_iClientConnectionTime[i] -= 1200; + } + } +} + +stock bool IsValidClient(int client) +{ + return (client >= 1 && client <= MaxClients && IsClientInGame(client) && !IsFakeClient(client)); +} \ No newline at end of file