Всем привет. Я думаю многие знают, что на собейте есть такая функция как ТП в авто. ( нумпад 7 )
Сейчас я напишу как "поймать" читера который делает ТП в авто из авто.
В паблике OnPlayerStateChange пишем следующее
PHP код:
if ( newstate == 1 ) // Игрок пешком
{
DeletePVar ( playerid, "VehicleID" ) ; // Удаляем ПВарку, она на не нужна будет
}
else if ( newstate == 2 ) // Игрок сел в авто
{
new vehicleid = GetPlayerVehicleID ( playerid ) ; // Узнаем ИД авто в которое сел игрок
SetPVarInt ( playerid, "VehicleID", vehicleid ) ; // Заносим ИД авто в ПВарку
}
// Суть в том, что при ТП в авто из авто собейтом, этот паблик не вызывается, по этому игроку не будет присваивается ИД нового авто в которое он ТП
Далее, нам нужно проверять, в каком авто сидит игрок, и равен ли ИД этого авто ИДу в нашей ПВарке. Для этого нам нужен любой таймер на 1 секунду.
Если у Вас есть такой, вписывайте туда этот код
PHP код:
if ( IsPlayerInAnyVehicle ( playerid ) && GetPlayerState ( playerid ) == 2 && GetPlayerVehicleID ( playerid ) != GetPVarInt ( playerid, "VehicleID" ) ) return Kick ( playerid ) ; // Проверяем, если игрок в авто и ИД этого авто не равен ИДу записаному в ПВарку, то кикаем
Если же у Вас нету таймера, создаем его
в паблике OnGameInit() пишем
PHP код:
SetTimer ( "AntiTPinAuto", 1000, true ) ;
И вне пабликов
PHP код:
forward AntiTPinAuto ( ) ;
public AntiTPinAuto ( )
{
for ( new i; i <= MAX_PLAYERS; i++ )
{
if ( !IsPlayerConnected ( i ) ) continue;
if ( IsPlayerInAnyVehicle ( i ) && GetPlayerState ( i ) == 2 && GetPlayerVehicleID ( i ) != GetPVarInt ( i, "VehicleID" ) ) return Kick ( i ) ;
}
return 1;
}
Ну вот и всё. Всем удачи.