Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


   

**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 100руб/мес, Текстовая 50руб/мес.
Показано с 1 по 5 из 5
  1. #1
    Аватар для vovandolg
    Пользователь

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

    Анти 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
    Сообщений
    59
    Репутация:
    5 ±
    Вот этого что то я не понял.
    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,191
    Репутация:
    101 ±
    Привычка такая) я с большими таймерами работаю у себя, времени не было проверять успевают ли они за время обновления выполнить все проверки, а так будет уверено после всех действий апдейтить.
    Ну вот возьмем пример, работа в цеху детали на конвейере подаются тебе и они подаются быстрее чем ты успеваешь их взять
    или вот так
    детали подаются нажатием на кнопку которая у тебя под рукой, то есть ты знаешь что успеешь и детали мимо не пробегут)
    Последний раз редактировалось vovandolg; 28.01.2016 в 04:51.

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

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

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,191
    Репутация:
    101 ±
    Обновил шапку темы, мелкий фикс.
    [Античит] Invisible Fly Hack
    [Античит] Weapon/Ammo Hack
    [Function] ResetPlayerWeaponSlot
    [Function] FIX_SetPlayerAmmo

 

 

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

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

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

Ваши права

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