#pragma semicolon 1
#include <sourcemod>
#include <cstrike>
#pragma newdecls required
public Plugin myinfo =
{
name = "No Tag/Nick Flood",
author = "AlexTheRegent & AlmazON",
description = "",
version = "1.0.0",
url = "http://hlmod.ru"
}
char g_szOldNick[MAXPLAYERS+1][MAX_NAME_LENGTH], g_szOldTag[MAXPLAYERS+1][12];
int g_iWarnNick[MAXPLAYERS+1], g_iWarnings[MAXPLAYERS+1];
int g_iMaxWarnNick, g_iMaxWarnings;
int g_iBanNick, g_iBanLength;
public void OnPluginStart()
{
ConVar cvar;
HookConVarChange(cvar = CreateConVar("sm_nonickflood_maxwarns", "3", "Сколько раз игрок может сменить ник за одно подключение.", _, true, 0.0), ChangeCvar_NickWarn);
g_iMaxWarnNick = cvar.IntValue;
HookConVarChange(cvar = CreateConVar("sm_nonickflood_banlen", "10", "Время бана в минутах: 0 - только кик, -1 - бан навсегда.", _, true, -1.0), ChangeCvar_NickBan);
g_iBanNick = cvar.IntValue;
HookConVarChange(cvar = CreateConVar("sm_notagflood_maxwarns", "3", "Сколько раз игрок может сменить тэг за одно подключение.", _, true, 0.0), ChangeCvar_TagWarn);
g_iMaxWarnings = cvar.IntValue;
HookConVarChange(cvar = CreateConVar("sm_notagflood_banlen", "10", "Время бана в минутах: 0 - только кик, -1 - бан навсегда.", _, true, -1.0), ChangeCvar_TagBan);
g_iBanLength = cvar.IntValue;
AutoExecConfig(true, "No_tag_flood");
}
public void ChangeCvar_NickWarn(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_iMaxWarnNick = convar.IntValue;
}
public void ChangeCvar_NickBan(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_iBanNick = convar.IntValue;
}
public void ChangeCvar_TagWarn(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_iMaxWarnings = convar.IntValue;
}
public void ChangeCvar_TagBan(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_iBanLength = convar.IntValue;
}
public void OnClientPostAdminCheck(int iClient)
{
GetClientName(iClient, g_szOldNick[iClient], sizeof(g_szOldNick[]));
g_iWarnNick[iClient] = g_iWarnings[iClient] = 0;
CS_GetClientClanTag(iClient, g_szOldTag[iClient], sizeof(g_szOldTag[]));
}
public void OnClientSettingsChanged(int iClient)
{
if (IsClientInGame(iClient)) {
char szBuffer[MAX_NAME_LENGTH];
GetClientName(iClient, szBuffer, sizeof(g_szOldNick[]));
if (strcmp(szBuffer, g_szOldNick[iClient])) {
if (++g_iWarnNick[iClient] < g_iMaxWarnNick) strcopy(g_szOldNick[iClient], sizeof(g_szOldNick[]), szBuffer);
else {
switch (g_iBanNick) {
case 0: ServerCommand("sm_kick #%d \"Сервер: Частая смена ника\"", GetClientUserId(iClient));
case -1: ServerCommand("sm_ban #%d 0 \"Вы забанены навсегда за частую смену ника\";sm_kick #%d \"Вы забанены навсегда за частую смену ника\"",
GetClientUserId(iClient), GetClientUserId(iClient));
default: ServerCommand("sm_ban #%d %d \"Частая смена ника (бан на %d минут)\";sm_kick #%d \"Частая смена ника (бан на %d минут)\"",
GetClientUserId(iClient), g_iBanLength, g_iBanLength, GetClientUserId(iClient), g_iBanLength);
}
}
}
CS_GetClientClanTag(iClient, szBuffer, sizeof(g_szOldTag[]));
if (strcmp(szBuffer, g_szOldTag[iClient])) {
if (++g_iWarnings[iClient] < g_iMaxWarnings) strcopy(g_szOldTag[iClient], sizeof(g_szOldTag[]), szBuffer);
else {
switch (g_iBanLength) {
case 0: ServerCommand("sm_kick #%d \"Сервер: Частая смена тега\"", GetClientUserId(iClient));
case -1: ServerCommand("sm_ban #%d 0 \"Вы забанены навсегда за частую смену тэгов\";sm_kick #%d \"Вы забанены навсегда за частую смену тэгов\"",
GetClientUserId(iClient), GetClientUserId(iClient));
default: ServerCommand("sm_ban #%d %d \"Частая смена тэга (бан на %d минут)\";sm_kick #%d \"Частая смена тэга (бан на %d минут)\"",
GetClientUserId(iClient), g_iBanLength, g_iBanLength, GetClientUserId(iClient), g_iBanLength);
}
}
}
}
}