Архив для тега антимат

Pawn. Отличный антимат для SA-MP сервера.

Давным давно хотел написать антимат, но так руки и не доходили, пока не попросили функцию на одном форуме. Этот антимат проверяет строку на запрещённые слова, учитывая исключения(оскорблять, например). Найденные плохие слова заменяет на *(сколько в слове символов, столько и звёздочек).

Исходный код функции

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;
		}
	}
}

Исходник на pastebin.com

Пример использования

public OnPlayerText(playerid, text[])
{
	remove_bad_word(text);
	return 1;
}
Перейти к верхней панели