Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 9 из 9
  1. #1
    Аватар для Amir
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.01.2016
    Сообщений
    12
    Репутация:
    0 ±

    Помощь в доработке антирекламы

    FS не мой нашел его в инете, а проблема в том что он блокирует кмд в которых присутствуют более 4х чисел. Например /banip, /unbanip, /sellgun. Сам я любитель в pawno, но мне понравилось это занятие. Пожалуйста помогите сделать так чтоб кмд не блокировались и прописывались, а в чат писало предупреждение о возможной рекламе. Или же найти способ добавить нужные кмд в исключение
    PHP код:
    #include <a_samp>

    new strR[255][255];

    #define FILTERSCRIPT

    public OnFilterScriptInit()
    {
        print(
    "Анти-Реклама на команды");
        return 
    1;
    }

    public 
    OnPlayerCommandText(playeridcmdtext[])
    {
        new 
    is1=0;
        new 
    r=0;
        while(
    strlen(cmdtext[is1]))
        {
            if(
    '0'<=cmdtext[is1]<='9')
            {
                new 
    is2=is1+1;
                new 
    p=0;
                while(
    p==0)
                {
                    if(
    '0'<=cmdtext[is2]<='9'&&strlen(cmdtext[is2])) is2++;
                    else
                    {
                        
    strmid(strR[r],cmdtext,is1,is2,255);
                        if(
    strval(strR[r])<255r++;
                        
    is1=is2;
                        
    p=1;
                    }
                }
            }
            
    is1++;
        }
        if(
    r>=4)
        {
            new 
    strMy[255];
            new 
    STRname[255];
            
    GetPlayerName(playerid,STRname,255);
            
    format(strMysizeof(strMy), " Подозрение на рекламу %s(%d): %s",STRname,playerid,cmdtext);
            for(new 
    j1=0j1 MAX_PLAYERS;j1++)
              if(
    IsPlayerAdmin(j1)) SendClientMessage(j10xFF0000FFstrMy);
            for(new 
    z=0;z<r;z++)
            {
                new 
    pr2;
                while((
    pr2=strfind(cmdtext,strR[z],true))!=-1) for(new i=pr2,j=pr2+strlen(strR[z]);i<j;i++) cmdtext[i]='*';
            }
            return 
    1;
        }
        return 
    0;
        } 

  2. #2
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  3. Пользователь сказал cпасибо:
    vovandolg (09.01.2016)
  4. #3
    Аватар для Amir
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.01.2016
    Сообщений
    12
    Репутация:
    0 ±
    Не очень годная защита. При проверке вышло вот что:
    PHP код:
    128 128 128 128 piar
    128 
    128 128 .  128 no piar 
    Стоит добавить лишний пробел и антиреклама не срабатывает
    Последний раз редактировалось Amir; 09.01.2016 в 03:47.

  5. #4
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от Amir Посмотреть сообщение
    Не очень годная защита. При проверке вышло вот что:
    PHP код:
    128 128 128 128 piar
    128 
    128 128 .  128 no piar 
    Стоит добавить лишний пробел и антиреклама не срабатывает
    Можно поставить проверку на кол-во цифр в отправленном сообщение и всё)

  6. #5
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Можно поставить проверку на кол-во цифр в отправленном сообщение и всё)
    Можно просто убрать пробелы.
    Например, можно использовать функцию DC:
    PHP код:
    RemoveSpaces_DC(string[])
    {
        static 
    pospos2c;
        for (
    pos 0pos2 0;; ++pos)
        {
            switch (
    string[pos])
            {
                case 
    ' ': continue;
                case 
    '\0':
                {
                    
    string[pos2] = '\0';
                    return;
                }
            }
            
    string[pos2++] = c;
        }


  7. #6
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Можно просто убрать пробелы.
    Например, можно использовать функцию DC:
    PHP код:
    RemoveSpaces_DC(string[])
    {
        static 
    pospos2c;
        for (
    pos 0pos2 0;; ++pos)
        {
            switch (
    string[pos])
            {
                case 
    ' ': continue;
                case 
    '\0':
                {
                    
    string[pos2] = '\0';
                    return;
                }
            }
            
    string[pos2++] = c;
        }

    Вместо пробелов можно вставить другие символы и точно так же обойти антирекламу.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  8. #7
    Аватар для Amir
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.01.2016
    Сообщений
    12
    Репутация:
    0 ±
    Тот пример с 128 и пробелами относится к антирекламе предложенной другим человеком. С моей антирекламой всё нормально, вот только она блокирует кмд в которых больше 4 чисел. Например /sellgun /banip /unbanip. Есть ли способ сделать исключение для этих команд? Или иной способ решить проблему
    PHP код:
    #include <a_samp>

    new strR[255][255];

    #define FILTERSCRIPT

    public OnFilterScriptInit()
    {
        print(
    "Анти-Реклама на команды");
        return 
    1;
    }

    public 
    OnPlayerCommandText(playeridcmdtext[])
    {
        new 
    is1=0;
        new 
    r=0;
        while(
    strlen(cmdtext[is1]))
        {
            if(
    '0'<=cmdtext[is1]<='9')
            {
                new 
    is2=is1+1;
                new 
    p=0;
                while(
    p==0)
                {
                    if(
    '0'<=cmdtext[is2]<='9'&&strlen(cmdtext[is2])) is2++;
                    else
                    {
                        
    strmid(strR[r],cmdtext,is1,is2,255);
                        if(
    strval(strR[r])<255r++;
                        
    is1=is2;
                        
    p=1;
                    }
                }
            }
            
    is1++;
        }
        if(
    r>=4)
        {
            new 
    strMy[255];
            new 
    STRname[255];
            
    GetPlayerName(playerid,STRname,255);
            
    format(strMysizeof(strMy), " Подозрение на рекламу %s(%d): %s",STRname,playerid,cmdtext);
            for(new 
    j1=0j1 MAX_PLAYERS;j1++)
              if(
    IsPlayerAdmin(j1)) SendClientMessage(j10xFF0000FFstrMy);
            for(new 
    z=0;z<r;z++)
            {
                new 
    pr2;
                while((
    pr2=strfind(cmdtext,strR[z],true))!=-1) for(new i=pr2,j=pr2+strlen(strR[z]);i<j;i++) cmdtext[i]='*';
            }
            return 
    1;
        }
        return 
    0;
        } 

  9. #8
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Вынесите проверку на рекламу в отдельную функцию и используйте её только в OnPlayerText и в тех командах, которые отправляют текст в чат, оставляют введённый текст на каких либо объектах и т.д. и т.п.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  10. #9
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Но опять же попадутся назойливые нубы которые будут писать "адалжи over9000000 деняк" и будет блок текста
    Так что серверу привыкать придется от большого кол-ва цифр в чате и сокращать их к-кк типо того или что то придумать актуальнее...

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •