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

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

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

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

Анти Авто+С

Regisss

Умник
Не видел похожей темы, поэтому решил её выложить.

Скажу сразу - проверял на себе, сколько ни пытался вызвать ложные - не вышло.

На чем все основывается? Всё просто. Авто +С стреляет практически с одинаковым интервалом. Как раз этот интервал мы и будем проверять. Если игрок выстрелил больше 3-х раз с примерно одинаковой задержкой, то это чит.

Сам код, вставляйте в
PHP:
public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
PHP:
	if(GetPVarInt(playerid,"AntiPC_time") > gettime() && weaponid == 24)//Авто +С на дигл
	{
		if((GetTickCount()-GetPVarInt(playerid,"AntiPC_last")) >= 520 && (GetTickCount()-GetPVarInt(playerid,"AntiPC_last")) <= 530)// Проверял через printf, выводило 520-530
		{
		    SetPVarInt(playerid,"AntiPC_shots",GetPVarInt(playerid,"AntiPC_shots")+1);//Добавляем 1 выстрел
		    if(GetPVarInt(playerid,"AntiPC_shots") > 3)Cheater(playerid,"Авто +С");//Если сделано 3 выстрела - чит (Функцию заменяйте на свою)
		}
	}
	else SetPVarInt(playerid,"AntiPC_time",gettime()+3),SetPVarInt(playerid,"AntiPC_shots",0);//Если прошло три секунды - обнуляем выстрелы и время.
	SetPVarInt(playerid,"AntiPC_last",GetTickCount());//Сохраняем кол-во тиков с прошлого выстрела
Приммечания:

1. Функцию "Cheater" заменяйте на свою.
Кому нужно, то вот(без дефайнов)
PHP:
stock Cheater(playerid,const cheat[])
{
	if(!gLogged{playerid} || AdminLevel{playerid} > 0) return 1;
	new string[24+32+32];
	
	format(string,sizeof(string),"[A] %s кикнут античитом. Код: %s",Name(playerid),cheat);
	SendAdmin(string);
	
	format(string,sizeof(string),"Вы были кикнуты античитом. Код: %s",cheat);
	send(playerid,COLOR_ADM,string);
	Kick(playerid);
	return 1;
}
п.с. Знаю про static const + sizeof, но не хотел для такого маленького сообщения делать эту "вещь")

2. Почему я использовал ПВары вместо переменных? Ответ прост - не хотел создавать около 3-х переменных с MAX_PLAYERS, которые буду использовать только в одном месте. Про то,что пвары медленнее не пишите, пожалуйста, эти милисекунды меня не спасут.

Ну, вот и всё, если будут ложные - пишите, всегда рад конструктивной критике
 
Последнее редактирование:
Сверху Снизу