[CHAT] AnyChatFilter 1.5.0.4

Полноценный фильтр чата

  1. Grey83

    Grey83 похухоль

    Сообщения:
    1.919
    Симпатии:
    929
    Почистил и оптимизировал немного код
    Должно корректно перехватывать сообщения на старом движке
    Заодно перевёл инклюд на новый синтаксис (ну и добавил функцию инвертирования регистра :cool:)

    P.S. Да, мне снова было нечем заняться и страдал фигнёй переписывая AnyChatFilter v1.5.0.1 (кстати, нумерация такого вида обычно только в версиях SM, в плагинах чаще вида x.x или x.x.x)
    --- Добавлено позже ---
    Если кому интересно, то вот плагин, на котором я тестировал конвертацию регистра:
     

    Вложения:

  2. Крузяра

    Крузяра Супермодератор

    Сообщения:
    5.456
    Симпатии:
    4.461
    @Grey83, нумерация из четырёх цифр более удобная, если для себя обозначить, что означает какая цифра.
     
  3. Grey83

    Grey83 похухоль

    Сообщения:
    1.919
    Симпатии:
    929
    @Крузяра, ну меня только на 3 хватает: 1 - глобальные изменения в коде, 2 - серьёзные нововведения (ну или смена синтаксиса), 3 - мелкие изменения и фиксы
     
  4. Skeriiz

    Skeriiz Потерянный UDP

    Сообщения:
    424
    Симпатии:
    247
    Ну манипуляции с фигурными скобками(а точнее их отсутствие) больше снижает читабельность кода, нежели нечто большее(На текущее время написано множество статей/книг по такому поводу) =>
    Код не чистит оптимизации не дает.
    Новый синт. из этой же истории
    PHP:
    if(!iArgs) for(int i3i++) LoadFiles(g_szPaths[i], view_as<REGEX_FILES>(i));
    При таком раскладе, всегда будет -1 или же будет индекс, но разделения не произойдет.
    Тем более наличие "случайного дублирования" символа приведет к ложному форматированию. Не доглядел..
    PHP:
    public void whiteCommands(ConVar cv, const char[] oldV, const char[] newV)
    {
        
    char szBuffer[PLATFORM_MAX_PATH];
        
    cv.GetString(SZF(szBuffer));    TrimString(szBuffer);

        if(
    FindSlashPos(szBuffer) != -1)
            
    ExplodeString(szBuffer"|"SZF(g_szWhiteCom), sizeof(g_szWhiteCom[]));
        else 
    strcopy(g_szWhiteCom[0], sizeof(g_szWhiteCom[]), szBuffer);
    }

    stock int FindSlashPos(const char[] str)
    {
        
    int i;
        while(
    str[i]) if(str[i] == '/') return i;
        return -
    1;
    }
    На самом деле никогда не задумывался на этот счет, какой-либо конкретной привязки нет, что дает автору право выбора...
     
  5. Grey83

    Grey83 похухоль

    Сообщения:
    1.919
    Симпатии:
    929
    мне больше всего ухудшает читаемость наличие ненужных скобок и расположение открывающей в конце строки :dntknw:
    почему ты так решил?
     
  6. Skeriiz

    Skeriiz Потерянный UDP

    Сообщения:
    424
    Симпатии:
    247
    Хм, а ведь почему... До выхлопа то дело никогда не дойдет.
    Цикл while будет бесконечно проверять первый символ буфера...
     
    Последнее редактирование: 10 янв 2019
  7. Rezder

    Rezder

    Сообщения:
    32
    Симпатии:
    1
    Почему он наказывает за слово например апдаун т.е если в слове есть другое слово, таких же будет много слов и просто так муты будет выдавать.
    Можно сделать чтобы он чисто за слово наказывал если оно точь в точь совпадает?
     
  8. Skeriiz

    Skeriiz Потерянный UDP

    Сообщения:
    424
    Симпатии:
    247
    В след. обнове...
     
    Dreizehnt нравится это.
  9. Крузяра

    Крузяра Супермодератор

    Сообщения:
    5.456
    Симпатии:
    4.461
    @Skeriiz, там хуже будет.
    SM просто вырубит плагин. Это бесконечный цикл без результата.

    PHP:
    stock int FindSlashPos(const char[] str)
    {
        
    int i = -1;
        while(
    str[++i]) if(str[i] == '/') return i;
        return -
    1;
    }
    Вот так будет с результатом, если уж экономить на строчках.
     
    Последнее редактирование: 10 янв 2019
    m1chaeloff и Skeriiz нравится это.
  10. pasha133196

    pasha133196

    Сообщения:
    70
    Симпатии:
    5
    Css v34 SM 1.9.0.6190.
    Плагин работает чудесно до первого наказания. После первого мута начинает просто выдавать предупреждения и по концовке их обнуляет, но никакого мута не дает.
    В логах ошибок никаких нету.
    После перезагрузки плагина опять таки выдает 1 мут и больше не хочет.

    Также неполноценно работает с VIP чатом (проверял на випке от wS). Выдает предупреждения, но в чате не блокирует само сообщение.
     
    Последнее редактирование: 11 янв 2019 в 13:08
  11. Крузяра

    Крузяра Супермодератор

    Сообщения:
    5.456
    Симпатии:
    4.461
    Проблемы реализации самого вип чата. Препроцессор не используется, видимо.
     
  12. Skeriiz

    Skeriiz Потерянный UDP

    Сообщения:
    424
    Симпатии:
    247
  13. Grey83

    Grey83 похухоль

    Сообщения:
    1.919
    Симпатии:
    929
    @Крузяра, ага, увеличение счётчика забыл добавить.

    Исправил исходник в том сообщении
    --- Добавлено позже ---
    @Skeriiz, в функцию RestrictPlayer() нет необходимости передавать значение квара sm_acf_command в качестве одного из параметров, т.к. можно и так это значение в функции получить:
    PHP:
    void RestrictPlayer(int client)
    {
        
    char sUID[24], buffer[128];
        
    FormatEx(SZF(sUID), "#%i"GetClientUserId(client));
        
    strcopy(SZF(buffer), g_szCommand);
        
    ReplaceString(SZF(buffer), "{UID}"sUIDtrue);
        
    ServerCommand(buffer);
        
    g_iWarnCount[client] = 0;
    }
     
    Последнее редактирование: 11 янв 2019 в 18:49
  14. Skeriiz

    Skeriiz Потерянный UDP

    Сообщения:
    424
    Симпатии:
    247
    Что так, что сяк, значение пишется в локальный буфер и функция работает с ним.
    Единственный плюс от передачи значения аргументом, в данной ситуации - адекватный стектрейс (или же нет... на ваш вкус и цвет)
     
  15. Крузяра

    Крузяра Супермодератор

    Сообщения:
    5.456
    Симпатии:
    4.461
    А как по мне, если оставить передачу аргументом, то можно оставить гибкость функции. Нет привязки к конкретной глобальной переменной. В любой другой момент можно передать другую строку, и оно просто будет работать.
     
    Skeriiz нравится это.
  16. Grey83

    Grey83 похухоль

    Сообщения:
    1.919
    Симпатии:
    929
    @Крузяра, вот только другая переменная должна будет являться строковой и содержать (ну или не содержать) в себе вот эти символы "{UID}"
    А также иметь отношение к счётчику предупреждений (g_iWarnCount[client] = 0;)
    --- Добавлено позже ---
    Да и вообще создавать отдельную функцию не было никакой необходимости, т.к. на неё ссылаются всего 1 раз в коде плагина
    Обычно какие-либо действия выводить в отдельную функцию имеет смысл тогда, когда одна и та же последовательность действий используется несколько раз в коде.
     
  17. Крузяра

    Крузяра Супермодератор

    Сообщения:
    5.456
    Симпатии:
    4.461
    @Grey83, необязательно.
    Иногда вынести в отдельную функцию полезно, если планируется её использовать в других плагинах. Чтобы просто скопировать, и вставить в другом месте.
     
  18. Grey83

    Grey83 похухоль

    Сообщения:
    1.919
    Симпатии:
    929
    @Крузяра, а что мешает просто скопировать и вставить не вынося в отдельную функцию?
     
  19. Skeriiz

    Skeriiz Потерянный UDP

    Сообщения:
    424
    Симпатии:
    247
    смысловое обособление, не иначе.

    Бессмысленная дилемма..
     
    Крузяра нравится это.
  20. Крузяра

    Крузяра Супермодератор

    Сообщения:
    5.456
    Симпатии:
    4.461
    @Grey83, как раз таки привязка к внешним дополнительным глобальным переменным.
    Нет привязки - нет проблем при банальном копировании, ибо ничего не меняешь, а на компиляции не ловишь непонятных ошибок вроде "undefined variable".
     
    Skeriiz нравится это.