515 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			515 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
| //====================================================================================================
 | |
| //
 | |
| // Name: [entWatch] Restrictions
 | |
| // Author: zaCade & Prometheum
 | |
| // Description: Handle the restrictions of [entWatch]
 | |
| //
 | |
| //====================================================================================================
 | |
| #include <multicolors>
 | |
| 
 | |
| #pragma newdecls required
 | |
| 
 | |
| #include <sourcemod>
 | |
| #include <clientprefs>
 | |
| #include <entWatch_core>
 | |
| #include <entWatch_helpers>
 | |
| 
 | |
| /* FORWARDS */
 | |
| Handle g_hFwd_OnClientRestricted;
 | |
| Handle g_hFwd_OnClientUnrestricted;
 | |
| 
 | |
| /* COOKIES */
 | |
| Handle g_hCookie_RestrictIssued;
 | |
| Handle g_hCookie_RestrictExpire;
 | |
| Handle g_hCookie_RestrictLength;
 | |
| 
 | |
| /* BOOLEANS */
 | |
| bool g_bRestrictedTemp[MAXPLAYERS+1];
 | |
| 
 | |
| /* INTERGERS */
 | |
| int g_iRestrictIssued[MAXPLAYERS+1];
 | |
| int g_iRestrictLength[MAXPLAYERS+1];
 | |
| int g_iRestrictExpire[MAXPLAYERS+1];
 | |
| 
 | |
| /* STRINGMAPS */
 | |
| StringMap g_hTrie_Storage;
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public Plugin myinfo =
 | |
| {
 | |
| 	name         = "[entWatch] Restrictions",
 | |
| 	author       = "zaCade & Prometheum",
 | |
| 	description  = "Handle the restrictions of [entWatch]",
 | |
| 	version      = "4.0.0"
 | |
| };
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public APLRes AskPluginLoad2(Handle hMyself, bool bLate, char[] sError, int errorSize)
 | |
| {
 | |
| 	CreateNative("EW_ClientRestrict",   Native_ClientRestrict);
 | |
| 	CreateNative("EW_ClientUnrestrict", Native_ClientUnrestrict);
 | |
| 	CreateNative("EW_ClientRestricted", Native_ClientRestricted);
 | |
| 
 | |
| 	RegPluginLibrary("entWatch-restrictions");
 | |
| 	return APLRes_Success;
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public void OnPluginStart()
 | |
| {
 | |
| 	LoadTranslations("common.phrases");
 | |
| 	LoadTranslations("entWatch.restrictions.phrases");
 | |
| 
 | |
| 	g_hFwd_OnClientRestricted   = CreateGlobalForward("EW_OnClientRestricted",   ET_Ignore, Param_Cell, Param_Cell, Param_Cell);
 | |
| 	g_hFwd_OnClientUnrestricted = CreateGlobalForward("EW_OnClientUnrestricted", ET_Ignore, Param_Cell, Param_Cell);
 | |
| 
 | |
| 	g_hCookie_RestrictIssued = RegClientCookie("EW_RestrictIssued", "", CookieAccess_Private);
 | |
| 	g_hCookie_RestrictExpire = RegClientCookie("EW_RestrictExpire", "", CookieAccess_Private);
 | |
| 	g_hCookie_RestrictLength = RegClientCookie("EW_RestrictLength", "", CookieAccess_Private);
 | |
| 
 | |
| 	g_hTrie_Storage = new StringMap();
 | |
| 
 | |
| 	RegAdminCmd("sm_eban",   Command_ClientRestrict,   ADMFLAG_BAN);
 | |
| 	RegAdminCmd("sm_eunban", Command_ClientUnrestrict, ADMFLAG_UNBAN);
 | |
| 
 | |
| 	RegConsoleCmd("sm_restrictions", Command_DisplayRestrictions);
 | |
| 	RegConsoleCmd("sm_ebanlist", Command_DisplayRestrictions);
 | |
| 	RegConsoleCmd("sm_status",       Command_DisplayStatus);
 | |
| 
 | |
| 	for (int client = 1; client <= MaxClients; client++)
 | |
| 	{
 | |
| 		if (IsClientConnected(client))
 | |
| 			OnClientPutInServer(client);
 | |
| 
 | |
| 		if (AreClientCookiesCached(client))
 | |
| 			OnClientCookiesCached(client);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public void OnMapStart()
 | |
| {
 | |
| 	g_hTrie_Storage.Clear();
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public void OnClientPutInServer(int client)
 | |
| {
 | |
| 	char sAddress[32];
 | |
| 	GetClientIP(client, sAddress, sizeof(sAddress));
 | |
| 
 | |
| 	bool bRestrictedTemp;
 | |
| 	if (g_hTrie_Storage.GetValue(sAddress, bRestrictedTemp))
 | |
| 	{
 | |
| 		g_bRestrictedTemp[client] = bRestrictedTemp;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public void OnClientCookiesCached(int client)
 | |
| {
 | |
| 	g_iRestrictIssued[client] = GetClientCookieInt(client, g_hCookie_RestrictIssued);
 | |
| 	g_iRestrictExpire[client] = GetClientCookieInt(client, g_hCookie_RestrictExpire);
 | |
| 	g_iRestrictLength[client] = GetClientCookieInt(client, g_hCookie_RestrictLength);
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public void OnClientDisconnect(int client)
 | |
| {
 | |
| 	if (g_bRestrictedTemp[client])
 | |
| 	{
 | |
| 		char sAddress[32];
 | |
| 		GetClientIP(client, sAddress, sizeof(sAddress));
 | |
| 
 | |
| 		g_hTrie_Storage.SetArray(sAddress, g_bRestrictedTemp[client], true);
 | |
| 	}
 | |
| 
 | |
| 	g_bRestrictedTemp[client] = false;
 | |
| 	g_iRestrictIssued[client] = 0;
 | |
| 	g_iRestrictExpire[client] = 0;
 | |
| 	g_iRestrictLength[client] = 0;
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public Action Command_ClientRestrict(int client, int args)
 | |
| {
 | |
| 	if (!GetCmdArgs())
 | |
| 	{
 | |
| 		CReplyToCommand(client, "\x07%s[entWatch] \x07%sUsage: sm_eban <#userid/name> [duration]", "E01B5D", "F16767");
 | |
| 		return Plugin_Handled;
 | |
| 	}
 | |
| 
 | |
| 	char sArguments[2][32];
 | |
| 	GetCmdArg(1, sArguments[0], sizeof(sArguments[]));
 | |
| 	GetCmdArg(2, sArguments[1], sizeof(sArguments[]));
 | |
| 
 | |
| 	int target;
 | |
| 	if ((target = FindTarget(client, sArguments[0], true)) == -1)
 | |
| 		return Plugin_Handled;
 | |
| 
 | |
| 	if (GetCmdArgs() >= 2)
 | |
| 	{
 | |
| 		int length = StringToInt(sArguments[1]);
 | |
| 
 | |
| 		if (ClientRestrict(client, target, length))
 | |
| 		{
 | |
| 			if (length)
 | |
| 			{
 | |
| 				CPrintToChatAll("\x07%s[entWatch] \x07%s%N\x07%s restricted \x07%s%N\x07%s for \x07%s%d\x07%s minutes.", "E01B5D", "EDEDED", client, "F16767", "EDEDED", target, "F16767", "EDEDED", length, "F16767");
 | |
| 				LogAction(client, target, "%L restricted %L for %d minutes.", client, target, length);
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				CPrintToChatAll("\x07%s[entWatch] \x07%s%N\x07%s restricted \x07%s%N\x07%s permanently.", "E01B5D", "EDEDED", client, "F16767", "EDEDED", target, "F16767");
 | |
| 				LogAction(client, target, "%L restricted %L permanently.", client, target);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		if (ClientRestrict(client, target, -1))
 | |
| 		{
 | |
| 			CPrintToChatAll("\x07%s[entWatch] \x07%s%N\x07%s restricted \x07%s%N\x07%s temporarily.", "E01B5D", "EDEDED", client, "F16767", "EDEDED", target, "F16767");
 | |
| 			LogAction(client, target, "%L restricted %L temporarily.", client, target);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return Plugin_Handled;
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public Action Command_ClientUnrestrict(int client, int args)
 | |
| {
 | |
| 	if (!GetCmdArgs())
 | |
| 	{
 | |
| 		CReplyToCommand(client, "\x07%s[entWatch] \x07%sUsage: sm_eunban <#userid/name>", "E01B5D", "F16767");
 | |
| 		return Plugin_Handled;
 | |
| 	}
 | |
| 
 | |
| 	char sArguments[1][32];
 | |
| 	GetCmdArg(1, sArguments[0], sizeof(sArguments[]));
 | |
| 
 | |
| 	int target;
 | |
| 	if ((target = FindTarget(client, sArguments[0], true)) == -1)
 | |
| 		return Plugin_Handled;
 | |
| 
 | |
| 	if (ClientUnrestrict(client, target))
 | |
| 	{
 | |
| 		CPrintToChatAll("\x07%s[entWatch] \x07%s%N\x07%s unrestricted \x07%s%N\x07%s.", "E01B5D", "EDEDED", client, "F16767", "EDEDED", target, "F16767");
 | |
| 		LogAction(client, target, "%L unrestricted %L.", client, target);
 | |
| 	}
 | |
| 
 | |
| 	return Plugin_Handled;
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public Action Command_DisplayRestrictions(int client, int args)
 | |
| {
 | |
| 	char aBuf[1024];
 | |
| 	char aBuf2[MAX_NAME_LENGTH];
 | |
| 
 | |
| 	for (int i = 1; i <= MaxClients; i++)
 | |
| 	{
 | |
| 		if (IsClientInGame(i) && !IsFakeClient(i))
 | |
| 		{
 | |
| 			if (ClientRestricted(i))
 | |
| 			{
 | |
| 				GetClientName(i, aBuf2, sizeof(aBuf2));
 | |
| 				StrCat(aBuf, sizeof(aBuf), aBuf2);
 | |
| 				StrCat(aBuf, sizeof(aBuf), ", ");
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	if (strlen(aBuf))
 | |
| 	{
 | |
| 		aBuf[strlen(aBuf) - 2] = 0;
 | |
| 		CReplyToCommand(client, "\x07%s[entWatch] \x07%sCurrently restricted clients: \x07%s%s", "E01B5D", "F16767", "EDEDED", aBuf);
 | |
| 	}
 | |
| 	else
 | |
| 		CReplyToCommand(client, "\x07%s[entWatch] \x07%sCurrently restricted clients: \x07%snone", "E01B5D", "F16767", "EDEDED");
 | |
| 
 | |
| 	return Plugin_Handled;
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public Action Command_DisplayStatus(int client, int args)
 | |
| {
 | |
| 	if (CheckCommandAccess(client, "", ADMFLAG_BAN) && GetCmdArgs())
 | |
| 	{
 | |
| 		char sArguments[1][32];
 | |
| 		GetCmdArg(1, sArguments[0], sizeof(sArguments[]));
 | |
| 
 | |
| 		int target;
 | |
| 		if ((target = FindTarget(client, sArguments[0], true)) == -1)
 | |
| 			return Plugin_Handled;
 | |
| 
 | |
| 		if (!AreClientCookiesCached(target))
 | |
| 		{
 | |
| 			CReplyToCommand(client, "\x07%s[entWatch] \x07%s%N\x07%s their cookies are still loading.", "E01B5D", "EDEDED", target, "F16767");
 | |
| 			return Plugin_Handled;
 | |
| 		}
 | |
| 		else if (g_bRestrictedTemp[target])
 | |
| 		{
 | |
| 			CReplyToCommand(client, "\x07%s[entWatch] \x07%s%N\x07%s is currently temporarily restricted.", "E01B5D", "EDEDED", target, "F16767");
 | |
| 			return Plugin_Handled;
 | |
| 		}
 | |
| 		else if (g_iRestrictIssued[target] && g_iRestrictExpire[target] == 0)
 | |
| 		{
 | |
| 			CReplyToCommand(client, "\x07%s[entWatch] \x07%s%N\x07%s is currently permanently restricted.", "E01B5D", "EDEDED", target, "F16767");
 | |
| 			return Plugin_Handled;
 | |
| 		}
 | |
| 		else if (g_iRestrictIssued[target] && g_iRestrictExpire[target] >= GetTime())
 | |
| 		{
 | |
| 			char sTimeRemaining[64];
 | |
| 			int iTimeRemaining = g_iRestrictExpire[target] - GetTime();
 | |
| 
 | |
| 			int iDays    = (iTimeRemaining / 86400);
 | |
| 			int iHours   = (iTimeRemaining / 3600) % 24;
 | |
| 			int iMinutes = (iTimeRemaining / 60) % 60;
 | |
| 			int iSeconds = (iTimeRemaining % 60);
 | |
| 
 | |
| 			if (iDays)
 | |
| 				Format(sTimeRemaining, sizeof(sTimeRemaining), "%d Days %d Hours %d Minutes %d Seconds", iDays, iHours, iMinutes, iSeconds);
 | |
| 			else if (iHours)
 | |
| 				Format(sTimeRemaining, sizeof(sTimeRemaining), "%d Hours %d Minutes %d Seconds", iHours, iMinutes, iSeconds);
 | |
| 			else if (iMinutes)
 | |
| 				Format(sTimeRemaining, sizeof(sTimeRemaining), "%d Minutes %d Seconds", iMinutes, iSeconds);
 | |
| 			else
 | |
| 				Format(sTimeRemaining, sizeof(sTimeRemaining), "%d Seconds", iSeconds);
 | |
| 
 | |
| 			CReplyToCommand(client, "\x07%s[entWatch] \x07%s%N\x07%s is currently restricted for another \x07%s%s\x07%s.", "E01B5D", "EDEDED", target, "F16767", "EDEDED", sTimeRemaining, "F16767");
 | |
| 			return Plugin_Handled;
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			CReplyToCommand(client, "\x07%s[entWatch] \x07%s%N\x07%s is currently not restricted.", "E01B5D", "EDEDED", target, "F16767");
 | |
| 			return Plugin_Handled;
 | |
| 		}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		if (!AreClientCookiesCached(client))
 | |
| 		{
 | |
| 			CReplyToCommand(client, "\x07%s[entWatch] \x07%sYour cookies are still loading.", "E01B5D", "F16767");
 | |
| 			return Plugin_Handled;
 | |
| 		}
 | |
| 		else if (g_bRestrictedTemp[client])
 | |
| 		{
 | |
| 			CReplyToCommand(client, "\x07%s[entWatch] \x07%sYou are currently temporarily restricted.", "E01B5D", "F16767");
 | |
| 			return Plugin_Handled;
 | |
| 		}
 | |
| 		else if (g_iRestrictIssued[client] && g_iRestrictExpire[client] == 0)
 | |
| 		{
 | |
| 			CReplyToCommand(client, "\x07%s[entWatch] \x07%sYou are currently permanently restricted.", "E01B5D", "F16767");
 | |
| 			return Plugin_Handled;
 | |
| 		}
 | |
| 		else if (g_iRestrictIssued[client] && g_iRestrictExpire[client] >= GetTime())
 | |
| 		{
 | |
| 			char sTimeRemaining[64];
 | |
| 			int iTimeRemaining = g_iRestrictExpire[client] - GetTime();
 | |
| 
 | |
| 			int iDays    = (iTimeRemaining / 86400);
 | |
| 			int iHours   = (iTimeRemaining / 3600) % 24;
 | |
| 			int iMinutes = (iTimeRemaining / 60) % 60;
 | |
| 			int iSeconds = (iTimeRemaining % 60);
 | |
| 
 | |
| 			if (iDays)
 | |
| 				Format(sTimeRemaining, sizeof(sTimeRemaining), "%d Days %d Hours %d Minutes %d Seconds", iDays, iHours, iMinutes, iSeconds);
 | |
| 			else if (iHours)
 | |
| 				Format(sTimeRemaining, sizeof(sTimeRemaining), "%d Hours %d Minutes %d Seconds", iHours, iMinutes, iSeconds);
 | |
| 			else if (iMinutes)
 | |
| 				Format(sTimeRemaining, sizeof(sTimeRemaining), "%d Minutes %d Seconds", iMinutes, iSeconds);
 | |
| 			else
 | |
| 				Format(sTimeRemaining, sizeof(sTimeRemaining), "%d Seconds", iSeconds);
 | |
| 
 | |
| 			CReplyToCommand(client, "\x07%s[entWatch] \x07%sYou are currently restricted for another \x07%s%s\x07%s.", "E01B5D", "F16767", "EDEDED", sTimeRemaining, "F16767");
 | |
| 			return Plugin_Handled;
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			CReplyToCommand(client, "\x07%s[entWatch] \x07%sYou are currently not restricted.", "E01B5D", "F16767");
 | |
| 			return Plugin_Handled;
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public Action EW_OnClientItemCanPickup(int client, int index)
 | |
| {
 | |
| 	return ClientRestricted(client)?Plugin_Handled:Plugin_Continue;
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public Action EW_OnClientItemCanActivate(int client, int index)
 | |
| {
 | |
| 	return ClientRestricted(client)?Plugin_Handled:Plugin_Continue;
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| stock bool ClientRestrict(int client, int target, int length)
 | |
| {
 | |
| 	if (!Client_IsValid(client) || !Client_IsValid(target) || !AreClientCookiesCached(target) || ClientRestricted(target))
 | |
| 		return false;
 | |
| 
 | |
| 	if (length == -1)
 | |
| 	{
 | |
| 		g_bRestrictedTemp[target] = true;
 | |
| 	}
 | |
| 	else if (length == 0)
 | |
| 	{
 | |
| 		g_bRestrictedTemp[target] = false;
 | |
| 		g_iRestrictIssued[target] = GetTime();
 | |
| 		g_iRestrictExpire[target] = 0;
 | |
| 		g_iRestrictLength[target] = 0;
 | |
| 
 | |
| 		SetClientCookieInt(target, g_hCookie_RestrictIssued, GetTime());
 | |
| 		SetClientCookieInt(target, g_hCookie_RestrictExpire, 0);
 | |
| 		SetClientCookieInt(target, g_hCookie_RestrictLength, 0);
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		g_bRestrictedTemp[target] = false;
 | |
| 		g_iRestrictIssued[target] = GetTime();
 | |
| 		g_iRestrictExpire[target] = GetTime() + (length * 60);
 | |
| 		g_iRestrictLength[target] = length;
 | |
| 
 | |
| 		SetClientCookieInt(target, g_hCookie_RestrictIssued, GetTime());
 | |
| 		SetClientCookieInt(target, g_hCookie_RestrictExpire, GetTime() + (length * 60));
 | |
| 		SetClientCookieInt(target, g_hCookie_RestrictLength, length);
 | |
| 	}
 | |
| 
 | |
| 	Call_StartForward(g_hFwd_OnClientRestricted);
 | |
| 	Call_PushCell(client);
 | |
| 	Call_PushCell(target);
 | |
| 	Call_PushCell(length);
 | |
| 	Call_Finish();
 | |
| 
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| stock bool ClientUnrestrict(int client, int target)
 | |
| {
 | |
| 	if (!Client_IsValid(client) || !Client_IsValid(target) || !AreClientCookiesCached(target) || !ClientRestricted(target))
 | |
| 		return false;
 | |
| 
 | |
| 	g_bRestrictedTemp[target] = false;
 | |
| 	g_iRestrictIssued[target] = 0;
 | |
| 	g_iRestrictExpire[target] = 0;
 | |
| 	g_iRestrictLength[target] = 0;
 | |
| 
 | |
| 	SetClientCookieInt(target, g_hCookie_RestrictIssued, 0);
 | |
| 	SetClientCookieInt(target, g_hCookie_RestrictExpire, 0);
 | |
| 	SetClientCookieInt(target, g_hCookie_RestrictLength, 0);
 | |
| 
 | |
| 	Call_StartForward(g_hFwd_OnClientUnrestricted);
 | |
| 	Call_PushCell(client);
 | |
| 	Call_PushCell(target);
 | |
| 	Call_Finish();
 | |
| 
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| stock bool ClientRestricted(int client)
 | |
| {
 | |
| 	if (!Client_IsValid(client))
 | |
| 		return false;
 | |
| 
 | |
| 	//Block them when loading cookies..
 | |
| 	if (!AreClientCookiesCached(client))
 | |
| 		return true;
 | |
| 
 | |
| 	//Temporary restriction.
 | |
| 	if (g_bRestrictedTemp[client])
 | |
| 		return true;
 | |
| 
 | |
| 	//Permanent restriction.
 | |
| 	if (g_iRestrictIssued[client] && g_iRestrictExpire[client] == 0)
 | |
| 		return true;
 | |
| 
 | |
| 	//Normal restriction.
 | |
| 	if (g_iRestrictIssued[client] && g_iRestrictExpire[client] >= GetTime())
 | |
| 		return true;
 | |
| 
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public int Native_ClientRestrict(Handle hPlugin, int numParams)
 | |
| {
 | |
| 	return ClientRestrict(GetNativeCell(1), GetNativeCell(2), GetNativeCell(3));
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public int Native_ClientUnrestrict(Handle hPlugin, int numParams)
 | |
| {
 | |
| 	return ClientUnrestrict(GetNativeCell(1), GetNativeCell(2));
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public int Native_ClientRestricted(Handle hPlugin, int numParams)
 | |
| {
 | |
| 	return ClientRestricted(GetNativeCell(1));
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| stock void SetClientCookieInt(int client, Handle hCookie, int value)
 | |
| {
 | |
| 	char sValue[32];
 | |
| 	IntToString(value, sValue, sizeof(sValue));
 | |
| 
 | |
| 	SetClientCookie(client, hCookie, sValue);
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| stock int GetClientCookieInt(int client, Handle hCookie)
 | |
| {
 | |
| 	char sValue[32];
 | |
| 	GetClientCookie(client, hCookie, sValue, sizeof(sValue));
 | |
| 
 | |
| 	return StringToInt(sValue);
 | |
| } |