Доброго времени суток дорогие друзья! После многих неудачных способов защиты от ****ганов-читеров которые таки наравят передвигаться с помощью собейта, многие разработчики разочеровались. Сегодня мы попытаемся решить эту незадачу.
Для начала предлагаю создать дефайны которые станут необходимы в процессе написания античита. Итак, ко всем дефайнам добавляем:
Код
#define SetPlayerPos t_SetPlayerPos
Прошу Вас заметить, что после написания античита, Вам будет необходимо изменить все SetPlayerPos на t_SetPlayerPos
Далее в enum pInfo добавим:
Код
Float: pPos_x, Float: pPos_y, Float: pPos_z
Создаем stock:
Код
stock onCheckAirBrk( playerid ) { if( IsPlayerConnected( playerid ) ) // проверка на коннект игрока { new Float:currentPos[ 3 ], Float:distance; GetPlayerPos( playerid, currentPos[ 0 ], currentPos[ 1 ], currentPos[ 2 ] ); distance = floatround( GetPlayerDistanceFromPoint( playerid, PlayerInfo[ playerid ][ pPos_x ], PlayerInfo[ playerid ][ pPos_y ], PlayerInfo[ playerid ][ pPos_z] ) ); if(GetPVarInt(playerid, "AntiBreik") == 0) { if(GetPlayerState(playerid) == 1) //если игрок пешком { if( distance > 40) { KickWithMessage(playerid, "Вы были кикнуты по подозрению в читерстве");// Это функция кика. Она у меня выглядит именно так } } else//если игрок в авто { if( distance > 80) { KickWithMessage(playerid, "Вы были кикнуты по подозрению в читерстве"); } } } PlayerInfo[ playerid ][ pPos_x ] = currentPos[ 0 ]; PlayerInfo[ playerid ][ pPos_y ] = currentPos[ 1 ]; PlayerInfo[ playerid ][ pPos_z ] = currentPos[ 2 ]; } }