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;
|
|
} |