PDA

Просмотр полной версии : [Урок] Годная защита от рекламы



Tracker1
11.01.2015, 14:57
Всегда интересовали личности, которые ставят себе огромные стоки, в большинстве случае даже и не рабочие, и называют это защитой от рекламы.
Подобные стоки создают неймоверную нагрузку на сервер и не обезопасят никого на самом то деле.
Вот подобные примеры
http://breedpmnr.ru/i/8DFA24
http://breedpmnr.ru/i/C527F9F6

Эти личности наверное забыли, как часто отправляются сообщения и команды на серверах с 50-100 онлайном.

Я же предлагаю нормальную антирекламу без особой нагрузки на сервер\стэк

Вся суть в регулярных выражениях.

([0-9]{1,3})[^[:digit:]^[:cntrl:]]{1,3}([0-9]{1,3})[^[:digit:]^[:cntrl:]]{1,3}([0-9]{1,3})[^[:digit:]^[:cntrl:]]{1,3}([0-9]{1,3})
Вот сообственно и регулярное выражение.

Что такое регулярное выражение? - Первая ссылка в гугле ответит вам, не ленитесь.
Чтобы это заработало, необходим плагин http://forum.sa-mp.com/showthread.php?t=247893
А дальше дело за малым, создается сток по виду подобного



stock IsIp(const string[])
{
if(!adv) adv= regex_build("([0-9]{1,3})[^[:digit:]^[:cntrl:]]{1,3}([0-9]{1,3})[^[:digit:]^[:cntrl:]]{1,3}([0-9]{1,3})[^[:digit:]^[:cntrl:]]{1,3}([0-9]{1,3})");
return regex_search_exid(string, adv);
}

А к глобальным переменным мы добавляем


new RegEx:adv;

И все. Проверить это регулярное выражение можно тут http://regexr.com/v1?38ro8
Вводите абсолютно что пожелаете в окно ввода. Если выделилось синим, то значит подобное сообщение будет оценено как реклама.
Если же вам что-то не нравится в регулярном выражении - вы можете его запросто написать. Здесь всего-лишь одна строка кода, а не 20-25 строк непонятного быдлокода как у других.

з.ы естественно никак невозможно с помощью кода отличить, вводит ли человек айпи адресс, или же сообщает просто какое-то количество цифр, например счет в банке. Это уже дело за вами.

з.ы.ы
еще один пример использования регулярного выражения. Проверка на рп ник


regex_match(playername, "([A-Z]{1,1})[a-z]{2,9}+_([A-Z]{1,1})[a-z]{2,9}")

А за сколько бы строк написал ваш бы скриптер?

L0ndl3m
11.01.2015, 16:42
Нельзя ли было значение переменной adv присвоить в OnGameModeInit, а далее проверять макросом?


#define IsIp(%0) \
regex_search_exid(%0, adv)

Или я что-то упустил?

Wesley
11.01.2015, 16:55
Понравилось.

Tracker1
11.01.2015, 18:22
Нельзя ли было значение переменной adv присвоить в OnGameModeInit, а далее проверять макросом?


#define IsIp(%0) \
regex_search_exid(%0, adv)

Или я что-то упустил?

Можно. Я дал регулярку и дал примерный сток.

Maranzalla
25.01.2015, 23:17
все сюда посоны 972.42 .44. 28:2462
все сюда 972 42 44 128 : 9080
не ловит вот такой текст
фигня это все ваши регулярки
лишних пробелов добавьте и не поймает
http://i.imgur.com/dM1o3JI.jpg