154 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
| #pragma semicolon 1
 | |
| 
 | |
| #include <sourcemod>
 | |
| #include <basecomm>
 | |
| #include <NoSteamDetection>
 | |
| 
 | |
| #pragma newdecls required
 | |
| 
 | |
| /* CONVARS */
 | |
| ConVar g_hCvar_BlockAdmin;
 | |
| ConVar g_hCvar_BlockVoice;
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public Plugin myinfo =
 | |
| {
 | |
| 	name         = "NoSteamManager",
 | |
| 	author       = "zaCade",
 | |
| 	description  = "Manage No-Steam clients, denying admin access, ect.",
 | |
| 	version      = "1.0.0"
 | |
| };
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public void OnPluginStart()
 | |
| {
 | |
| 	g_hCvar_BlockAdmin = CreateConVar("sm_nosteam_block_admin", "1", "Should people marked as nosteam be blocked from admin?", FCVAR_NONE, true, 0.0, true, 1.0);
 | |
| 	g_hCvar_BlockVoice = CreateConVar("sm_nosteam_block_voice", "1", "Should people marked as nosteam be blocked from voice?", FCVAR_NONE, true, 0.0, true, 1.0);
 | |
| 
 | |
| 	AddMultiTargetFilter("@steam", Filter_Steam, "Steam Players", false);
 | |
| 	AddMultiTargetFilter("@nosteam", Filter_NoSteam, "No-Steam Players", false);
 | |
| 
 | |
| 	RegConsoleCmd("sm_nosteam", Command_DisplaySteamStats, "Shows the number of Steam and No-Steam players");
 | |
| 	RegConsoleCmd("sm_steam", Command_DisplaySteamStats, "Shows the number of Steam and No-Steam players");
 | |
| 
 | |
| 	AutoExecConfig();
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public void OnPluginEnd()
 | |
| {
 | |
| 	RemoveMultiTargetFilter("@steam", Filter_Steam);
 | |
| 	RemoveMultiTargetFilter("@nosteam", Filter_NoSteam);
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public Action Command_DisplaySteamStats(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(IsClientProfileValidated(i) && !IsClientProfileValid(i))
 | |
| 			{
 | |
| 				GetClientName(i, aBuf2, sizeof(aBuf2));
 | |
| 				StrCat(aBuf, sizeof(aBuf), aBuf2);
 | |
| 				StrCat(aBuf, sizeof(aBuf), ", ");
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	if(strlen(aBuf))
 | |
| 	{
 | |
| 		aBuf[strlen(aBuf) - 2] = 0;
 | |
| 		ReplyToCommand(client, "[SM] No-Steam clients online: %s", aBuf);
 | |
| 	}
 | |
| 	else
 | |
| 		ReplyToCommand(client, "[SM] No-Steam clients online: none");
 | |
| 
 | |
| 	return Plugin_Handled;
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public bool Filter_Steam(const char[] sPattern, Handle hClients)
 | |
| {
 | |
| 	for(int i = 1; i <= MaxClients; i++)
 | |
| 	{
 | |
| 		if(IsClientInGame(i) && !IsFakeClient(i))
 | |
| 		{
 | |
| 			if(IsClientProfileValidated(i) && IsClientProfileValid(i))
 | |
| 				PushArrayCell(hClients, i);
 | |
| 		}
 | |
| 	}
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public bool Filter_NoSteam(const char[] sPattern, Handle hClients)
 | |
| {
 | |
| 	for(int i = 1; i <= MaxClients; i++)
 | |
| 	{
 | |
| 		if(IsClientInGame(i) && !IsFakeClient(i))
 | |
| 		{
 | |
| 			if(IsClientProfileValidated(i) && !IsClientProfileValid(i))
 | |
| 				PushArrayCell(hClients, i);
 | |
| 		}
 | |
| 	}
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public Action OnClientPreAdminCheck(int client)
 | |
| {
 | |
| 	if(!g_hCvar_BlockAdmin.BoolValue)
 | |
| 		return Plugin_Continue;
 | |
| 
 | |
| 	if(IsFakeClient(client) || IsClientSourceTV(client))
 | |
| 		return Plugin_Continue;
 | |
| 
 | |
| 	if(IsClientProfileValidated(client) && !IsClientProfileValid(client))
 | |
| 	{
 | |
| 		LogMessage("%L did not have a valid profile, denying admin.", client);
 | |
| 		NotifyPostAdminCheck(client);
 | |
| 
 | |
| 		return Plugin_Handled;
 | |
| 	}
 | |
| 
 | |
| 	return Plugin_Continue;
 | |
| }
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| // Purpose:
 | |
| //----------------------------------------------------------------------------------------------------
 | |
| public void OnClientPostAdminCheck(int client)
 | |
| {
 | |
| 	if(!g_hCvar_BlockVoice.BoolValue)
 | |
| 		return;
 | |
| 
 | |
| 	if(IsFakeClient(client) || IsClientSourceTV(client))
 | |
| 		return;
 | |
| 
 | |
| 	if(IsClientProfileValidated(client) && !IsClientProfileValid(client))
 | |
| 	{
 | |
| 		LogMessage("%L did not have a valid profile, muting client.", client);
 | |
| 		BaseComm_SetClientMute(client, true);
 | |
| 
 | |
| 		return;
 | |
| 	}
 | |
| } |