Запрет для смены ника более X раз для CSGO (Антиспам).

Yura7181

Участник
Сообщения
678
Реакции
594
Всем привет.

У меня есть плагин запрещающий смену клан тега более 3 раз (значение указывается в конфиге). Возможно его переписать так чтобы он запрещал так же через конфиг менять ник более 3 раз например. Полный запрет смены ника не нужен, потому что иногда админ сам переименовывает игрока имея веские причины.

Вот исходник плагина:
PHP:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <cstrike>

#define PLUGIN_VERSION "1.0.0.0"
public Plugin:myinfo =
{
    name         = "No Tag Flood",
    author         = "AlexTheRegent",
    description = "",
    version     = PLUGIN_VERSION,
    url         = ""
}

#pragma newdecls required
char    g_szOldTag[MAXPLAYERS+1][12];
int     g_iWarnings[MAXPLAYERS+1] = 0;
int     g_iMaxWarnings;
int     g_iBanLength;

public void OnPluginStart()
{
    CreateConVar("sm_notagflood_maxwarns",     "3",     "сколько раз игрок может сменить тэг за одно подключение",                     FCVAR_PLUGIN, true, 1.0);
    CreateConVar("sm_notagflood_banlen",     "10",     "время бана в минутах (0 - только кик, -1 (минус один) - бан навсегда)",     FCVAR_PLUGIN);
}

public void OnConfigsExecuted()
{
    g_iMaxWarnings     = FindConVar("sm_notagflood_maxwarns").IntValue;
    g_iBanLength     = FindConVar("sm_notagflood_banlen").IntValue;
}

public void OnClientPutInServer(int iClient)
{
    CS_GetClientClanTag(iClient, g_szOldTag[iClient], sizeof(g_szOldTag[]));
    g_iWarnings[iClient] = 0;
}

public void OnClientSettingsChanged(int iClient)
{
    if ( 0 < iClient && iClient <= MaxClients && IsClientInGame(iClient) ) {
        char szCurrentTag[12];
        CS_GetClientClanTag(iClient, szCurrentTag, sizeof(szCurrentTag));
        if ( strcmp(szCurrentTag, g_szOldTag[iClient], true) ) {
            if ( ++g_iWarnings[iClient] >= g_iMaxWarnings ) {
                if ( g_iBanLength > 0 ) {
                    ServerCommand("sm_ban #%d %d \"Частая смена тэга (бан на %d минут)\"", GetClientUserId(iClient), g_iBanLength, g_iBanLength);
                    ServerCommand("sm_kick #%d \"Частая смена тэга (бан на %d минут)\"", GetClientUserId(iClient), g_iBanLength);
                }
                else if ( g_iBanLength == -1 ) {
                    ServerCommand("sm_ban #%d 0 \"Вы забанены навсегда за частую смену тэгов\"", GetClientUserId(iClient));
                    ServerCommand("sm_kick #%d \"Вы забанены навсегда за частую смену тэгов\"", GetClientUserId(iClient));
                }
                else {
                    ServerCommand("sm_kick #%d \"Сервер: Частая смена тега\"", GetClientUserId(iClient));
                }
                return;
            }
            strcopy(g_szOldTag[iClient], sizeof(g_szOldTag[]), szCurrentTag);
        }
    }
}
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
То есть? Создать конфиг от плагина?
CreateConVar("sm_notagflood_banlen", "10", "время бана в минутах (0 - только кик, -1 (минус один) - бан навсегда)", FCVAR_PLUGIN);
После этой строчки добавь новую:
PHP:
AutoExecConfig(true, "No_tag_flood");
 

Yura7181

Участник
Сообщения
678
Реакции
594
То есть? Создать конфиг от плагина?После этой строчки добавь новую:
PHP:
AutoExecConfig(true, "No_tag_flood");

Добавил, но как со сменой ника быть (не более нескольких раз)? Этот плагин запрещает менять только тег.

PHP:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <cstrike>

#define PLUGIN_VERSION "1.0.0.0"
public Plugin:myinfo =
{
    name         = "No Tag Flood",
    author         = "AlexTheRegent",
    description = "",
    version     = PLUGIN_VERSION,
    url         = ""
}

#pragma newdecls required
char    g_szOldTag[MAXPLAYERS+1][12];
int     g_iWarnings[MAXPLAYERS+1] = 0;
int     g_iMaxWarnings;
int     g_iBanLength;

public void OnPluginStart()
{
    CreateConVar("sm_notagflood_maxwarns",     "3",     "сколько раз игрок может сменить тэг за одно подключение",                     FCVAR_PLUGIN, true, 1.0);
    CreateConVar("sm_notagflood_banlen",     "10",     "время бана в минутах (0 - только кик, -1 (минус один) - бан навсегда)",     FCVAR_PLUGIN);
    AutoExecConfig(true, "No_tag_flood");
}

public void OnConfigsExecuted()
{
    g_iMaxWarnings     = FindConVar("sm_notagflood_maxwarns").IntValue;
    g_iBanLength     = FindConVar("sm_notagflood_banlen").IntValue;
}

public void OnClientPutInServer(int iClient)
{
    CS_GetClientClanTag(iClient, g_szOldTag[iClient], sizeof(g_szOldTag[]));
    g_iWarnings[iClient] = 0;
}

public void OnClientSettingsChanged(int iClient)
{
    if ( 0 < iClient && iClient <= MaxClients && IsClientInGame(iClient) ) {
        char szCurrentTag[12];
        CS_GetClientClanTag(iClient, szCurrentTag, sizeof(szCurrentTag));
        if ( strcmp(szCurrentTag, g_szOldTag[iClient], true) ) {
            if ( ++g_iWarnings[iClient] >= g_iMaxWarnings ) {
                if ( g_iBanLength > 0 ) {
                    ServerCommand("sm_ban #%d %d \"Частая смена тэга (бан на %d минут)\"", GetClientUserId(iClient), g_iBanLength, g_iBanLength);
                    ServerCommand("sm_kick #%d \"Частая смена тэга (бан на %d минут)\"", GetClientUserId(iClient), g_iBanLength);
                }
                else if ( g_iBanLength == -1 ) {
                    ServerCommand("sm_ban #%d 0 \"Вы забанены навсегда за частую смену тэгов\"", GetClientUserId(iClient));
                    ServerCommand("sm_kick #%d \"Вы забанены навсегда за частую смену тэгов\"", GetClientUserId(iClient));
                }
                else {
                    ServerCommand("sm_kick #%d \"Сервер: Частая смена тега\"", GetClientUserId(iClient));
                }
                return;
            }
            strcopy(g_szOldTag[iClient], sizeof(g_szOldTag[]), szCurrentTag);
        }
    }
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
PHP:
#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);
				}
			}
		}
	}
}
 

Yura7181

Участник
Сообщения
678
Реакции
594
PHP:
#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);
                }
            }
        }
    }
}
Спасибо, буду проверять!
 

andreik

Участник
Сообщения
285
Реакции
53
Спасибо ! Все работает на ура ошибок нету баны прописываются в соурбанс (CSGO)
 

Dmitriy Mikliaev

Участник
Сообщения
185
Реакции
5
PHP:
#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);
                }
            }
        }
    }
}

Работает криво. После того, как забанило читера, у которого была автоматическая смена ников, следом банит еще 1-2 невиновных игроков. Дело было так, забанило этого читера с автосменой (на тот момент меня не было на сервере), дальше зашел на сервер Я и сразу выкинуло, мол я менял ники очень часто и сработало по опции забанить навсегда, вообще непонятно почему, ведь я даже не находился на сервере ни разу за день до этого момента. Следом еще одного, который также не был на сервере на тот момент, те также пытался зайти после блокировки читера и его также выкинуло сразу, перманентно.

Не знаю, может это совпадение, но у того читера перед ником был установлен символ, как и у меня (не в прямом смысле, символы разные), как только я его убрал из никнейма, на сервер сразу впустило и символ я вернул назад.

стоит квар sm_nonickflood_maxwarns "5"
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Сверху Снизу