376 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			376 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
| /**
 | |
|  * -----------------------------------------------------
 | |
|  * File        calladmin_usermanager.sp
 | |
|  * Authors     dordnung, Impact
 | |
|  * License     GPLv3
 | |
|  * Web         https://dordnung.de, http://gugyclan.eu
 | |
|  * -----------------------------------------------------
 | |
|  *
 | |
|  * CallAdmin
 | |
|  * Copyright (C) 2013-2018 dordnung, Impact
 | |
|  *
 | |
|  * This program is free software: you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License as published by
 | |
|  * the Free Software Foundation, either version 3 of the License, or
 | |
|  * any later version.
 | |
|  *
 | |
|  * This program is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  * GNU General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU General Public License
 | |
|  * along with this program. If not, see <http://www.gnu.org/licenses/>
 | |
|  */
 | |
| 
 | |
| 
 | |
| #include <sourcemod>
 | |
| #include "include/autoexecconfig"
 | |
| #include "include/calladmin"
 | |
| #include "include/calladmin_stocks"
 | |
| 
 | |
| #include <basecomm>
 | |
| 
 | |
| #pragma semicolon 1
 | |
| #pragma newdecls required
 | |
| 
 | |
| 
 | |
| // Version cvar
 | |
| ConVar g_hVersion;
 | |
| 
 | |
| // Cvar to blacklist muted players
 | |
| ConVar g_hBlacklistMuted;
 | |
| bool g_bBlacklistMuted;
 | |
| 
 | |
| // Cvar to blacklist gagged players
 | |
| ConVar g_hBlacklistGagged;
 | |
| bool g_bBlacklistGagged;
 | |
| 
 | |
| // Cvar to show information
 | |
| ConVar g_hShowInformation;
 | |
| bool g_bShowInformation;
 | |
| 
 | |
| 
 | |
| 
 | |
| // Is immune or on blacklist?
 | |
| bool g_bClientOnBlacklist[MAXPLAYERS + 1];
 | |
| bool g_bClientImmune[MAXPLAYERS + 1];
 | |
| 
 | |
| 
 | |
| public Plugin myinfo =
 | |
| {
 | |
| 	name = "CallAdmin UserManager",
 | |
| 	author = "dordnung, Impact",
 | |
| 	description = "The usermanagermodule for CallAdmin",
 | |
| 	version = CALLADMIN_VERSION,
 | |
| 	url = "https://dordnung.de"
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| /*
 | |
| 
 | |
| Sourcemod
 | |
| 
 | |
| */
 | |
| 
 | |
| 
 | |
| // Register the library
 | |
| public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
 | |
| {
 | |
| 	RegPluginLibrary("calladmin_usermanager");
 | |
| 
 | |
| 
 | |
| 	// Api
 | |
| 	CreateNative("CallAdmin_SetClientOnBlacklist", Native_SetClientOnBlacklist);
 | |
| 	CreateNative("CallAdmin_SetClientImmune", Native_SetClientImmune);
 | |
| 	CreateNative("CallAdmin_IsClientOnBlacklist", Native_IsClientOnBlacklist);
 | |
| 	CreateNative("CallAdmin_IsClientImmune", Native_IsClientImmune);
 | |
| 
 | |
| 
 | |
| 	return APLRes_Success;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| public void OnConfigsExecuted()
 | |
| {
 | |
| 	g_bBlacklistMuted = g_hBlacklistMuted.BoolValue;
 | |
| 	g_bBlacklistGagged = g_hBlacklistGagged.BoolValue;
 | |
| 	g_bShowInformation = g_hShowInformation.BoolValue;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| // Plugin Started
 | |
| public void OnPluginStart()
 | |
| {
 | |
| 	// Create config and load it
 | |
| 	AutoExecConfig_SetFile("plugin.calladmin_usermanager");
 | |
| 
 | |
| 
 | |
| 	g_hVersion         = AutoExecConfig_CreateConVar("sm_calladmin_usermanager_version", CALLADMIN_VERSION, "Plugin version", FCVAR_NOTIFY|FCVAR_DONTRECORD);
 | |
| 	g_hBlacklistMuted  = AutoExecConfig_CreateConVar("sm_calladmin_blacklist_muted", "0",  "Disallow muted players to report a player", FCVAR_NONE);
 | |
| 	g_hBlacklistGagged = AutoExecConfig_CreateConVar("sm_calladmin_blacklist_gagged", "1",  "Disallow gagged players to report a player", FCVAR_NONE);
 | |
| 	g_hShowInformation = AutoExecConfig_CreateConVar("sm_calladmin_show_information", "0",  "Show status to player on mute/gag", FCVAR_NONE);
 | |
| 
 | |
| 
 | |
| 	AutoExecConfig(true, "plugin.CallAdminUsermanager");
 | |
| 	AutoExecConfig_CleanFile();
 | |
| 
 | |
| 
 | |
| 	// Load translation
 | |
| 	LoadTranslations("calladmin_usermanager.phrases");
 | |
| 
 | |
| 
 | |
| 	// Set Version
 | |
| 	g_hVersion.SetString(CALLADMIN_VERSION);
 | |
| 
 | |
| 	// Hook changes
 | |
| 	g_hVersion.AddChangeHook(OnCvarChanged);
 | |
| 	g_hBlacklistMuted.AddChangeHook(OnCvarChanged);
 | |
| 	g_hBlacklistGagged.AddChangeHook(OnCvarChanged);
 | |
| 	g_hShowInformation.AddChangeHook(OnCvarChanged);
 | |
| }
 | |
| 
 | |
| 
 | |
| // Convar Changed
 | |
| public void OnCvarChanged(Handle cvar, const char[] oldValue, const char[] newValue)
 | |
| {
 | |
| 	if (cvar == g_hBlacklistMuted)
 | |
| 	{
 | |
| 		g_bBlacklistMuted = g_hBlacklistMuted.BoolValue;
 | |
| 
 | |
| 		// Check basecomm
 | |
| 		if (!LibraryExists("basecomm") && g_bBlacklistMuted)
 | |
| 		{
 | |
| 			CallAdmin_LogMessage("Couldn't find Plugin basecomm.smx. But you've activated mute blacklisting!");
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	else if (cvar == g_hBlacklistGagged)
 | |
| 	{
 | |
| 		g_bBlacklistGagged = g_hBlacklistGagged.BoolValue;
 | |
| 
 | |
| 		// Check basecomm
 | |
| 		if (!LibraryExists("basecomm") && g_hBlacklistGagged)
 | |
| 		{
 | |
| 			CallAdmin_LogMessage("Couldn't find Plugin basecomm.smx. But you've activated gag blacklisting!");
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	else if (cvar == g_hShowInformation)
 | |
| 	{
 | |
| 		g_bShowInformation = g_hShowInformation.BoolValue;
 | |
| 	}
 | |
| 
 | |
| 	else if (cvar == g_hVersion)
 | |
| 	{
 | |
| 		g_hVersion.SetString(CALLADMIN_VERSION);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| public void OnAllPluginsLoaded()
 | |
| {
 | |
| 	if (!LibraryExists("basecomm") && (g_bBlacklistMuted || g_bBlacklistGagged))
 | |
| 	{
 | |
| 		CallAdmin_LogMessage("Couldn't find Plugin basecomm.smx. But you've activated mute or gag blacklisting!");
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| /*
 | |
| 
 | |
| NATIVES
 | |
| 
 | |
| */
 | |
| 
 | |
| 
 | |
| // Set client on blacklist
 | |
| public int Native_SetClientOnBlacklist(Handle plugin, int numParams)
 | |
| {
 | |
| 	int client = GetNativeCell(1);
 | |
| 
 | |
| 	if (IsClientValid(client))
 | |
| 	{
 | |
| 		g_bClientOnBlacklist[client] = GetNativeCell(2);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| // Set Client immune
 | |
| public int Native_SetClientImmune(Handle plugin, int numParams)
 | |
| {
 | |
| 	int client = GetNativeCell(1);
 | |
| 
 | |
| 	if (IsClientValid(client))
 | |
| 	{
 | |
| 		g_bClientImmune[client] = GetNativeCell(2);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| // Checks if the client is on the blacklist
 | |
| public int Native_IsClientOnBlacklist(Handle plugin, int numParams)
 | |
| {
 | |
| 	int client = GetNativeCell(1);
 | |
| 
 | |
| 	if (IsClientValid(client))
 | |
| 	{
 | |
| 		return g_bClientOnBlacklist[client];
 | |
| 	}
 | |
| 
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| 
 | |
| // Checks if the client is immune
 | |
| public int Native_IsClientImmune(Handle plugin, int numParams)
 | |
| {
 | |
| 	int client = GetNativeCell(1);
 | |
| 
 | |
| 	if (IsClientValid(client))
 | |
| 	{
 | |
| 		return g_bClientImmune[client];
 | |
| 	}
 | |
| 
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| /*
 | |
| 
 | |
| CallAdmin
 | |
| 
 | |
| */
 | |
| 
 | |
| // Client open the menu
 | |
| public Action CallAdmin_OnDrawMenu(int client)
 | |
| {
 | |
| 	// Client is on blacklist, so don't open menu
 | |
| 	if (g_bClientOnBlacklist[client])
 | |
| 	{
 | |
| 		// Info text
 | |
| 		PrintToChat(client, "\x04[CALLADMIN]\x03 %t", "CallAdmin_ClientOnBlacklist");
 | |
| 
 | |
| 		return Plugin_Handled;
 | |
| 	}
 | |
| 
 | |
| 	return Plugin_Continue;
 | |
| }
 | |
| 
 | |
| 
 | |
| // Client will drawn to menu
 | |
| public Action CallAdmin_OnDrawTarget(int client, int target)
 | |
| {
 | |
| 	// Target is immune, so don't draw it
 | |
| 	if (g_bClientImmune[target])
 | |
| 	{
 | |
| 		return Plugin_Handled;
 | |
| 	}
 | |
| 
 | |
| 	return Plugin_Continue;
 | |
| }
 | |
| 
 | |
| 
 | |
| // Client will report
 | |
| public Action CallAdmin_OnReportPre(int client, int target, const char[] reason)
 | |
| {
 | |
| 	// Target is immune, so don't report
 | |
| 	if (g_bClientImmune[target])
 | |
| 	{
 | |
| 		// Info text
 | |
| 		if (client != REPORTER_CONSOLE)
 | |
| 		{
 | |
| 			PrintToChat(client, "\x04[CALLADMIN]\x03 %t", "CallAdmin_TargetImmune", target);
 | |
| 		}
 | |
| 
 | |
| 		return Plugin_Handled;
 | |
| 	}
 | |
| 
 | |
| 	// Client is on blacklist so don't allow report
 | |
| 	if (client != REPORTER_CONSOLE && g_bClientOnBlacklist[client])
 | |
| 	{
 | |
| 		// Info text
 | |
| 		PrintToChat(client, "\x04[CALLADMIN]\x03 %t", "CallAdmin_ClientOnBlacklist");
 | |
| 
 | |
| 		return Plugin_Handled;
 | |
| 	}
 | |
| 
 | |
| 	return Plugin_Continue;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| /*
 | |
| 
 | |
| Basecomm
 | |
| 
 | |
| */
 | |
| 
 | |
| 
 | |
| // Client get muted
 | |
| public void BaseComm_OnClientMute(int client, bool muteState)
 | |
| {
 | |
| 	if (g_bBlacklistMuted && IsClientValid(client))
 | |
| 	{
 | |
| 		// Show information
 | |
| 		if (g_bShowInformation && muteState != g_bClientOnBlacklist[client])
 | |
| 		{
 | |
| 			if (muteState)
 | |
| 			{
 | |
| 				PrintToChat(client, "\x04[CALLADMIN]\x03 %t", "CallAdmin_ClientBlacklistMute");
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				PrintToChat(client, "\x04[CALLADMIN]\x03 %t", "CallAdmin_ClientBlacklistRemove");
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		// Set client on blacklist
 | |
| 		g_bClientOnBlacklist[client] = muteState;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| // Client get gagged
 | |
| public void BaseComm_OnClientGag(int client, bool gagState)
 | |
| {
 | |
| 	if (g_bBlacklistGagged && IsClientValid(client))
 | |
| 	{
 | |
| 		// Show information
 | |
| 		if (g_bShowInformation && g_bClientOnBlacklist[client] != gagState)
 | |
| 		{
 | |
| 			if (gagState)
 | |
| 			{
 | |
| 				PrintToChat(client, "\x04[CALLADMIN]\x03 %t", "CallAdmin_ClientBlacklistGag");
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				PrintToChat(client, "\x04[CALLADMIN]\x03 %t", "CallAdmin_ClientBlacklistRemove");
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		// Set client on blacklist
 | |
| 		g_bClientOnBlacklist[client] = gagState;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| public void OnClientDisconnect_Post(int client)
 | |
| {
 | |
| 	g_bClientOnBlacklist[client] = false;
 | |
| 	g_bClientImmune[client] = false;
 | |
| } |