Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 10 из 10
  1. #1
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±

    Анти Invisible Fly-Hack

    Описание:

    И так часто играя на серверах замечал появились летуны которых не видит радар GetPlayerVelocity, не мог засечь их скорость так скажем.
    В общем вижу спидометр написанный на GetPlayerPos, начал пробовать писать с нуля свой же,
    не получалось с начало, ибо цифры не мог преобразовать правильно(пользователь Profyan помог)
    Потом я начал писать Анти-SH и Анти FlyHack'и на новом измерении скорости,
    да вот только всё бы не чего пока не дошёл до того момента когда игроки любят кататься на крышах авто,
    я сделал всё таки проверку на то что авто рядом, но это возня под конец второго дня меня привела к тому что у каждого свой пинг
    и будет по разному определять есть ли авто рядом или нет, потом я перенаправился с мыслями,
    потёр это всё и решил подумать что написать так, чтобы часто не проверяло на новую скорость.

    Исследование:
    При использовании такого чита игрок игнорирует GetPlayerVelocity, но не GetPlayerPos.

    Рассуждение:
    Как бы не двигался игрок или не толкали его, у него всегда меняется координация и значение скорости в GetPlayerVelocity.

    Вывод:
    Пишем проверку на обе скорости.

    Код:

     Клац =3
    PHP код:

    new Float:pos_x[MAX_PLAYERS], Float:pos_y[MAX_PLAYERS],
        
    Float:pos_z[MAX_PLAYERS], SpeedCheck[MAX_PLAYERS];

    stock SetPlayerPosEx(playeridFloat:XFloat:YFloat:Z)
    {
        
    SetPVarInt(playerid"PauseUpdate"3);
        
    SetPlayerPos(playeridXYZ);
        return 
    1;
    }
    #if defined _ALS_SetPlayerPos
        #undef    SetPlayerPos
    #else
        #define    _ALS_SetPlayerPos
    #endif
    #define    SetPlayerPos    SetPlayerPosEx

    public OnPlayerSpawn(playerid)
    {
        
    SpeedCheck[playerid] = SetTimerEx("UpdatePosition"2501"i"playerid);
        
    //под секунду тоже настроить можно, только цифры p_distance свои вычисляйте
        
    return 1;
    }

    public 
    OnPlayerDisconnect(playeridreason)
    {
        
    KillTimer(SpeedCheck[playerid]);
        return 
    1;
    }

    forward UpdatePosition(playerid);
    public 
    UpdatePosition(playerid)
    {
        new 
    Float:p_xFloat:p_yFloat:p_z;
        
    GetPlayerPos(playeridp_xp_yp_z);
        new 
    Float:p_distance =
            
    floatpower(p_x pos_x[playerid],2.0) +
            
    floatpower(p_y pos_y[playerid],2.0) +
            
    floatpower(p_z pos_z[playerid],2.0);
        
    pos_x[playerid] = p_x;
        
    pos_y[playerid] = p_y;
        
    pos_z[playerid] = p_z;
        
    //у меня 2 разные функции на проверку скорости Onfoot и Vehicle(мне так удобнее),
        //у вас может быть другая функция на проверку скорости через GetPlayerVelocity вот её и юзайте в проверке
        
    if((SpeedOnfoot(playerid) == || SpeedVehicle(playerid) == 0) && p_distance 50.0  && !GetPVarInt(playerid,"PauseUpdate"))
        {
            
    SetPVarInt(playerid,"KickPlayer",GetPVarInt(playerid,"KickPlayer")+1);
             
    //Ложные срабатывания при смерти и ТП к администрации
            //Почему 2 спросите? Потому что может стоять костыль на респ после смерти который меняет респу при смерти и перед её респом
            
    if(GetPVarInt(playerid,"KickPlayer") > 2//Можно поставить 3 и тем самым дать чуток форы читеру на 250 мсек =D
            
    {
                
    //Ставим здесь наказание негодяю)    
            
    }
        }
        if(
    p_distance == 0.0 && GetPVarInt(playerid,"KickPlayer")) DeletePVar(playerid,"KickPlayer"); //Если не шевелимся, то обнуляем..
        // 4 раза в секунду это стабильное обновление проверки, можно поменять, но тут придется менять и значение p_distance
        
    return 1;



    В какой-нибудь секундный таймер чёркаем этот код:
     Клац =3
    PHP код:
    if(GetPVarInt(playerid,"PauseUpdate") > 0)
    {
        
    SetPVarInt(playerid,"PauseUpdate",GetPVarInt(playerid,"PauseUpdate")-1);
        if(
    GetPVarInt(playerid,"PauseUpdate") == 1)
        {
            
    DeletePVar(playerid,"PauseUpdate");
        }



    Вот и всё теперь Invisible Fly-Hack пресечён как пешком так и на авто + ТП по карте за малость метров
    P.S. Я написал этот код под все версии SA-MP которые сейчас используются,
    вы можете упростить для себя этот код используя этот native VectorSize, но только если у вас версия Server SA-MP 0.3z RC3 и выше!

    Автор урока:
    vovandolg
    Помогали:
    Profyan, Daniel_Cortez
    Последний раз редактировалось vovandolg; 04.08.2016 в 19:30. Причина: Правка античита

  2. #2
    Аватар для seriu
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.11.2013
    Сообщений
    69
    Репутация:
    6 ±
    Вот этого что то я не понял.
    PHP код:
    return SetTimerEx("UpdatePosition"2500"i"playerid); 
    Почему не сделал так
    PHP код:
     SpeedCheck[playerid] = SetTimerEx("UpdatePosition"4000,true"i"playerid); 
    Последний раз редактировалось seriu; 28.01.2016 в 03:56. Причина: как только написал, так сразу понял ;d

  3. #3
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Привычка такая) я с большими таймерами работаю у себя, времени не было проверять успевают ли они за время обновления выполнить все проверки, а так будет уверено после всех действий апдейтить.
    Ну вот возьмем пример, работа в цеху детали на конвейере подаются тебе и они подаются быстрее чем ты успеваешь их взять
    или вот так
    детали подаются нажатием на кнопку которая у тебя под рукой, то есть ты знаешь что успеешь и детали мимо не пробегут)
    Последний раз редактировалось vovandolg; 28.01.2016 в 04:51.

  4. #4
    Аватар для Prolific
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.12.2013
    Сообщений
    116
    Репутация:
    14 ±
    Суть в целом интересная (сверять скорости).

  5. #5
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Обновил шапку темы, мелкий фикс.
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  6. #6
    Аватар для vasyok28
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.08.2015
    Сообщений
    106
    Репутация:
    8 ±
    Вопрос к автору, каким образом античит ловит ТП ?
    Вроде ТП не будет ловить, так как не пройдет через эту проверку:
    PHP код:
            if(GetPVarInt(playerid,"KickPlayer") > 2)
            {
                
    //Ставим здесь наказание негодяю)    
            

    Прошу поправить меня если я не прав

  7. #7
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    1. Нет функций SpeedVehicle и SpeedOnfoot
    2. SetPlayerPosEx всегда будет возвращать 1, а также в ней нет проверки входных данных на валидность

    Ну и название подменяемой функции я бы всё-же делал не таким банальным (под Ex обычно понимается "Extended", т.е. расширенная, где есть какие-то дополнительные параметры)
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  8. #8
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от vasyok28 Посмотреть сообщение
    Вопрос к автору, каким образом античит ловит ТП ?
    Вроде ТП не будет ловить, так как не пройдет через эту проверку:
    PHP код:
            if(GetPVarInt(playerid,"KickPlayer") > 2)
            {
                
    //Ставим здесь наказание негодяю)    
            

    Прошу поправить меня если я не прав
    PHP код:
    SetPVarInt(playerid,"KickPlayer",GetPVarInt(playerid,"KickPlayer")+1);
             
    //Ложные срабатывания при смерти и ТП к администрации 
    Ctrl + F нажми с открытыми спойлерам и введи туда это если не веришь мне))

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

    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    1. Нет функций SpeedVehicle и SpeedOnfoot
    2. SetPlayerPosEx всегда будет возвращать 1, а также в ней нет проверки входных данных на валидность

    Ну и название подменяемой функции я бы всё-же делал не таким банальным (под Ex обычно понимается "Extended", т.е. расширенная, где есть какие-то дополнительные параметры)
    Я как мануал это раньше писал, редактировать не стал,
    так как забросил мод в котором это делал
    да и саму систему можно гораздо лучше и проще реализовать,
    это первый мой мануал бы всё таки

    Дописывать не чего не стану так как больше в сампце не ковыряюсь и pawn в мозгах так ради забавы остался.

    Суть кода остаётся всё равно понятной:
    Цитата Сообщение от Prolific Посмотреть сообщение
    Суть в целом интересная (сверять скорости).
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  9. #9
    Аватар для Morris
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.06.2019
    Сообщений
    0
    Репутация:
    0 ±
    Хороший урок, интересно такое можно реализовать на С++?

  10. #10
    Аватар для codestation
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.06.2019
    Сообщений
    0
    Репутация:
    0 ±
    Цитата Сообщение от Morris Посмотреть сообщение
    Хороший урок, интересно такое можно реализовать на С++?
    Естественно, вот https://github.com/Zeex/sampgdk

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •