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

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

  1. Yura7181

    Yura7181

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

    У меня есть плагин запрещающий смену клан тега более 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
    Святослав124 нравится это.
  2. AlmazON

    AlmazON деревянный © yand3xmail

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

    Yura7181

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

    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);
            }
        }
    }
     
    Святослав124 нравится это.
  4. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.563
    Симпатии:
    1.988
    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

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

    andreik

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