79 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
#pragma semicolon 1
 | 
						|
 | 
						|
#include <sourcemod>
 | 
						|
 | 
						|
#include "loghelper.inc"
 | 
						|
 | 
						|
#pragma newdecls required
 | 
						|
 | 
						|
int g_iClientConnectionTime[MAXPLAYERS + 1];
 | 
						|
 | 
						|
public Plugin myinfo =
 | 
						|
{
 | 
						|
	name         = "PlaytimeReward",
 | 
						|
	author       = "Obus + Dogan",
 | 
						|
	description  = "reward players with points for playing on the server",
 | 
						|
	version      = "1.0.0"
 | 
						|
};
 | 
						|
 | 
						|
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<bool>(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;
 | 
						|
 | 
						|
		g_iClientConnectionTime[i] += 30;
 | 
						|
 | 
						|
		for (int iTime = 1800; iTime <= 36000; iTime += 1800)
 | 
						|
		{
 | 
						|
			if ((g_iClientConnectionTime[i] % 1800) == 0)
 | 
						|
			{
 | 
						|
				int iConnectionTimeClamped = g_iClientConnectionTime[i];
 | 
						|
 | 
						|
				if (iConnectionTimeClamped > 36000)
 | 
						|
					iConnectionTimeClamped = 36000;
 | 
						|
 | 
						|
				char sPlayerEvent[32];
 | 
						|
				Format(sPlayerEvent, sizeof(sPlayerEvent), "staying_server_%d", iConnectionTimeClamped / 60);
 | 
						|
 | 
						|
				LogPlayerEvent(i, "triggered", sPlayerEvent);
 | 
						|
				break;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
stock bool IsValidClient(int client)
 | 
						|
{
 | 
						|
	return (client >= 1 && client <= MaxClients && IsClientInGame(client) && !IsFakeClient(client));
 | 
						|
} |