Desulaid
17.12.2015, 19:34
SCAN MESSAGE
Фильтр строк
Назначение:
Функция ищет в строке указанные заранее вами слова.
Описание:
Я задумывал эту функцию как антимат (фильтр запрещенных слов на сервере). Но ее можно использовать в разных случаях: запрещать писать ip в чате, маты или "дай админку". Даже, если слово "cerf" написаноe как "c e rf", функция все равно его поймает.
Функция:
Для начала вам нужно включить в реестр запрещенные слова.
new const black_list[][] =
{
"cerf",
"дайадминку", // как пример поиска по словосочетаниям
":7777"
// и т.д.
};
* в одно слово мы лепим потому, что функция получает указанную нами строку, копирует ее в локальный массив и дальше работает с этим массивом, предварительно очистив этот массив от пробелов.
В любое удобное для вас место добавляем функцию ScanMessage().
stock ScanMessage(text[])
{
static pos, pos2, c;
new default_text[145];
strcat(default_text, text);
for (pos = 0, pos2 = 0;; ++pos)
{
switch (c = default_text[pos])
{
case ' ': continue;
case '\0':
{
default_text[pos2] = '\0';
break;
}
}
default_text[pos2++] = c;
}
for (new j, t = strlen(default_text); j < t; j++)
{
for (new k; k < sizeof(black_list); k ++)
{
if (strfind(default_text[j], black_list[k], true) != -1)
{
return 0;
}
}
}
return 1;
}
Пример использования:
COMMAND:test(playerid, params[])
{
if (sscanf(params, "s[144]", params)) return 0;
if (ScanMessage(playerid, params))
return SendClientMessage(playerid, -1, "Слово в черном списке!");
return SendClientMessage(playerid, -1, "Ваше сообщение не содержит ничего эдакого =)");;
}
Пример системы (клицк) (http://pastebin.com/W3sVWmEj): запрещаем указывать ссылки на сторонние ресурсы.
Запрещается выкладывать куда-либо без разрешения автора!
Фильтр строк
Назначение:
Функция ищет в строке указанные заранее вами слова.
Описание:
Я задумывал эту функцию как антимат (фильтр запрещенных слов на сервере). Но ее можно использовать в разных случаях: запрещать писать ip в чате, маты или "дай админку". Даже, если слово "cerf" написаноe как "c e rf", функция все равно его поймает.
Функция:
Для начала вам нужно включить в реестр запрещенные слова.
new const black_list[][] =
{
"cerf",
"дайадминку", // как пример поиска по словосочетаниям
":7777"
// и т.д.
};
* в одно слово мы лепим потому, что функция получает указанную нами строку, копирует ее в локальный массив и дальше работает с этим массивом, предварительно очистив этот массив от пробелов.
В любое удобное для вас место добавляем функцию ScanMessage().
stock ScanMessage(text[])
{
static pos, pos2, c;
new default_text[145];
strcat(default_text, text);
for (pos = 0, pos2 = 0;; ++pos)
{
switch (c = default_text[pos])
{
case ' ': continue;
case '\0':
{
default_text[pos2] = '\0';
break;
}
}
default_text[pos2++] = c;
}
for (new j, t = strlen(default_text); j < t; j++)
{
for (new k; k < sizeof(black_list); k ++)
{
if (strfind(default_text[j], black_list[k], true) != -1)
{
return 0;
}
}
}
return 1;
}
Пример использования:
COMMAND:test(playerid, params[])
{
if (sscanf(params, "s[144]", params)) return 0;
if (ScanMessage(playerid, params))
return SendClientMessage(playerid, -1, "Слово в черном списке!");
return SendClientMessage(playerid, -1, "Ваше сообщение не содержит ничего эдакого =)");;
}
Пример системы (клицк) (http://pastebin.com/W3sVWmEj): запрещаем указывать ссылки на сторонние ресурсы.
Запрещается выкладывать куда-либо без разрешения автора!