Давным давно хотел написать антимат, но так руки и не доходили, пока не попросили функцию на одном форуме. Этот антимат проверяет строку на запрещённые слова, учитывая исключения(оскорблять, например). Найденные плохие слова заменяет на *(сколько в слове символов, столько и звёздочек).
Исходный код функции
stock remove_bad_word(text[]) { static words[][32] = {"bla","cyk"}; static exceptions[][32] = {"vobla", "krabla", "mobla","picyk","mucyk"}; new i, j, k, pos, epos, len, epos_buf; for (i = 0; i < sizeof(words); i++) { while ( (pos = strfind(text, words[i], true, pos+1)) != -1 ) { len = strlen(words[i]); for (j = 0; j < sizeof(exceptions); j++) { epos = strfind(text, exceptions[j], true, epos+1); if ( epos != pos - (strlen(exceptions[j]) - len) ) { epos = epos_buf; if (j == sizeof(exceptions)-1) { for (k = pos; k < pos+len; k++) { text[k] = '*'; } } continue; } else { break; } } epos_buf = epos; } } }
Пример использования
public OnPlayerText(playerid, text[]) { remove_bad_word(text); return 1; }