Regisss
Умник
Не видел похожей темы, поэтому решил её выложить.
Скажу сразу - проверял на себе, сколько ни пытался вызвать ложные - не вышло.
На чем все основывается? Всё просто. Авто +С стреляет практически с одинаковым интервалом. Как раз этот интервал мы и будем проверять. Если игрок выстрелил больше 3-х раз с примерно одинаковой задержкой, то это чит.
Сам код, вставляйте в
Приммечания:
1. Функцию "Cheater" заменяйте на свою.
Кому нужно, то вот(без дефайнов)
п.с. Знаю про static const + sizeof, но не хотел для такого маленького сообщения делать эту "вещь")
2. Почему я использовал ПВары вместо переменных? Ответ прост - не хотел создавать около 3-х переменных с MAX_PLAYERS, которые буду использовать только в одном месте. Про то,что пвары медленнее не пишите, пожалуйста, эти милисекунды меня не спасут.
Ну, вот и всё, если будут ложные - пишите, всегда рад конструктивной критике
Скажу сразу - проверял на себе, сколько ни пытался вызвать ложные - не вышло.
На чем все основывается? Всё просто. Авто +С стреляет практически с одинаковым интервалом. Как раз этот интервал мы и будем проверять. Если игрок выстрелил больше 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;
}
2. Почему я использовал ПВары вместо переменных? Ответ прост - не хотел создавать около 3-х переменных с MAX_PLAYERS, которые буду использовать только в одном месте. Про то,что пвары медленнее не пишите, пожалуйста, эти милисекунды меня не спасут.
Ну, вот и всё, если будут ложные - пишите, всегда рад конструктивной критике
Последнее редактирование:
