Представляю вашему вниманию экспериментальную версию античита на телепортацию автомобиля к игроку (читеру).
Ахтунг: Корректная работа данного скрипта не гарантируется! Только для тестирования!
Версии:
0.1.2 - добавлена функция avtp_PutPlayerInVehicle
0.1.1 - добавлена функция avtp_SetVehiclePos
0.1.0 - релиз
Исходники:
Ахтунг: Корректная работа данного скрипта не гарантируется! Только для тестирования!
Версии:
0.1.2 - добавлена функция avtp_PutPlayerInVehicle
0.1.1 - добавлена функция avtp_SetVehiclePos
0.1.0 - релиз
Исходники:
- Код:
// AVTP anticheat by OFFREAL
// WARNING: Experimental version
// avtp.inc
#if defined _avtp_included
#endinput
#endif
#define _avtp_included
#pragma library avtp
// Переменные:
#define STREAM_DIST_MIN 100.00
new bool:v_Streamed[ MAX_VEHICLES ][ MAX_PLAYERS ];
// Паблики (требуется добавить ссылки на эти функции в оргинальных пабликах)
stock avtp_OnVehicleStreamIn(vehicleid, forplayerid)
{
new Float:vehx, Float:vehy, Float:vehz;
GetVehiclePos(vehicleid, vehx, vehy, vehz);
if( GetPlayerDistanceFromPoint(forplayerid, vehx, vehy, vehz) < STREAM_DIST_MIN && !v_Streamed[vehicleid][forplayerid] )
{
SendClientMessage(forplayerid, -1, "Подозрение в ТП машин. Соединение было разорвано сервером");
//Kick(forplayerid);
//SetVehicleToRespawn(vehicleid);
return 1;
}
v_Streamed[vehicleid][forplayerid] = true;
return 1;
}
stock avtp_OnVehicleStreamOut(vehicleid, forplayerid)
{
v_Streamed[vehicleid][forplayerid] = false;
return 1;
}
stock avtp_OnPlayerConnect(playerid)
{
for(new v;v<MAX_VEHICLES;v++)
{
v_Streamed[v][playerid] = false;
}
return 1;
}
stock avtp_OnVehicleSpawn(vehicleid)
{
new Float:vehx, Float:vehy, Float:vehz;
GetVehiclePos(vehicleid, vehx, vehy, vehz);
for(new i; i<MAX_PLAYERS; i++)
{
if( GetPlayerDistanceFromPoint(i, vehx, vehy, vehz) < STREAM_DIST_MIN )
{
v_Streamed[vehicleid][i] = true;
}
else
{
v_Streamed[vehicleid][i] = false;
}
}
return 1;
}
// Замена стандарт функций
stock avtp_SetplayerPos(playerid, Float:X, Float:Y, Float:Z)
{
for(new i; i<MAX_VEHICLES; i++)
{
if( GetVehicleDistanceFromPoint(i, X, Y, Z) < STREAM_DIST_MIN )
{
v_Streamed[i][playerid] = true;
}
else
{
v_Streamed[i][playerid] = false;
}
}
SetPlayerPos(playerid,X,Y,Z);
return 1;
}
stock avtp_SetVehiclePos(vid, Float:X, Float:Y, Float:Z)
{
for(new i; i<MAX_PLAYERS; i++)
{
if( GetPlayerDistanceFromPoint(i, X, Y, Z) < STREAM_DIST_MIN )
{
v_Streamed[vid][i] = true;
}
else
{
v_Streamed[vid][i] = false;
}
}
SetVehiclePos(vid,X,Y,Z);
return 1;
}
stock avtp_PutPlayerInVehicle(playerid, vehicleid, seat)
{
v_Streamed[vehicleid][playerid] = true;
PutPlayerInVehicle(playerid, vehicleid, seat);
}
#define SetplayerPos avtp_SetplayerPos
#define SetVehiclePos avtp_SetVehiclePos
#define PutPlayerInVehicle avtp_PutPlayerInVehicle