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

    Статус
    Оффлайн
    Регистрация
    15.06.2014
    Сообщений
    651
    Репутация:
    106 ±

    [Вопрос] AntiHealth и AntiArmour

    Правильно сделан античит на хп и броню ?
    Если буду выдавать хп и броню через SetPlayerArmourEx и SetPlayerHealthEx, а если читер начитерит у него не получится?
    PHP код:
    new Float:anti_armour[MAX_PLAYERS];
    new 
    Float:anti_health[MAX_PLAYERS];

    SetTimer("AntiCheat",10001);

    public 
    AntiCheat()
    {
        foreach(new 
    iPlayer)
        {
                
    //AntiArmour
                
    new FloatArmourFloatHealth;
                
    GetPlayerArmour(iArmour);
                if(
    anti_armour[i] < Armour)
                {
                    
    SetPlayerArmour(ianti_armour[i]);
                }
                else
                     
    anti_armour[i] = Armour;
                
    //AntiHealth
                
    GetPlayerArmour(iHealth);
                if(
    anti_health[i] < Health)
                {
                    
    SetPlayerArmour(ianti_health[i]);
                }
                else
                     
    anti_health[i] = Health;
            }
        return 
    true;
    }

    stock SetPlayerArmorAC(playeridFloatArmor)
    {
        
    anti_armour[playerid] = Armor;
        
    SetPlayerArmour(playeridArmor);
        return 
    true;
    }

    stock SetPlayerHealthAC(playeridFloatHealth)
    {
        
    anti_health[playerid] = Health;
        
    SetPlayerHealth(playeridHealth);
        return 
    true;

    Последний раз редактировалось gangzone.ini; 30.05.2015 в 15:24. Причина: up

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Для кого Стас (Daniel Cortez) писал уроки про перехваты?
    PHP код:
    stock ac_hp__SetPlayerHealth(playerid, &Float:health)
    {
        
    anti_health[playerid] = health
        return 
    SetPlayerHealth(playeridhealth);
    }
    #if    defined    _ALS_SetPlayerHealth
        #undef    SetPlayerHealth
    #else
        #define    _ALS_SetPlayerHealth
    #endif
    #define SetPlayerHealth ac_hp__SetPlayerHealth 
    PHP код:
    stock ac_armour__SetPlayerArmour(playerid, &Float:armour)
    {
        
    anti_armour[playerid] = armour;
        return 
    SetPlayerArmour(playeridarmour);
    }
    #if    defined    _ALS_SetPlayerArmour
        #undef    SetPlayerArmour
    #else
        #define    _ALS_SetPlayerArmour
    #endif
    #define SetPlayerArmour ac_armour__SetPlayerArmour 
    Ну а так, не разрабатываю анти читы, но возможно алгоритм верный судя всему по коду.

  3. Пользователь сказал cпасибо:
    gangzone.ini (30.05.2015)
  4. #3
    Аватар для gangzone.ini
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.06.2014
    Сообщений
    651
    Репутация:
    106 ±
    Использовала код для меня понятный)

  5. #4
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    1. Вместо ХП второй раз подряд проверяете броню.

    2. Создание переменных Armour и Health лучше вынести за пределы цикла, иначе они будут создаваться заново на каждой итерации.

    3. Переменные вещественного типа лучше сравнивать с помощью floatcmp, иначе будут потери в производительности (ладно бы один раз, но тут у нас цикл по всем игрокам).
    PHP код:
    GetPlayerArmour(iarmour);
    new 
    result floatcmp(armouranti_armour[i]);
    if(
    result == 1// если ХП больше записанного значения
        
    SetPlayerArmour(ianti_armour[i]);
    elseif(
    result == -1// если ХП меньше записанного значения (при равенстве не нужно ничего делать)
        
    anti_armour[i] = armour
    4. Если выдать игроку ХП, новое значение сразу же будет записано в anti_armour[playerid], а у игрока оно обновится не сразу, а через некоторое время (от 100 мс, зависит от пинга).
    Если в этот небольшой промежуток времени произойдёт проверка ХП, будет ложное срабатывание и античит установит у игрока прежнее ХП, которое было до вызова SetPlayerArmorAC.
    Поэтому после выдачи ХП нужно некоторое время пропускать проверку ХП у игрока.
    Подробное решение можно найти в моей статье по перехватам:
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  6. Пользователь сказал cпасибо:
    gangzone.ini (30.05.2015)
 

 

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

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

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

Ваши права

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