Untested.
PHP Code:
#include <sourcemod>
#include <sdktools>
ArrayList g_RestrictedPatterns;
public OnPluginStart()
{
HookEvent("player_changename", Event_PlayerChangeName);
g_RestrictedPatterns = new ArrayList(ByteCountToCells(MAX_NAME_LENGTH));
}
public void OnMapStart()
{
g_RestrictedPatterns.Clear();
char path[PLATFORM_MAX_PATH];
BuildPath(Path_SM, path, sizeof(path), "configs/RestrictedNames.txt");
File file = OpenFile(path, "r");
if (file != null)
{
char buffer[MAX_NAME_LENGTH];
while (!file.EndOfFile() && file.ReadLine(buffer, sizeof(buffer)))
{
ReplaceString(buffer, sizeof(buffer), "\n", "");
g_RestrictedPatterns.PushString(buffer);
}
file.Close();
}
}
public OnClientPostAdminCheck(int client)
{
char clientName[MAX_NAME_LENGTH];
GetClientName(client, clientName, sizeof(clientName));
for (int i = 0; i < g_RestrictedPatterns.Length; i++)
{
char buffer[MAX_NAME_LENGTH];
g_RestrictedPatterns.GetString(i, buffer, sizeof(buffer));
if (StrContains(clientName, buffer) != -1)
{
RequestFrame(OnClientNameChange_Frame, GetClientUserId(client));
return;
}
}
}
public void Event_PlayerChangeName(Event event, const char[] name, bool dontBroadcast)
{
int clientId = event.GetInt("userid");
int client = GetClientOfUserId(clientId);
if (client)
{
char newName[MAX_NAME_LENGTH];
for (int i = 0; i < g_RestrictedPatterns.Length; i++)
{
char buffer[MAX_NAME_LENGTH];
g_RestrictedPatterns.GetString(i, buffer, sizeof(buffer));
if (StrContains(newName, buffer) != -1)
{
RequestFrame(OnClientNameChange_Frame, clientId);
return;
}
}
}
}
public void OnClientNameChange_Frame(any data)
{
int client = GetClientOfUserId(view_as<int>(data));
if (client)
{
char buffer[MAX_NAME_LENGTH];
Format(buffer, sizeof(buffer), "Player %d\0", client);
SetClientName(client, buffer);
}
}
__________________