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

Тема в разделе "Запросы", создана пользователем Yura7181, 9 авг 2016.

  1. Yura7181

    Yura7181

    Сообщения:
    460
    Симпатии:
    489
    Всем привет.

    У меня есть плагин запрещающий смену клан тега более 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_PLUGINtrue1.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(iClientg_szOldTag[iClient], sizeof(g_szOldTag[]));
        
    g_iWarnings[iClient] = 0;
    }

    public 
    void OnClientSettingsChanged(int iClient)
    {
        if ( 
    iClient && iClient <= MaxClients && IsClientInGame(iClient) ) {
            
    char szCurrentTag[12];
            
    CS_GetClientClanTag(iClientszCurrentTagsizeof(szCurrentTag));
            if ( 
    strcmp(szCurrentTagg_szOldTag[iClient], true) ) {
                if ( ++
    g_iWarnings[iClient] >= g_iMaxWarnings ) {
                    if ( 
    g_iBanLength ) {
                        
    ServerCommand("sm_ban #%d %d \"Частая смена тэга (бан на %d минут)\""GetClientUserId(iClient), g_iBanLengthg_iBanLength);
                        
    ServerCommand("sm_kick #%d \"Частая смена тэга (бан на %d минут)\""GetClientUserId(iClient), g_iBanLength);
                    }
                    else if ( 
    g_iBanLength == -) {
                        
    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);
            }
        }
    }
     
    Последнее редактирование: 9 авг 2016
    SamVl и Святослав124 нравится это.
  2. AlmazON

    AlmazON Не путать с самим yand3xmail

    Сообщения:
    5.165
    Симпатии:
    2.434
    То есть? Создать конфиг от плагина?
    После этой строчки добавь новую:
    PHP:
    AutoExecConfig(true"No_tag_flood");
     
    Святослав124 и Yura7181 нравится это.
  3. Yura7181

    Yura7181

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

    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_PLUGINtrue1.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(iClientg_szOldTag[iClient], sizeof(g_szOldTag[]));
        
    g_iWarnings[iClient] = 0;
    }

    public 
    void OnClientSettingsChanged(int iClient)
    {
        if ( 
    iClient && iClient <= MaxClients && IsClientInGame(iClient) ) {
            
    char szCurrentTag[12];
            
    CS_GetClientClanTag(iClientszCurrentTagsizeof(szCurrentTag));
            if ( 
    strcmp(szCurrentTagg_szOldTag[iClient], true) ) {
                if ( ++
    g_iWarnings[iClient] >= g_iMaxWarnings ) {
                    if ( 
    g_iBanLength ) {
                        
    ServerCommand("sm_ban #%d %d \"Частая смена тэга (бан на %d минут)\""GetClientUserId(iClient), g_iBanLengthg_iBanLength);
                        
    ServerCommand("sm_kick #%d \"Частая смена тэга (бан на %d минут)\""GetClientUserId(iClient), g_iBanLength);
                    }
                    else if ( 
    g_iBanLength == -) {
                        
    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);
            }
        }
    }
     
    SamVl и Святослав124 нравится это.
  4. AlmazON

    AlmazON Не путать с самим yand3xmail

    Сообщения:
    5.165
    Симпатии:
    2.434
    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_iMaxWarnNickg_iMaxWarnings;
    int        g_iBanNickg_iBanLength;

    public 
    void OnPluginStart()
    {
        
    ConVar cvar;
        
    HookConVarChange(cvar CreateConVar("sm_nonickflood_maxwarns",        "3",    "Сколько раз игрок может сменить ник за одно подключение."_true0.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",    "Сколько раз игрок может сменить тэг за одно подключение."_true0.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(iClientg_szOldNick[iClient], sizeof(g_szOldNick[]));
        
    g_iWarnNick[iClient] = g_iWarnings[iClient] = 0;
        
    CS_GetClientClanTag(iClientg_szOldTag[iClient], sizeof(g_szOldTag[]));
    }

    public 
    void OnClientSettingsChanged(int iClient)
    {
        if (
    IsClientInGame(iClient)) {
            
    char szBuffer[MAX_NAME_LENGTH];
            
    GetClientName(iClientszBuffersizeof(g_szOldNick[]));
            if (
    strcmp(szBufferg_szOldNick[iClient])) {
                if (++
    g_iWarnNick[iClient] < g_iMaxWarnNickstrcopy(g_szOldNick[iClient], sizeof(g_szOldNick[]), szBuffer);
                else {
                    switch (
    g_iBanNick) {
                        case 
    0ServerCommand("sm_kick #%d \"Сервер: Частая смена ника\""GetClientUserId(iClient));
                        case -
    1ServerCommand("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_iBanLengthg_iBanLengthGetClientUserId(iClient), g_iBanLength);
                    }
                }
            }
            
    CS_GetClientClanTag(iClientszBuffersizeof(g_szOldTag[]));
            if (
    strcmp(szBufferg_szOldTag[iClient])) {
                if (++
    g_iWarnings[iClient] < g_iMaxWarningsstrcopy(g_szOldTag[iClient], sizeof(g_szOldTag[]), szBuffer);
                else {
                    switch (
    g_iBanLength) {
                        case 
    0ServerCommand("sm_kick #%d \"Сервер: Частая смена тега\""GetClientUserId(iClient));
                        case -
    1ServerCommand("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_iBanLengthg_iBanLengthGetClientUserId(iClient), g_iBanLength);
                    }
                }
            }
        }
    }
     
    andreik, GANZ, Sasha7 и ещё 1-му нравится это.
  5. Yura7181

    Yura7181

    Сообщения:
    460
    Симпатии:
    489
    Спасибо, буду проверять!
     
    SamVl, andreik и Святослав124 нравится это.
  6. andreik

    andreik

    Сообщения:
    171
    Симпатии:
    20
    Спасибо ! Все работает на ура ошибок нету баны прописываются в соурбанс (CSGO)
     
  7. Dmitriy Mikliaev

    Dmitriy Mikliaev

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

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

    стоит квар sm_nonickflood_maxwarns "5"
     
    Последнее редактирование: 8 янв 2017
  8. AlmazON

    AlmazON Не путать с самим yand3xmail

    Сообщения:
    5.165
    Симпатии:
    2.434
    Смени на:
    PHP:
    OnClientPutInServer
    Не проверял, что там творится. Просто сделал всё одинаково для ников, как у клан-тега.
     
    Dmitriy Mikliaev нравится это.