#pragma semicolon 1
#pragma newdecls required
#include <regex>
static const char PLUGIN_NAME[] = "Nickname AdBlock",
PLUGIN_VERSION[] = "0.3.0";
bool bEnable, bMode;
char Logfile[PLATFORM_MAX_PATH];
Regex g_Regex;
public Plugin myinfo =
{
name = PLUGIN_NAME,
author = "FeedBlack (fixed by Grey83)",
description = "Kicks user if his nickname contains advertisement.",
version = PLUGIN_VERSION,
url = "https://steamcommunity.com/id/feedblackg44",
};
public void OnPluginStart()
{
CreateConVar("sm_nnadblock_version", PLUGIN_VERSION, PLUGIN_NAME, FCVAR_DONTRECORD|FCVAR_NOTIFY|FCVAR_REPLICATED);
ConVar CVar;
(CVar = CreateConVar("sm_nnadblock_enabled", "1", "1 - Enabled, 0 - Disabled.", _, true, _, true, 1.0)).AddChangeHook(CVarChanged_Enable);
bEnable = CVar.BoolValue;
(CVar = CreateConVar("sm_nnadblock_mode", "0", "0 - check players every round, 1 - check players when they connect to the server.", _, true, _, true, 1.0)).AddChangeHook(CVarChanged_Mode);
bMode = CVar.BoolValue;
HookEvent("teamplay_round_start", OnRoundStart, EventHookMode_PostNoCopy);
RegConsoleCmd("sm_kickunallowed", KickUnallowedCommand);
RegConsoleCmd("sm_kickunallow", KickUnallowedCommand);
BuildPath(Path_SM, Logfile, sizeof(Logfile), "logs/nnadblock.log");
g_Regex = CompileRegex("\\.(ru|net|ua|tf|com|org|su|cash|trade|co)");
AutoExecConfig(true, "nnadblock");
}
public void CVarChanged_Enable(ConVar CVar, const char[] oldValue, const char[] newValue)
{
bEnable = CVar.BoolValue;
}
public void CVarChanged_Mode(ConVar CVar, const char[] oldValue, const char[] newValue)
{
bMode = CVar.BoolValue;
}
public void OnClientConnected(int client)
{
if(bMode) KickUnallowed(client);
}
public void OnRoundStart(Event event, const char[] name, bool dontBroadcast)
{
if(bEnable && !bMode) for(int i = 1; i <= MaxClients; i++) KickUnallowed(i);
}
public Action KickUnallowedCommand(int client, int args)
{
if(bEnable)
{
int num;
for(int i = 1; i <= MaxClients; i++) if(KickUnallowed(i)) num++;
PrintToConsole(client, "%i clients has been kicked.", num);
}
else PrintToConsole(client, "Nickname AdBlock is Disabled!");
}
stock bool KickUnallowed(int client)
{
if(!IsClientInGame(client) || IsFakeClient(client))
return false;
static char szUsername[MAX_NAME_LENGTH], szUserID[MAX_TARGET_LENGTH];
GetClientName(client, szUsername, sizeof(szUsername));
if(MatchRegex(g_Regex, szUsername) < 1)
return false;
GetClientAuthId(client, AuthId_Steam3, szUserID, sizeof(szUserID));
KickClient(client, "Unallowed Nickname");
PrintToChatAll("%s has been kicked due to unallowed nickname!", szUsername);
LogToFileEx(Logfile, "%s has been kicked due to unallowed nickname! Client id: %s", szUsername, szUserID);
return true;
}