Просмотр полной версии : [Античит] AirBrake & Teleport
Всем привет! Вот небольшие наброски моего "античита" :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
Попробую отпишусь
Seregamil
26.12.2014, 13:47
Пруфы?
В гугле anti airbreak вбей и увидишь, что тем с подобным принципом действия много.
У читов так-то принцип действия тоже одинаковый.
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 все равно будит ловить
Ты доработай уж свой вариант, а потом выкладывай. Защита от NOP, делается 1 строчкой в моем варианте, сейчас пересмотри его.
Dima_Tushin
26.12.2014, 19:59
Ты доработай уж свой вариант, а потом выкладывай. Защита от NOP, делается 1 строчкой в моем варианте, сейчас пересмотри его.
все увидел буду знать!
напиши урок о починке авто собейтом! очень ищу пытался сделать но не получается
SetVehicleHealth или RepairVehicle ( сделай хоть один из них буду благодарен! )
Mazzilla
26.12.2014, 21:11
А теперь объясни, зачем нам Player_WAC_User)
А теперь объясни, зачем нам Player_WAC_User)
Переменная, которая уменьшает кол-во ложных срабатываний, путем отключения проверок отдельного игрока на определенное время.
P.S отредактировал кое-что.
James_Cruise
30.12.2014, 23:49
Я бы этот хлам убрал
Player_Timer_Tick[playerid]
Player_Off_Protect[playerid]
И воспользовался GetTimeTick
А в целом, на мусор твой античит.
Он не спасёт от коорд-мастера это ведь прямой обход который известен всем читерам,не говоря уж об мощности античита в целом.
Античиты такого типа лучше писать в OnPlayerUpdate и подогнать минимальные изменения в позициях,это сделает его мощным и коорд-мастер моментально поймает а также различный Fly не говоря уж про телепортацию и аирбрейк.
Корд мастер ловит. Не пробовал не утверждай.
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 строку.
Я говорю за читы на минимальных настройках,поэтому данный античит на 80% бесполезен.
От флуда OnPlayerUpdate можно избавится в 1 строку.
Я вот что-то тебя не понимаю.. Ты делаешь выводы что код не рабочий, отметаешь все другие мнения. Я тебе говорю, проверяй. Как ты высчитал процентное соотношение? Ты проверял различные виды античитов (включая мой), в разных условиях, отсюда и вынес процент? Давай не будем пустословить..
- - - Добавлено - - -
Не уверен в том,что даже аирбрейк на относительно минимальных настройках не ловит.
К тому же, ты не уверен в своих словах..
James_Cruise
31.12.2014, 22:53
Я вот что-то тебя не понимаю.. Ты делаешь выводы что код не рабочий, отметаешь все другие мнения. Я тебе говорю, проверяй. Как ты высчитал процентное соотношение? Ты проверял различные виды античитов (включая мой), в разных условиях, отсюда и вынес процент? Давай не будем пустословить..
- - - Добавлено - - -
К тому же, ты не уверен в своих словах..
Код не рабочий при минимальных настройках чита.
Я тебе предложил метод более проще.Который будет ловить как минимум, читы которые ты указал,даже при минимальных настройках.
Предлагай код, а не методы. Иначе твои слова и твоя оценка = 0
Для проверки на НОП нужно выделять таймер. Т.к. из-за пинга телепортация проходит не моментально.
+ Я бы использовал тут не
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
Для проверки на НОП нужно выделять таймер. Т.к. из-за пинга телепортация проходит не моментально.
+ Я бы использовал тут не
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;
}
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
Ложные срабатывния есть *__*
Ложные срабатывния есть *__*
ok, спасибо. Только забыл рассказать какие и в какой ситуации, а так полезный пост =)
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) работает? кто нибудь может одобрять?
А от падение не будут ложные срабатывание? Это учтено?
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 метров (даже не в афк).
Ведь существует пинг, и только по его прошествию клиент применит позицию и отошлёт обратно, мол, он там где и должен быть.
В коде же выше такое не учитывается.
А разве это не сработает в любом случае? Попробуйте тпхунть кого-либо более чем на 10 метров (даже не в афк).
Ведь существует пинг, и только по его прошествию клиент применит позицию и отошлёт обратно, мол, он там где и должен быть.
В коде же выше такое не учитывается.
Player_Off_Protect[playerid] = 2;
разве не для того что бы исключать игрока? или я не понял принцып работы? :blush2:
Nexius_Tailer
15.07.2016, 14:05
Player_Off_Protect[playerid] = 2;
Это время задержки в секундах, на протяжении которого античит перестаёт реагировать на игрока. Там она потом в секундном таймере постепенно уменьшается до нуля, а потом начинает работать античит (сделано для избежания ложных из-за пинга). И забавно то, что сразу через строку идёт такая проверка на ноп, которая пинг не учитывает вообще.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot