Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Функция ScanMessage()

Untonyst

Умник
SCAN MESSAGE
Фильтр строк​

Назначение:
Функция ищет в строке указанные заранее вами слова.​

Описание:
Я задумывал эту функцию как антимат (фильтр запрещенных слов на сервере). Но ее можно использовать в разных случаях: запрещать писать ip в чате, маты или "дай админку". Даже, если слово "cerf" написаноe как "c e rf", функция все равно его поймает.​

Функция:

  1. Для начала вам нужно включить в реестр запрещенные слова.

    PHP:
    static const
    	black_list[][] =
    {
    	"cerf",
    	"дайадминку", // как пример поиска по словосочетаниям
    	":7777"
    	// и т.д.
    };
    * в одно слово мы лепим потому, что функция получает указанную нами строку, копирует ее в локальный массив и дальше работает с этим массивом, предварительно очистив этот массив от пробелов.

  2. В любое удобное для вас место добавляем функцию ScanMessage().
    PHP:
    RemoveSpaces_DC(string[])
    {
        static pos, pos2, c;
        for (pos = 0, pos2 = 0;; ++pos)
        {
            switch (c = string[pos])
            {
                case ' ': continue;
                case '\0':
                {
                    string[pos2] = '\0';
                    return;
                }
            }
            string[pos2++] = c;
        }
    }
    PHP:
    stock ScanMessage(playerid, text[])
    {
        new default_text[144];
        strcat(default_text, text);
    	RemoveSpaces_DC(default_text);
    
        new text_size = strlen(default_text);
    
        for (new j; j < text_size; j ++)
        {
            for (new k; k < sizeof(black_list); k ++)
                if (strfind(default_text[j], black_list[k], true) != -1)
                {
                     OnBannedWordDetect(playerid, black_list[k]);
                     return 0;
                }
        }
        return 1;
    }
  3. Добавляем каллбэк OnBannedWordDetect, который вызывается функцией, если слово из реестра совпало со словами игрока.
    PHP:
    forward OnBannedWordDetect(playerid, text[]);
    public OnBannedWordDetect(playerid, text[])
    {
    	//
    	return 0;
    }
    Параметр text[] получает слово из реестра из-за которого произошел вызов функции.

Пример использования:
PHP:
COMMAND:test(playerid, params[])
{
	if (sscanf(params, "s[144]", params))
	    return 0;

	if (ScanMessage(playerid, params))
	    return SendClientMessage(playerid, -1, "Слово в черном списке!");
	    
	SendClientMessage(playerid, -1, "Ваше сообщение не содержит ничего эдакого =)");
	return 1;
}
: запрещаем указывать ссылки на сторонние ресурсы.

Автор: Untonyst

Запрещается выкладывать куда-либо без разрешения автора!​
 
Последнее редактирование:
Сверху Снизу