Русское сообщество по скриптингу

Проверка в нике на наличие ip адреса / порта  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Проверка в нике на наличие ip адреса / порта

Сообщение Ronny123456789 » 15 янв 2018, 13:28

Здравствуйте!
Есть такой простенький плагин от ботов от неугомона. Он проверяет в нику игрока порт и кикает собственно из сервера, не дает подключиться.
Хочу сделать, чтобы можно было указывать больше проверки портов, сейчас тут только указано 27015. Подскажите, как это сделать ,пожалуйста . Хочу добавить еще 27016, 55555 и т.д

Код: Выделить всё
#include amxmodx

public client_connect(id)
{
    new 
name[32]
    
get_user_info(id"name"name31);
    
    if(
contain(name":27015") != -1)
    {
        new 
ip[25]; get_user_ip(idip24);
        
log_to_file("spam.log""Player %s[%s] dropped"nameip);
        
server_cmd("kick #%d ^"Bot кик^""get_user_userid(id));
    }

Название темы скорректировано // Subb98
Аватара пользователя
Ronny123456789
 
Сообщения: 117
Зарегистрирован: 21 июл 2014, 13:52
Благодарил (а): 48 раз.
Поблагодарили: 0 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Team Fortress II
Left 4 Dead

Re: Проверка в нике на наличие ip адреса / порта

Сообщение RevCrew » 15 янв 2018, 14:36

Ronny123456789, используйте regex. Если не знаете что это, то можете посмотреь в плагине KickSpammers или установить его себе. Там все более продвинуто
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Проверка в нике на наличие ip адреса / порта

Сообщение Subb98 » 15 янв 2018, 14:54

Как и написал RevCrew выше, это ненадёжный и не универсальный способ. Для таких целей нужно использовать Вы должны зарегистрироваться, чтобы видеть ссылки..

Код: Выделить всё
(\d{1,3}(\W+)?){4}(\d(\W+)?){5}

regex.png


Код: Выделить всё
#pragma semicolon 1

#include <amxmodx>
#include <regex>

new Regex:g_pattern;
new 
g_code;

public 
plugin_init()
{
    
register_plugin("YOBA protection""0.1""Subb98");

    new 
error[64];
    
g_pattern regex_compile("(\d{1,3}(\W+)?){4}(\d(\W+)?){5}"g_codeerrorcharsmax(error), "i");
    
    if (
g_code <= REGEX_ERROR_NONE) {
        
set_fail_state("Regex compile error: (%d) ^"%s^""g_codeerror);
    }
}

public 
client_authorized(id)
{
    new 
name[32];
    
get_user_name(idnamecharsmax(name));

    if (
regex_match_c(nameg_patterng_code)) {
        new 
ip[22], authid[24];
        
get_user_ip(idipcharsmax(ip));
        
get_user_authid(idauthidcharsmax(authid));
        
        
logging("Player %s <%s> [%s] dropped"nameipauthid);
        
        
server_cmd("kick #%d ^"IP-address in name^""get_user_userid(id));
    }
}

public 
plugin_end()
{
    
regex_free(g_pattern);
}

stock logging(const message[], any:...) {
    static 
logsDir[64], file[sizeof logsDir 32], time[22], msg[512];

    if(!
logsDir[0]) {
        new 
len get_localinfo("amxx_logs"logsDircharsmax(logsDir));
        
formatex(logsDir[len], charsmax(logsDir) - len"/yoba_protection");

        if(!
dir_exists(logsDir)) {
            
mkdir(logsDir);
        }
    }

    new 
pfile;

    
get_time("%Y%m%d"timecharsmax(time));
    
formatex(filecharsmax(file), "%s/%s.log"logsDirtime);
    
vformat(msgcharsmax(msg), message2);

    if((
pfile fopen(file"a"))) {
        
get_time("%d/%m/%Y - %H:%M:%S"timecharsmax(time));
        
fprintf(pfile"%s: %s^n"timemsg);
        
fclose(pfile);
    }
У вас нет необходимых прав для просмотра вложений в этом сообщении.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Проверка в нике на наличие ip адреса / порта

Сообщение Ronny123456789 » 15 янв 2018, 15:32

Subb98, спасибо большое, но почему то ваш вариант не компилируется..
в чем может быть ошибка ?
Вот скрин ошибок при компиляции = Вы должны зарегистрироваться, чтобы видеть ссылки.
Аватара пользователя
Ronny123456789
 
Сообщения: 117
Зарегистрирован: 21 июл 2014, 13:52
Благодарил (а): 48 раз.
Поблагодарили: 0 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Team Fortress II
Left 4 Dead

Re: Проверка в нике на наличие ip адреса / порта

Сообщение Subb98 » 15 янв 2018, 16:10

Ronny123456789, потому что я не делал поддержку для 1.8.2 и ниже версий AMX Mod X.

«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Проверка в нике на наличие ip адреса / порта

Сообщение Ronny123456789 » 15 янв 2018, 16:16

Subb98, а возможно ли в этом плагине вашем добавить поддержку 1.8.2 ? Как раз сижу на этой версии. Подскажите, пожалуйста, очень прошу.. Это нужный плагин будет против этих ботов
Аватара пользователя
Ronny123456789
 
Сообщения: 117
Зарегистрирован: 21 июл 2014, 13:52
Благодарил (а): 48 раз.
Поблагодарили: 0 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Team Fortress II
Left 4 Dead

Re: Проверка в нике на наличие ip адреса / порта  [Решено]

Сообщение Subb98 » 15 янв 2018, 16:28

Код: Выделить всё
#pragma semicolon 1

#include <amxmodx>
#include <regex>

new Regex:g_pattern;
new 
g_code;

public 
plugin_init()
{
    
register_plugin("YOBA protection""0.1""Subb98");

    new 
error[64];
    if ( (
g_pattern regex_compile("(\d{1,3}(\W+)?){4}(\d(\W+)?){5}"g_codeerrorcharsmax(error), "i")) < REGEX_OK) {
        new 
message[sizeof error 32];
        
formatex(messagecharsmax(message), "Regex compile error: (%d) ^"%s^""g_codeerror);
        
set_fail_state(message);
    }
}

public 
client_authorized(id)
{
    new 
name[32];
    
get_user_name(idnamecharsmax(name));

    if (
regex_match_c(nameg_patterng_code)) {
        new 
ip[22], authid[24];
        
get_user_ip(idipcharsmax(ip));
        
get_user_authid(idauthidcharsmax(authid));
        
        
logging("Player %s <%s> [%s] dropped"nameipauthid);
        
        
server_cmd("kick #%d ^"IP-address in name^""get_user_userid(id));
    }
}

public 
plugin_end()
{
    
regex_free(g_pattern);
}

stock logging(const message[], any:...) {
    static 
logsDir[64], file[sizeof logsDir 32], time[22], msg[512];

    if(!
logsDir[0]) {
        new 
len get_localinfo("amxx_logs"logsDircharsmax(logsDir));
        
formatex(logsDir[len], charsmax(logsDir) - len"/yoba_protection");

        if(!
dir_exists(logsDir)) {
            
mkdir(logsDir);
        }
    }

    new 
pfile;

    
get_time("%Y%m%d"timecharsmax(time));
    
formatex(filecharsmax(file), "%s/%s.log"logsDirtime);
    
vformat(msgcharsmax(msg), message2);

    if((
pfile fopen(file"a"))) {
        
get_time("%d/%m/%Y - %H:%M:%S"timecharsmax(time));
        
fprintf(pfile"%s: %s^n"timemsg);
        
fclose(pfile);
    }
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14