Всем привет! Вот небольшие наброски моего "античита" :grin:.
Переменные для хранения данных, которые мы будем использовать в дальнейшем коде.
* Если у вас есть таймер, НЕ СОЗДАВАЙТЕ НОВЫЙ!PHP код:
new Float:Player_Pos[3][MAX_PLAYERS];
new Player_Off_Protect[MAX_PLAYERS];
new Player_Timer[MAX_PLAYERS];// Если нет таймера, если есть, то вставляем код из этого таймера в свой
new Player_Timer_Tick[MAX_PLAYERS];
* Минимальная частота вашего таймера, должна быть 1 секунду.
OnPlayerConnect:
OnPlayerDisconnectPHP код:
Player_Off_Protect[playerid] = 9999999;
Player_Timer_Tick[playerid] = 0;
Player_Timer[playerid] = SetTimerEx("@_WAC_Timer_Function", 250, 1, "d", playerid);
OnPlayerSpawnPHP код:
KillTimer(Player_Timer[playerid]);
OnPlayerExitVehiclePHP код:
Player_Off_Protect[playerid] = 2;
PHP код:
GetPlayerPos(playerid, Player_Pos[0][playerid], Player_Pos[1][playerid], Player_Pos[2][playerid]);
Функция телепорта. Я просто сделал #define, в перехвате функций не силен =).
В начало мода (по желанию, можно также использовать напрямую):
PHP код:
#define SetPlayerPos WAC_SetPlayerPos
Сама функция:
PHP код:
stock WAC_SetPlayerPos(playerid, Float:x,Float:y,Float:z)
{
Player_Pos[0][playerid] = x;
Player_Pos[1][playerid] = y;
Player_Pos[2][playerid] = z;
#if defined SetPlayerPos
#undef SetPlayerPos
#endif
SetPlayerPos(playerid, x,y,z);
#define SetPlayerPos WAC_SetPlayerPos
Player_Off_Protect[playerid] = 2;
if(!IsPlayerInRangeOfPoint(playerid, 10.0, x,y,z)) return Kick(playerid); // NOP
return 1;
}
Таймер.
PHP код:
@_WAC_Timer_Function(playerid);
@_WAC_Timer_Function(playerid)
{
if(!Player_Off_Protect[playerid])
{
new Float:Distance = GetPlayerDistanceFromPoint(playerid, Player_Pos[0][playerid], Player_Pos[1][playerid], Player_Pos[2][playerid]);
if(10.0 < Distance < 40.0)
{
if(!IsPlayerInAnyVehicle(playerid))
{
Kick(playerid);
}
}
else if(40 < Distance)
{
Kick(playerid);
}
GetPlayerPos(playerid, Player_Pos[0][playerid], Player_Pos[1][playerid], Player_Pos[2][playerid]);
}
Player_Timer_Tick[playerid]++;
if(Player_Timer_Tick[playerid] >= 4)
{
Player_Timer_Tick[playerid] = 0;
if(Player_Off_Protect[playerid] > 0) Player_Off_Protect[playerid]--;
}
return 1;
}
Жду критики.
Автор: wAx