PDA

Просмотр полной версии : [Античит] AirBrake & Teleport



wAx
26.12.2014, 11:31
Всем привет! Вот небольшие наброски моего "античита" :grin:.

Переменные для хранения данных, которые мы будем использовать в дальнейшем коде.


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:


Player_Off_Protect[playerid] = 9999999;
Player_Timer_Tick[playerid] = 0;
Player_Timer[playerid] = SetTimerEx("@_WAC_Timer_Function", 250, 1, "d", playerid);


OnPlayerDisconnect

KillTimer(Player_Timer[playerid]);

OnPlayerSpawn

Player_Off_Protect[playerid] = 2;

OnPlayerExitVehicle

GetPlayerPos(playerid, Player_Pos[0][playerid], Player_Pos[1][playerid], Player_Pos[2][playerid]);


Функция телепорта. Я просто сделал #define, в перехвате функций не силен =).

В начало мода (по желанию, можно также использовать напрямую):

#define SetPlayerPos WAC_SetPlayerPos


Сама функция:


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;
}



Таймер.


@_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;
}

Player_Timer_Tick - переменная, которая подсчитывает в таймере на 250 мс, каждую секунду. Если вы используете таймер с частотой 1 секунду, избавляйтесь от переменной Player_Timer_Tick.


Жду критики.

Автор: wAx

Seregamil
26.12.2014, 12:44
Баян.

#Bezdonny
26.12.2014, 13:16
Попробую отпишусь

wAx
26.12.2014, 13:17
Баян.

Пруфы?

Seregamil
26.12.2014, 13:47
Пруфы?

В гугле anti airbreak вбей и увидишь, что тем с подобным принципом действия много.

wAx
26.12.2014, 13:57
У читов так-то принцип действия тоже одинаковый.

Dima_Tushin
26.12.2014, 18:37
мой вариант.



new Float: AirBreak[MAX_PLAYERS][3];
stock SetPlayerPosAC(playerid, Float: X, Float: Y, Float: Z)
{
AirBreak[playerid][0] = X;
AirBreak[playerid][1] = Y;
AirBreak[playerid][2] = Z;
SetPlayerPos(playerid, X, Y, Z);
return 1;
}
#if defined _ALS_SetPlayerPos
#undef SetPlayerPos
#else
#define _ALS_SetPlayerPos
#endif
#define SetPlayerPos SetPlayerPosAC


public OnPlayerExitVehicle(playerid, vehicleid)
{
GetPlayerPos(playerid, AirBreak[playerid][0], AirBreak[playerid][1], AirBreak[playerid][2]);
return true;
}

В секундный таймер!


//AirBreak
if(GetPlayerState(i) == PLAYER_STATE_ONFOOT)
{
new Float: distance = GetPlayerDistanceFromPoint(i, AirBreak[i][0], AirBreak[i][1], AirBreak[i][2]);
if(!IsPlayerInAnyVehicle(i))
{
if(distance > 40.0)
{
format(okroz, sizeof(okroz), "<<Warning>> Игрок %s[%d]: Возможно AirBreak", Name(i), i);
SendAdminMessage(COLOR_ADMIN, okroz);
return 1;
}
if(distance > 120.0)
{
SendClientMessage(i, COLOR_LIGHTRED, ""KickPlayerid" [#9957]");
SetTimerEx("Kicks", 250, false, "i", i);
}
GetPlayerPos(i, AirBreak[i][0], AirBreak[i][1], AirBreak[i][2]);
}
return 1;
}

#define KickPlayerid "Вы были кикнуты подозрению в читерстве!"

Если включить NOP SetPlayerPos все равно будит ловить

wAx
26.12.2014, 19:38
Ты доработай уж свой вариант, а потом выкладывай. Защита от NOP, делается 1 строчкой в моем варианте, сейчас пересмотри его.

Dima_Tushin
26.12.2014, 19:59
Ты доработай уж свой вариант, а потом выкладывай. Защита от NOP, делается 1 строчкой в моем варианте, сейчас пересмотри его.

все увидел буду знать!

напиши урок о починке авто собейтом! очень ищу пытался сделать но не получается

SetVehicleHealth или RepairVehicle ( сделай хоть один из них буду благодарен! )

Mazzilla
26.12.2014, 21:11
А теперь объясни, зачем нам Player_WAC_User)

wAx
26.12.2014, 21:31
А теперь объясни, зачем нам Player_WAC_User)

Переменная, которая уменьшает кол-во ложных срабатываний, путем отключения проверок отдельного игрока на определенное время.

P.S отредактировал кое-что.

James_Cruise
30.12.2014, 23:49
Я бы этот хлам убрал

Player_Timer_Tick[playerid]
Player_Off_Protect[playerid]
И воспользовался GetTimeTick

А в целом, на мусор твой античит.
Он не спасёт от коорд-мастера это ведь прямой обход который известен всем читерам,не говоря уж об мощности античита в целом.
Античиты такого типа лучше писать в OnPlayerUpdate и подогнать минимальные изменения в позициях,это сделает его мощным и коорд-мастер моментально поймает а также различный Fly не говоря уж про телепортацию и аирбрейк.

wAx
31.12.2014, 00:26
Корд мастер ловит. Не пробовал не утверждай.

James_Cruise
31.12.2014, 01:39
Корд мастер ловит. Не пробовал не утверждай.

Что тут пробовать,когда по коду всё ясно.
На 5m ?
Не уверен в том,что даже аирбрейк на относительно минимальных настройках не ловит.

Dima_Tushin
31.12.2014, 13:12
У меня ловит Airbreak & TP через дистанцию & ТП по интерьерам и корд мастер короче все чем связан тп ( ложный он ловит даже если включить NOP )

- - - Добавлено - - -

Разработчик норм сделал

- - - Добавлено - - -

как привык человек делать, так он и делает!

- - - Добавлено - - -

ну был бы у тебя флуд из за OnPlayerUpdate

James_Cruise
31.12.2014, 14:33
У меня ловит Airbreak & TP через дистанцию & ТП по интерьерам и корд мастер короче все чем связан тп ( ложный он ловит даже если включить NOP )

- - - Добавлено - - -

Разработчик норм сделал

- - - Добавлено - - -

как привык человек делать, так он и делает!

- - - Добавлено - - -

ну был бы у тебя флуд из за OnPlayerUpdate

Я говорю за читы на минимальных настройках,поэтому данный античит на 80% бесполезен.
От флуда OnPlayerUpdate можно избавится в 1 строку.

wAx
31.12.2014, 22:44
Я говорю за читы на минимальных настройках,поэтому данный античит на 80% бесполезен.
От флуда OnPlayerUpdate можно избавится в 1 строку.

Я вот что-то тебя не понимаю.. Ты делаешь выводы что код не рабочий, отметаешь все другие мнения. Я тебе говорю, проверяй. Как ты высчитал процентное соотношение? Ты проверял различные виды античитов (включая мой), в разных условиях, отсюда и вынес процент? Давай не будем пустословить..

- - - Добавлено - - -


Не уверен в том,что даже аирбрейк на относительно минимальных настройках не ловит.

К тому же, ты не уверен в своих словах..

James_Cruise
31.12.2014, 22:53
Я вот что-то тебя не понимаю.. Ты делаешь выводы что код не рабочий, отметаешь все другие мнения. Я тебе говорю, проверяй. Как ты высчитал процентное соотношение? Ты проверял различные виды античитов (включая мой), в разных условиях, отсюда и вынес процент? Давай не будем пустословить..

- - - Добавлено - - -



К тому же, ты не уверен в своих словах..

Код не рабочий при минимальных настройках чита.
Я тебе предложил метод более проще.Который будет ловить как минимум, читы которые ты указал,даже при минимальных настройках.

wAx
31.12.2014, 23:30
Предлагай код, а не методы. Иначе твои слова и твоя оценка = 0

Flime
17.01.2015, 15:30
Для проверки на НОП нужно выделять таймер. Т.к. из-за пинга телепортация проходит не моментально.
+ Я бы использовал тут не
GetPlayerDistanceFromPoint, а собственные вычисления.
Т.к. это исключит ложные срабатывания с парашютом.
Вот что-то типо того:


new Float:Pos[3];
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
new _сount0 = floatround((Pos[0] > player__pos[playerid][0]) ? (Pos[0] - player__pos[playerid][0]) : (player__pos[playerid][0] - Pos[0]));
new _сount1 = floatround((Pos[1] > player__pos[playerid][1]) ? (Pos[1] - player__pos[playerid][1]) : (player__pos[playerid][1] - Pos[1]));
if((_сount0 > 10 || _сount1 > 10)
...


+ я бы убрал двойную проверку на координаты.
Смысл?
Лучше добавить этот античит в 250 млсек таймер и увеличить чувствительность.
При использовании 250 млсек таймера и хорошо настроенном античите кикать за полеты на парашюте не будет.

+Я бы добавил проверку на
GetPlayerSurfingVehicleID

wAx
17.01.2015, 15:45
Для проверки на НОП нужно выделять таймер. Т.к. из-за пинга телепортация проходит не моментально.
+ Я бы использовал тут не
GetPlayerDistanceFromPoint, а собственные вычисления.
Т.к. это исключит ложные срабатывания с парашютом.
Вот что-то типо того:


new Float:Pos[3];
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
new _сount0 = floatround((Pos[0] > player__pos[playerid][0]) ? (Pos[0] - player__pos[playerid][0]) : (player__pos[playerid][0] - Pos[0]));
new _сount1 = floatround((Pos[1] > player__pos[playerid][1]) ? (Pos[1] - player__pos[playerid][1]) : (player__pos[playerid][1] - Pos[1]));
if((_сount0 > 10 || _сount1 > 10)
...


+ я бы убрал двойную проверку на координаты.
Смысл?
Лучше добавить этот античит в 250 млсек таймер и увеличить чувствительность.
При использовании 250 млсек таймера и хорошо настроенном античите кикать за полеты на парашюте не будет.

+Я бы добавил проверку на
GetPlayerSurfingVehicleID


Полеты на парашюте вроде-бы и сейчас позволяет. Что касаемо собственных расчетов, согласен, так будет точнее.

Valera_Trefilov
24.01.2015, 15:56
static Float:sync_fPosition[MAX_PLAYERS][3];
public OnPlayerUpdate(playerid)
{
new Float:NewPos[3];
GetPlayerPos(playerid,NewPos[0],NewPos[1],NewPos[2]);
if(GetPlayerDistanceFromPoint(playerid,sync_fPosition[playerid][0],sync_fPosition[playerid][1],sync_fPosition[playerid][2])>5.0 &&
sync_fPosition[playerid][0]!=0.0&&sync_fPosition[playerid][1]!=0.0&&sync_fPosition[playerid][2]!=0.0)
{
SetPVarInt(playerid,"POS",1);
SetPlayerPos(playerid,sync_fPosition[playerid][0],sync_fPosition[playerid][1],sync_fPosition[playerid][2]);
}
else if(GetPVarInt(playerid,"POS")!=0)
DeletePVar(playerid,"POS");
if(GetPVarInt(playerid,"POS")==0)
GetPlayerPos(playerid,sync_fPosition[playerid][0],sync_fPosition[playerid][1],sync_fPosition[playerid][2]);
return 1;
}

wAx
16.02.2015, 13:19
static Float:sync_fPosition[MAX_PLAYERS][3];
public OnPlayerUpdate(playerid)
{
new Float:NewPos[3];
GetPlayerPos(playerid,NewPos[0],NewPos[1],NewPos[2]);
if(GetPlayerDistanceFromPoint(playerid,sync_fPosition[playerid][0],sync_fPosition[playerid][1],sync_fPosition[playerid][2])>5.0 &&
sync_fPosition[playerid][0]!=0.0&&sync_fPosition[playerid][1]!=0.0&&sync_fPosition[playerid][2]!=0.0)
{
SetPVarInt(playerid,"POS",1);
SetPlayerPos(playerid,sync_fPosition[playerid][0],sync_fPosition[playerid][1],sync_fPosition[playerid][2]);
}
else if(GetPVarInt(playerid,"POS")!=0)
DeletePVar(playerid,"POS");
if(GetPVarInt(playerid,"POS")==0)
GetPlayerPos(playerid,sync_fPosition[playerid][0],sync_fPosition[playerid][1],sync_fPosition[playerid][2]);
return 1;
}

чёт не фурычит

SonyDeathRu
05.05.2015, 19:16
Ложные срабатывния есть *__*

wAx
05.05.2015, 19:53
Ложные срабатывния есть *__*

ok, спасибо. Только забыл рассказать какие и в какой ситуации, а так полезный пост =)

#Vito
28.08.2015, 22:49
static Float:sync_fPosition[MAX_PLAYERS][3];
public OnPlayerUpdate(playerid)
{
new Float:NewPos[3];
GetPlayerPos(playerid,NewPos[0],NewPos[1],NewPos[2]);
if(GetPlayerDistanceFromPoint(playerid,sync_fPosition[playerid][0],sync_fPosition[playerid][1],sync_fPosition[playerid][2])>5.0 &&
sync_fPosition[playerid][0]!=0.0&&sync_fPosition[playerid][1]!=0.0&&sync_fPosition[playerid][2]!=0.0)
{
SetPVarInt(playerid,"POS",1);
SetPlayerPos(playerid,sync_fPosition[playerid][0],sync_fPosition[playerid][1],sync_fPosition[playerid][2]);
}
else if(GetPVarInt(playerid,"POS")!=0)
DeletePVar(playerid,"POS");
if(GetPVarInt(playerid,"POS")==0)
GetPlayerPos(playerid,sync_fPosition[playerid][0],sync_fPosition[playerid][1],sync_fPosition[playerid][2]);
return 1;
}

AirBreak блокирует SetPlayerPos

Kurbanoff
26.12.2015, 19:13
До тех пор этот античит (на AirBreak) работает? кто нибудь может одобрять?

Geebrox
14.07.2016, 23:32
А от падение не будут ложные срабатывание? Это учтено?

vovandolg
15.07.2016, 13:19
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;
}
Если мэн уйдёт в афк и его тпнут то на него сработает кик в таком варианте)))

Nexius_Tailer
15.07.2016, 13:36
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;
}
Если мэн уйдёт в афк и его тпнут то на него сработает кик в таком варианте)))
А разве это не сработает в любом случае? Попробуйте тпхунть кого-либо более чем на 10 метров (даже не в афк).
Ведь существует пинг, и только по его прошествию клиент применит позицию и отошлёт обратно, мол, он там где и должен быть.
В коде же выше такое не учитывается.

Geebrox
15.07.2016, 14:00
А разве это не сработает в любом случае? Попробуйте тпхунть кого-либо более чем на 10 метров (даже не в афк).
Ведь существует пинг, и только по его прошествию клиент применит позицию и отошлёт обратно, мол, он там где и должен быть.
В коде же выше такое не учитывается.

Player_Off_Protect[playerid] = 2;

разве не для того что бы исключать игрока? или я не понял принцып работы? :blush2:

Nexius_Tailer
15.07.2016, 14:05
Player_Off_Protect[playerid] = 2;
Это время задержки в секундах, на протяжении которого античит перестаёт реагировать на игрока. Там она потом в секундном таймере постепенно уменьшается до нуля, а потом начинает работать античит (сделано для избежания ложных из-за пинга). И забавно то, что сразу через строку идёт такая проверка на ноп, которая пинг не учитывает вообще.