Исходник Antifreestand resolver

Keep Ev0lving, Stay Fatal
Эксперт
Статус
Оффлайн
Регистрация
6 Фев 2018
Сообщения
1,550
Реакции[?]
585
Поинты[?]
101K
Ах да, заранее скажу. Половина проверок будет скипаться из за неправильной логики.
В целом, антифристенд ресольверы это глупая вещь, которая работает 50 на 50.
Кстати, я заранее уже сделал такую вещь как TracingMode. Она поможет вам понять какие проверки чаще всего неправильно детектят, а также те, которые скипаются всегда. (Рад был стараться).
C++:
bool CResolver::DetectSide(IBasePlayer* player)
{
    if (!player || !player->isAlive())
        return false;

    auto idx = player->GetIndex();

    if (!idx)
        return false;

    if (flLeftDamage > 9 && flRightDamage > 9 /*&& flBackDamage < 10*/)
    {
        if (fabs(flLeftDamage - flRightDamage) > 10)
        {
            if (flLeftDamage > flRightDamage)
            {
                FreestandSide[idx] = 1; // ROTATE_LEFT
                TracingMode[idx] = "dAA";
                return true;
            }
            else
            {
                FreestandSide[idx] = -1; // ROTATE_RIGHT
                TracingMode[idx] = "dBA";
                return true;
            }
        }
        else if (flBackDamage < 10)
        {
            if (flLeftDamage > flRightDamage)
            {
                FreestandSide[idx] = 1; // ROTATE_LEFT
                TracingMode[idx] = "dCA";
                return true;
            }
            else
            {
                FreestandSide[idx] = -1; // ROTATE_RIGHT
                TracingMode[idx] = "dDA";
                return true;
            }
        }
        else
        {
            if (fabs(flLeftFraction - flRightFraction) < flBackFraction)
            {
                if (flLeftFraction > flRightFraction)
                {
                    FreestandSide[idx] = 1;
                    TracingMode[idx] = "dEA";
                    return true;
                }
                else
                {
                    FreestandSide[idx] = -1;
                    TracingMode[idx] = "dFA";
                    return true;
                }
            }
        }
    }
    else if (flLeftDamage != flRightDamage)
    {
        if (flLeftDamage > flBackDamage && flRightDamage < flBackDamage)
        {
            FreestandSide[idx] = 1; // ROTATE_LEFT   
            TracingMode[idx] = "dGA";
            return true;
        }
        else if (flRightDamage > flBackDamage && flLeftDamage < flBackDamage)
        {
            FreestandSide[idx] = -1; // ROTATE_RIGHT
            TracingMode[idx] = "dHA";
            return true;
        }
        else
        {
            if (fabs(flLeftFraction - flRightFraction) < flBackFraction)
            {
                if (flLeftFraction > flRightFraction)
                {
                    FreestandSide[idx] = 1;
                    TracingMode[idx] = "fAA";
                    return true;
                }
                else
                {
                    FreestandSide[idx] = -1;
                    TracingMode[idx] = "fBA";
                    return true;
                }
            }
        }
    }
    else
    {
        if (flLeftDamage < 1 && flRightDamage < 1)
        {
            if (flLeftFraction != flRightFraction)
            {
                if (flLeftFraction > flBackFraction && flRightFraction < flBackFraction)
                {
                    FreestandSide[idx] = 1; // ROTATE_LEFT   
                    TracingMode[idx] = "fCA";
                    return true;
                }
                else if (flRightFraction > flBackFraction && flLeftFraction < flBackFraction)
                {
                    FreestandSide[idx] = -1; // ROTATE_RIGHT
                    TracingMode[idx] = "fDA";
                    return true;
                }
            }
            else if (fabs(flLeftFraction - flRightFraction) < flBackFraction)
            {
                if (flLeftFraction > flRightFraction)
                {
                    FreestandSide[idx] = 1;
                    TracingMode[idx] = "fEA";
                    return true;
                }
                else
                {
                    FreestandSide[idx] = -1;
                    TracingMode[idx] = "fFA";
                    return true;
                }
            }
            else
            {
                if (flRightFraction < flLeftFraction)
                {
                    FreestandSide[idx] = 1;
                    TracingMode[idx] = "fGA";
                    return true;
                }
                else
                {
                    FreestandSide[idx] = -1;
                    TracingMode[idx] = "fHA";
                    return true;
                }
            }
        }
        else
        {
            if (fabs(flLeftFraction - flRightFraction) > flBackFraction)
            {
                if (flLeftFraction > flRightFraction)
                {
                    FreestandSide[idx] = 1;
                    TracingMode[idx] = "fIA";
                    return true;
                }
                else
                {
                    FreestandSide[idx] = -1;
                    TracingMode[idx] = "fJA";
                    return true;
                }
            }
            else
            {
                if (flLeftFraction > flRightFraction)
                {
                    FreestandSide[idx] = 1;
                    TracingMode[idx] = "fKA";
                    return true;
                }
                else
                {
                    FreestandSide[idx] = -1;
                    TracingMode[idx] = "fLA";
                    return true;
                }
            }
        }
    }
    return false;
}
C++:
void CResolver::StoreAntifreestand()
{
    if (!csgo->local->isAlive())
        return;

    if (!csgo->weapon->IsGun())
        return;

    if (!vars.ragebot.resolver)
        return;

    static int delay_ticks[65] = { 0 };
    for (int i = 0; i < interfaces.engine->GetMaxClients(); ++i)
    {
        auto player = interfaces.ent_list->GetClientEntity(i);

        if (!player || !player->isAlive() || player->IsDormant()
            || player->GetTeam() == csgo->local->GetTeam() || csgo->actual_misses[player->GetIndex()] > 0) {
            UseFreestandAngle[i] = false;
            continue;
        }

        static int last_side = 0;

        auto idx = player->GetIndex();

        auto latest_animation = g_Animfix->get_latest_animation(player);
        if (!latest_animation)
            continue;

        auto point = Ragebot::Get().GetAdvancedHeadPoints(player, latest_animation->unresolved_bones);

        Ragebot::Get().BackupPlayer(latest_animation);
        Ragebot::Get().SetAnims(latest_animation, latest_animation->unresolved_bones);

        Vector direction_1, direction_2, direction_3;
        Math::AngleVectors(Vector(0.f, Math::CalculateAngle(csgo->local->GetOrigin(), player->GetOrigin()).y - player->GetDSYDelta(), 0.f), direction_1);
        Math::AngleVectors(Vector(0.f, Math::CalculateAngle(csgo->local->GetOrigin(), player->GetOrigin()).y + player->GetDSYDelta(), 0.f), direction_2);
        Math::AngleVectors(Vector(0.f, Math::CalculateAngle(csgo->local->GetOrigin(), player->GetOrigin()).y, 0.f), direction_3);
        const Vector height = player->GetBonePos(latest_animation->unresolved_bones, 8);
        Vector CurrentLocalPose(csgo->local->GetEyeAngles().x, csgo->local->GetEyeAngles().y, csgo->local->GetEyeAngles().z);

        const auto LeftEyePosition = player->GetOrigin() + Vector(0, 0, height.z) + (direction_1 * 40.f); // was 16.f
        const auto RightEyePosition = player->GetOrigin() + Vector(0, 0, height.z) + (direction_2 * 40.f);
        const auto BackEyePosition = player->GetOrigin() + Vector(0, 0, height.z) + (direction_3 * 40.f);

        flLeftDamage = g_AutoWall.Think(LeftEyePosition, player, HITGROUP_HEAD).m_damage;
        flRightDamage = g_AutoWall.Think(RightEyePosition, player, HITGROUP_HEAD).m_damage;
        flBackDamage = g_AutoWall.Think(BackEyePosition, player, HITGROUP_HEAD).m_damage;

        Ray_t ray;
        trace_t trace;
        CTraceFilter filter;

        filter.pSkip = csgo->local;

        ray.Init(CurrentLocalPose, LeftEyePosition);
        interfaces.trace->TraceRay(ray, MASK_ALL, &filter, &trace);
        flLeftFraction = trace.fraction;

        ray.Init(CurrentLocalPose, RightEyePosition);
        interfaces.trace->TraceRay(ray, MASK_ALL, &filter, &trace);
        flRightFraction = trace.fraction;

        ray.Init(CurrentLocalPose, BackEyePosition);
        interfaces.trace->TraceRay(ray, MASK_ALL, &filter, &trace);
        flBackFraction = trace.fraction;

        Ragebot::Get().RestorePlayer(latest_animation);

        if (!DetectSide(player))
            return;
    }
}
  1. dFA
  2. fHA
Многие не ожидали от меня такого говнокода. Спешу успокоить, я делал это в 4 часа ночи рофла ради.
В будущем постараюсь скидывать действительно полезные вещи, поэтому не обижайте. :roflanPominki:
 
Забаненный
Статус
Оффлайн
Регистрация
13 Июн 2020
Сообщения
227
Реакции[?]
57
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ах да, заранее скажу. Половина проверок будет скипаться из за неправильной логики.
В целом, антифристенд ресольверы это глупая вещь, которая работает 50 на 50.
Кстати, я заранее уже сделал такую вещь как TracingMode. Она поможет вам понять какие проверки чаще всего неправильно детектят, а также те, которые скипаются всегда. (Рад был стараться).
C++:
bool CResolver::DetectSide(IBasePlayer* player)
{
    if (!player || !player->isAlive())
        return false;

    auto idx = player->GetIndex();

    if (!idx)
        return false;

    if (flLeftDamage > 9 && flRightDamage > 9 /*&& flBackDamage < 10*/)
    {
        if (fabs(flLeftDamage - flRightDamage) > 10)
        {
            if (flLeftDamage > flRightDamage)
            {
                FreestandSide[idx] = 1; // ROTATE_LEFT
                TracingMode[idx] = "dAA";
                return true;
            }
            else
            {
                FreestandSide[idx] = -1; // ROTATE_RIGHT
                TracingMode[idx] = "dBA";
                return true;
            }
        }
        else if (flBackDamage < 10)
        {
            if (flLeftDamage > flRightDamage)
            {
                FreestandSide[idx] = 1; // ROTATE_LEFT
                TracingMode[idx] = "dCA";
                return true;
            }
            else
            {
                FreestandSide[idx] = -1; // ROTATE_RIGHT
                TracingMode[idx] = "dDA";
                return true;
            }
        }
        else
        {
            if (fabs(flLeftFraction - flRightFraction) < flBackFraction)
            {
                if (flLeftFraction > flRightFraction)
                {
                    FreestandSide[idx] = 1;
                    TracingMode[idx] = "dEA";
                    return true;
                }
                else
                {
                    FreestandSide[idx] = -1;
                    TracingMode[idx] = "dFA";
                    return true;
                }
            }
        }
    }
    else if (flLeftDamage != flRightDamage)
    {
        if (flLeftDamage > flBackDamage && flRightDamage < flBackDamage)
        {
            FreestandSide[idx] = 1; // ROTATE_LEFT  
            TracingMode[idx] = "dGA";
            return true;
        }
        else if (flRightDamage > flBackDamage && flLeftDamage < flBackDamage)
        {
            FreestandSide[idx] = -1; // ROTATE_RIGHT
            TracingMode[idx] = "dHA";
            return true;
        }
        else
        {
            if (fabs(flLeftFraction - flRightFraction) < flBackFraction)
            {
                if (flLeftFraction > flRightFraction)
                {
                    FreestandSide[idx] = 1;
                    TracingMode[idx] = "fAA";
                    return true;
                }
                else
                {
                    FreestandSide[idx] = -1;
                    TracingMode[idx] = "fBA";
                    return true;
                }
            }
        }
    }
    else
    {
        if (flLeftDamage < 1 && flRightDamage < 1)
        {
            if (flLeftFraction != flRightFraction)
            {
                if (flLeftFraction > flBackFraction && flRightFraction < flBackFraction)
                {
                    FreestandSide[idx] = 1; // ROTATE_LEFT  
                    TracingMode[idx] = "fCA";
                    return true;
                }
                else if (flRightFraction > flBackFraction && flLeftFraction < flBackFraction)
                {
                    FreestandSide[idx] = -1; // ROTATE_RIGHT
                    TracingMode[idx] = "fDA";
                    return true;
                }
            }
            else if (fabs(flLeftFraction - flRightFraction) < flBackFraction)
            {
                if (flLeftFraction > flRightFraction)
                {
                    FreestandSide[idx] = 1;
                    TracingMode[idx] = "fEA";
                    return true;
                }
                else
                {
                    FreestandSide[idx] = -1;
                    TracingMode[idx] = "fFA";
                    return true;
                }
            }
            else
            {
                if (flRightFraction < flLeftFraction)
                {
                    FreestandSide[idx] = 1;
                    TracingMode[idx] = "fGA";
                    return true;
                }
                else
                {
                    FreestandSide[idx] = -1;
                    TracingMode[idx] = "fHA";
                    return true;
                }
            }
        }
        else
        {
            if (fabs(flLeftFraction - flRightFraction) > flBackFraction)
            {
                if (flLeftFraction > flRightFraction)
                {
                    FreestandSide[idx] = 1;
                    TracingMode[idx] = "fIA";
                    return true;
                }
                else
                {
                    FreestandSide[idx] = -1;
                    TracingMode[idx] = "fJA";
                    return true;
                }
            }
            else
            {
                if (flLeftFraction > flRightFraction)
                {
                    FreestandSide[idx] = 1;
                    TracingMode[idx] = "fKA";
                    return true;
                }
                else
                {
                    FreestandSide[idx] = -1;
                    TracingMode[idx] = "fLA";
                    return true;
                }
            }
        }
    }
    return false;
}
C++:
void CResolver::StoreAntifreestand()
{
    if (!csgo->local->isAlive())
        return;

    if (!csgo->weapon->IsGun())
        return;

    if (!vars.ragebot.resolver)
        return;

    static int delay_ticks[65] = { 0 };
    for (int i = 0; i < interfaces.engine->GetMaxClients(); ++i)
    {
        auto player = interfaces.ent_list->GetClientEntity(i);

        if (!player || !player->isAlive() || player->IsDormant()
            || player->GetTeam() == csgo->local->GetTeam() || csgo->actual_misses[player->GetIndex()] > 0) {
            UseFreestandAngle[i] = false;
            continue;
        }

        static int last_side = 0;

        auto idx = player->GetIndex();

        auto latest_animation = g_Animfix->get_latest_animation(player);
        if (!latest_animation)
            continue;

        auto point = Ragebot::Get().GetAdvancedHeadPoints(player, latest_animation->unresolved_bones);

        Ragebot::Get().BackupPlayer(latest_animation);
        Ragebot::Get().SetAnims(latest_animation, latest_animation->unresolved_bones);

        Vector direction_1, direction_2, direction_3;
        Math::AngleVectors(Vector(0.f, Math::CalculateAngle(csgo->local->GetOrigin(), player->GetOrigin()).y - player->GetDSYDelta(), 0.f), direction_1);
        Math::AngleVectors(Vector(0.f, Math::CalculateAngle(csgo->local->GetOrigin(), player->GetOrigin()).y + player->GetDSYDelta(), 0.f), direction_2);
        Math::AngleVectors(Vector(0.f, Math::CalculateAngle(csgo->local->GetOrigin(), player->GetOrigin()).y, 0.f), direction_3);
        const Vector height = player->GetBonePos(latest_animation->unresolved_bones, 8);
        Vector CurrentLocalPose(csgo->local->GetEyeAngles().x, csgo->local->GetEyeAngles().y, csgo->local->GetEyeAngles().z);

        const auto LeftEyePosition = player->GetOrigin() + Vector(0, 0, height.z) + (direction_1 * 40.f); // was 16.f
        const auto RightEyePosition = player->GetOrigin() + Vector(0, 0, height.z) + (direction_2 * 40.f);
        const auto BackEyePosition = player->GetOrigin() + Vector(0, 0, height.z) + (direction_3 * 40.f);

        flLeftDamage = g_AutoWall.Think(LeftEyePosition, player, HITGROUP_HEAD).m_damage;
        flRightDamage = g_AutoWall.Think(RightEyePosition, player, HITGROUP_HEAD).m_damage;
        flBackDamage = g_AutoWall.Think(BackEyePosition, player, HITGROUP_HEAD).m_damage;

        Ray_t ray;
        trace_t trace;
        CTraceFilter filter;

        filter.pSkip = csgo->local;

        ray.Init(CurrentLocalPose, LeftEyePosition);
        interfaces.trace->TraceRay(ray, MASK_ALL, &filter, &trace);
        flLeftFraction = trace.fraction;

        ray.Init(CurrentLocalPose, RightEyePosition);
        interfaces.trace->TraceRay(ray, MASK_ALL, &filter, &trace);
        flRightFraction = trace.fraction;

        ray.Init(CurrentLocalPose, BackEyePosition);
        interfaces.trace->TraceRay(ray, MASK_ALL, &filter, &trace);
        flBackFraction = trace.fraction;

        Ragebot::Get().RestorePlayer(latest_animation);

        if (!DetectSide(player))
            return;
    }
}
  1. dFA
  2. fHA
Многие не ожидали от меня такого говнокода. Спешу успокоить, я делал это в 4 часа ночи рофла ради.
В будущем постараюсь скидывать действительно полезные вещи, поэтому не обижайте. :roflanPominki:
по трейсера ) ну костыльно костыльно
 
Keep Ev0lving, Stay Fatal
Эксперт
Статус
Оффлайн
Регистрация
6 Фев 2018
Сообщения
1,550
Реакции[?]
585
Поинты[?]
101K
по трейсера ) ну костыльно костыльно
Собственно, я постарался понять, в каких ситуациях что лучше будет ресольвить (Хотя по факту это одно и тоже).
В любом случае, методом антифристенда мы просто выбираем в какой ситуации будет лучше сторона для противника (То есть его фристенда для десинка) и будет иметь меньший дамаг.
Мы не используем никакие вычисления, полученные с сервера (которых и так немного), чтобы постараться найти их десинк.
Именно поэтому это тупейший метод вычисления реала.
Таким образом, я постарался доказать что это не стоит внимания новых пастеров, а старых кодеров лишь в очередной раз убедит насколько они были правы.
 
Дизайнер
Статус
Оффлайн
Регистрация
18 Авг 2017
Сообщения
1,931
Реакции[?]
2,258
Поинты[?]
146K
Товары в продаже
1
Хороший ресольвер, но есть свои минусы.

Во-первых, почему-то хсает в пятки.
Во-вторых, убиваю противников на другом сервере.
В-третьих, банихоп не работает.
 
Забаненный
Статус
Оффлайн
Регистрация
13 Июн 2020
Сообщения
227
Реакции[?]
57
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Начинающий
Статус
Оффлайн
Регистрация
26 Янв 2019
Сообщения
113
Реакции[?]
12
Поинты[?]
7K
Хороший ресольвер, но есть свои минусы.

Во-первых, почему-то хсает в пятки.
Во-вторых, убиваю противников на другом сервере.
В-третьих, банихоп не работает.
У тебя хсает в пятки? У меня вообще он хсает в стрейфы противника под углом 360 градусов в боди на 390 хп :LUL:
 
Сверху Снизу