HLDS Бот New IP*** в наблюдении

Сильвестр

Пользователь
Регистрация
9 Июн 2017
Сообщения
5
Симпатии
0
Пол
Мужской
#1
Всем доброго времени суток.
Проблема: На сервере в наблюдателях сидит бот (New IP.....). Установлен Antispam от неугомона, но он не меняет ему никнейм и он сидит 24/7 там). Плагин прописан выше lite translit'a.
Народ можете помочь с проблемой?
Спасибо за внимание!
 

Сильвестр

Пользователь
Регистрация
9 Июн 2017
Сообщения
5
Симпатии
0
Пол
Мужской
#3
Код:
#include <amxmodx>
#include <fakemeta>

#define BLOCK_NAME_SPAM                // Включает блокировку частой смены ника.
#define TIME_WAIT    5.0            // Время между сменами ника [Не работает, если выключен BLOCK_NAME_SPAM]
#define DEFAULT_NAME    "*****"    // Имя, на которое менять. Меняет только визуально, при выходе сервера будет старый ник.
#define TRUE_KEY    "********"       
/*
    TRUE_KEY - Разрешенный ключ в нике/чате. Если в DEFAULT_NAME указан сайт, то сюда укажите сайт, иначе словите Reliable channel overflow
    Если в строке содержится это (и макроса TRUE_KEY), то строка игнорируется, то есть вернет как валидную - не реклама.
    Например:
            1. "Все на neugomon.ru" - будет пропущено в чат
            2. "Все на c-s.net.ua"  - будет заблокировано
*/                       
new const g_sBadKeys[][] =
{
    "skype", "icq", "connect", "guns", ":27",
    "http:", "https:", "www.", ".net", ".com", ".ua", ".ru", ".info", ".org", ".tv", ".su", ".biz", ".eu", ".uc", ".ee", ".name", ".ucoz",
    ".net", ".de", ".uk", ".lv", ".at", ".3dn", ".my", ".su", ".do", ".am", ".es", ".hu", ".ae", ".po", ".pl", ".lt", ".ro"
}

#define FM_ChangeName(%1,%2,%3) engfunc(EngFunc_SetClientKeyValue, %1, %3, "name", %2)
#define    GetBit(%1,%2)        (%1 & (1 << (%2 & 31)))
#define    SetBit(%1,%2)        %1 |= (1 << (%2 & 31))
#define    ResetBit(%1,%2)        %1 &= ~(1 << (%2 & 31))
new g_bConnected, g_bChecked;

public plugin_init()
{
    register_plugin("AntiSpam", "1.0", "Neugomon");
    
    register_forward(FM_ClientUserInfoChanged, "FmClientUserInfoChanged");
    register_clcmd("say", "HookSay");
    register_clcmd("say_team", "HookSay");
}

public client_putinserver(id)
    SetBit(g_bConnected, id);

public client_disconnect(id)
{
    ResetBit(g_bConnected, id);
    ResetBit(g_bChecked, id);
}

public FmClientUserInfoChanged(pClient, Infobuffer)
{
    if(!GetBit(g_bConnected, pClient))
        return FMRES_IGNORED;
        
    static sNewName[32], sOldName[32];
    get_user_name(pClient, sOldName, charsmax(sOldName));
    engfunc(EngFunc_InfoKeyValue, Infobuffer, "name", sNewName, charsmax(sNewName));
    if(!GetBit(g_bChecked, pClient) || strcmp(sNewName, sOldName))
    {
#if defined BLOCK_NAME_SPAM
        if(GetBit(g_bChecked, pClient))
        {
            if(is_user_alive(pClient))
            {
                static Float:flCurrentTime, Float:flWaitName[33];
                if((flCurrentTime = get_gametime()) < flWaitName[pClient])
                {
                    flWaitName[pClient] = flCurrentTime + TIME_WAIT;
                    FM_ChangeName(pClient, sOldName, Infobuffer);
                    return FMRES_HANDLED; // Если не блочится мессага в чате, то замените FMRES_HANDLED на FMRES_SUPERCEDE
                }
                flWaitName[pClient] = flCurrentTime + TIME_WAIT;
            }
        }   
#endif   
        if(!IsValidString(sNewName))
            FM_ChangeName(pClient, DEFAULT_NAME, Infobuffer);
        else
        {
            new bool:bChange;
            for(new i; sNewName[i] != '^0'; i++)
            {
                if(sNewName[i] == '#' || sNewName[i] == '+')
                {
                    sNewName[i] = ' ';
                    bChange = true;
                }   
            }
            if(bChange) FM_ChangeName(pClient, sNewName, Infobuffer);
        }
        SetBit(g_bChecked, pClient);   
    }   
    return FMRES_IGNORED;
}

public HookSay(id)
{
    static sMsg[128]; read_args(sMsg, charsmax(sMsg));
    if(!sMsg[0]) return PLUGIN_HANDLED;
    
    return (IsValidString(sMsg)) ? PLUGIN_CONTINUE : PLUGIN_HANDLED;
}

bool:IsValidString(string[])
{
    if(containi(string, TRUE_KEY) != -1) return true;
    for(new i; i < sizeof g_sBadKeys; i++)
        if(containi(string, g_sBadKeys[i]) != -1) return false;
    return true;   
}
 

Le$hiy

Пользователь
Регистрация
10 Июн 2017
Сообщения
197
Симпатии
69
Пол
Мужской
#4
Сильвестр, не знал, что название плагина в версии 1.0 было таким). У меня так
Код:
register_plugin("Block All Adverts", "1.3", "neygomon");
Но суть не в этом. Даже версия 1.3 тебя не спасет. Плагин будет менять рекламный ник только при спавне игрока, поэтому от спектров не поможет.
Можешь использовать такой плагин, но он будет кикать на стадии коннекта:
PHP:
#include amxmodx

public plugin_init()
{
    register_plugin("SpamName Block", "0.1", "neygomon")
}

public client_connect(id)
{
    new name[32]
    get_user_info(id, "name", name, 31);
   
    if(contain(name, ".1") != -1 || contain(name, ".2") != -1 || contain(name, ":27") != -1)     // тут можешь добавить еще что-то от себя
    {
        new ip[25]; get_user_ip(id, ip, 24);
        log_to_file("spam.log", "Player %s[%s] dropped", name, ip);
        server_cmd("kick #%d ^"Смени ник^"", get_user_userid(id));
    }
}
Он кикает игроков, в никах которых содержится ".1", ".2" или ":27". Можешь добавить еще что-то от себя.
Это конечно минус для онлайна, но зато железная защита от рекламных ников. Можешь использовать оба плагина в связке и настроить их по своему усмотрению.
 

Сильвестр

Пользователь
Регистрация
9 Июн 2017
Сообщения
5
Симпатии
0
Пол
Мужской
#5
Сильвестр, не знал, что название плагина в версии 1.0 было таким). У меня так
Код:
register_plugin("Block All Adverts", "1.3", "neygomon");
Но суть не в этом. Даже версия 1.3 тебя не спасет. Плагин будет менять рекламный ник только при спавне игрока, поэтому от спектров не поможет.
Можешь использовать такой плагин, но он будет кикать на стадии коннекта:
PHP:
#include amxmodx

public plugin_init()
{
    register_plugin("SpamName Block", "0.1", "neygomon")
}

public client_connect(id)
{
    new name[32]
    get_user_info(id, "name", name, 31);
  
    if(contain(name, ".1") != -1 || contain(name, ".2") != -1 || contain(name, ":27") != -1)     // тут можешь добавить еще что-то от себя
    {
        new ip[25]; get_user_ip(id, ip, 24);
        log_to_file("spam.log", "Player %s[%s] dropped", name, ip);
        server_cmd("kick #%d ^"Смени ник^"", get_user_userid(id));
    }
}
Он кикает игроков, в никах которых содержится ".1", ".2" или ":27". Можешь добавить еще что-то от себя.
Это конечно минус для онлайна, но зато железная защита от рекламных ников. Можешь использовать оба плагина в связке и настроить их по своему усмотрению.
Версию и название я поменял (не знаю зачем xD), оставил лишь автора плагина.
Спасибо тебе за помощь!
27 Июн 2017
Le$hiy, Подскажешь актуальны ли данные плагины?
banipfakes от Safety1st
x_client_detector
 

Le$hiy

Пользователь
Регистрация
10 Июн 2017
Сообщения
197
Симпатии
69
Пол
Мужской
#8
Сильвестр, вместо amx-плагина x_client_detector я бы метамод-плагин fakedetector от Асмодая. Нагрузка должна быть меньше. А banipfakes ведь по сути тоже предназначен для решения проблемы с фейками? Значит он не нужен.
Вообще почитай статью (надеюсь и тут она когда-нибудь "родится") Защита Counter Strike Сервера
27 Июн 2017
А вообще меня Dproto последней версии всегда спасал от фейков. Правда сейчас не знаю, как там дела с этим на hlds обстоят.
 

Сильвестр

Пользователь
Регистрация
9 Июн 2017
Сообщения
5
Симпатии
0
Пол
Мужской
#9
Le$hiy, ban IP - не дает зайти с 1 ip несколько игрокам.
Спасибо тебе за помощь, благодарен!
 

Le$hiy

Пользователь
Регистрация
10 Июн 2017
Сообщения
197
Симпатии
69
Пол
Мужской
#10

Le$hiy

Пользователь
Регистрация
10 Июн 2017
Сообщения
197
Симпатии
69
Пол
Мужской
#12
shram47, плагин тот, но использовать его можно шире