#include <sourcemod>
#include <sdktools>
#include <regex>
new Handle:g_CEnabled = INVALID_HANDLE;
new Handle:g_NEnabled = INVALID_HANDLE;
new Handle:g_WhiteList = INVALID_HANDLE;
new Handle:g_Flags = INVALID_HANDLE;
new Handle:g_Msg = INVALID_HANDLE;
new Handle:g_IpRegex = INVALID_HANDLE;
public Plugin:myinfo = {
name = "Remove Ads",
author = "Zephyrus",
description = "Hirdetes tilto.",
version = "1.3",
url = "https://hlmod.hu"
};
public OnPluginStart()
{
g_CEnabled = CreateConVar("sm_ads_chat", "1");
g_NEnabled = CreateConVar("sm_ads_names", "1");
g_WhiteList = CreateConVar("sm_ads_whitelist", "");
g_Flags = CreateConVar("sm_ads_immunity", "b");
g_Msg = CreateConVar("sm_ads_chat_censoredmsg", "");
RegServerCmd("say", Command_Say);
RegServerCmd("sm_say", Command_Say);
RegServerCmd("ma_say", Command_Say);
AddCommandListener(Command_CSay, "say");
AddCommandListener(Command_CSay, "say_team");
HookEvent("player_connect", Event_PlayerConnect, EventHookMode_Pre);
g_IpRegex = CompileRegex("((?:[0-9]+){1,3}.(?:[0-9]+){1,3}.(?:[0-9]+){1,3}.(?:[0-9]+){1,3}(?::[0-9]+|)|(?:[a-z.-]+):(?:[0-9]+))");
}
public OnClientPutInServer(client)
{
if(!GetConVarBool(g_NEnabled))
return;
new String:name[64];
GetClientName(client, name, sizeof(name));
NameChange(client, name);
}
public NameChange(client, String:name[])
{
if(!IsValidEdict(client))
return;
if(!IsClientInGame(client))
return;
if(MatchRegex(g_IpRegex, name) > 0)
{
new String:newname[64];
strcopy(newname, sizeof(newname), name);
new String:ip[25];
GetRegexSubString(g_IpRegex, 0, ip, sizeof(ip));
ReplaceString(newname, sizeof(newname), ip, "");
SetClientInfo(client, "name", newname);
SetEntPropString(client, Prop_Data, "m_szNetname", newname);
}
}
public OnClientSettingsChanged(client)
{
if(!GetConVarBool(g_NEnabled))
return;
if(IsClientImmune(client))
return;
new String:name[64];
GetClientName(client, name, sizeof(name));
if(MatchIp(name))
{
NameChange(client, name);
}
}
public Action:Command_Say(args)
{
if(!GetConVarBool(g_CEnabled))
return Plugin_Continue;
new String:buffer[256];
GetCmdArgString(buffer, sizeof(buffer));
if(MatchIp(buffer))
{
return Plugin_Stop;
}
return Plugin_Continue;
}
public Action:Command_CSay(client, String:command[], args)
{
if(!GetConVarBool(g_CEnabled))
return Plugin_Continue;
if(client == 0)
return Plugin_Stop;
if(IsClientImmune(client))
return Plugin_Continue;
new String:buffer[256];
GetCmdArgString(buffer, sizeof(buffer));
if(MatchIp(buffer))
{
new String:censoredmsg[256];
GetConVarString(g_Msg, censoredmsg, sizeof(censoredmsg));
if(strcmp(censoredmsg, "")!=0)
{
new String:ip[25];
GetRegexSubString(g_IpRegex, 0, ip, sizeof(ip));
ReplaceString(command, 256, ip, censoredmsg);
return Plugin_Changed;
}
return Plugin_Stop;
}
return Plugin_Continue;
}
public Action:Event_PlayerConnect(Handle:event, const String:name[], bool:dontBroadcast)
{
if(!GetConVarBool(g_NEnabled))
return Plugin_Continue;
new String:sName[64];
GetEventString(event, "name", sName, 64);
if(MatchIp(sName))
{
new String:ip[25];
GetRegexSubString(g_IpRegex, 0, ip, sizeof(ip));
ReplaceString(sName, 64, ip, "");
SetEventString(event, "name", sName);
return Plugin_Changed;
}
return Plugin_Continue;
}
public bool:MatchIp(String:text[])
{
if(MatchRegex(g_IpRegex, text) > 0)
{
new String:ip[25];
GetRegexSubString(g_IpRegex, 0, ip, sizeof(ip));
new String:whitelist[4096];
GetConVarString(g_WhiteList, whitelist, sizeof(whitelist));
if(StrContains(whitelist, ip) != -1)
{
return false;
}
return true;
}
return false;
}
public bool:IsClientImmune(client)
{
if(client == 0 || client > MaxClients+1)
return false;
new String:flags[45];
GetConVarString(g_Flags, flags, sizeof(flags));
if(GetUserFlagBits(client) & ReadFlagString(flags))
{
return true;
}
return false;
}