Вопрос Аим, антиотдача, офсеты

Начинающий
Статус
Оффлайн
Регистрация
22 Янв 2025
Сообщения
15
Реакции[?]
0
Поинты[?]
0
Парни, у меня есть аим который считает прицелом центр экрана или окна(неважно), мне хотелось бы сделать подобие антиотдачи.
В игре есть функция следовать за отдачей, следовательно в недрах игры есть координаты прицела на экране. Наверняка через офсеты можно получить эти координаты.
Помогите пажожда
 
Начинающий
Статус
Оффлайн
Регистрация
8 Дек 2020
Сообщения
110
Реакции[?]
26
Поинты[?]
6K
C++:
        if (C_GET(bool, Vars.bNoRecoil))
            {
                static auto prev = QAngle_t(0.f, 0.f, 0.f);
                auto cache = pLocalPawn->m_aimPunchCache();
                auto pred_punch = cache.m_Data[cache.m_Size - 1];
                auto delta = prev - pred_punch * 2.f;
                if (cache.m_Size > 0 && cache.m_Size <= 0xFFFF)
                {
                    pred_punch = cache.m_Data[cache.m_Size - 1];
                    prev = pred_punch;
                }
 
                finalAngle += delta * 2.f;
            }
constexpr std::ptrdiff_t m_aimPunchCache = 0x15A8; // CUtlVector<QAngle>
 
Начинающий
Статус
Оффлайн
Регистрация
22 Янв 2025
Сообщения
15
Реакции[?]
0
Поинты[?]
0
C++:
        if (C_GET(bool, Vars.bNoRecoil))
            {
                static auto prev = QAngle_t(0.f, 0.f, 0.f);
                auto cache = pLocalPawn->m_aimPunchCache();
                auto pred_punch = cache.m_Data[cache.m_Size - 1];
                auto delta = prev - pred_punch * 2.f;
                if (cache.m_Size > 0 && cache.m_Size <= 0xFFFF)
                {
                    pred_punch = cache.m_Data[cache.m_Size - 1];
                    prev = pred_punch;
                }

                finalAngle += delta * 2.f;
            }
constexpr std::ptrdiff_t m_aimPunchCache = 0x15A8; // CUtlVector<QAngle>
Можно подробнее, где откуда куда как
 
Начинающий
Статус
Оффлайн
Регистрация
8 Дек 2020
Сообщения
110
Реакции[?]
26
Поинты[?]
6K
C++:
        if (C_GET(bool, Vars.bNoRecoil))
            {
                static auto prev = QAngle_t(0.f, 0.f, 0.f);
                auto cache = pLocalPawn->m_aimPunchCache();
                auto pred_punch = cache.m_Data[cache.m_Size - 1];
                auto delta = prev - pred_punch * 2.f;
                if (cache.m_Size > 0 && cache.m_Size <= 0xFFFF)
                {
                    pred_punch = cache.m_Data[cache.m_Size - 1];
                    prev = pred_punch;
                }

                finalAngle += delta * 2.f;
            }
constexpr std::ptrdiff_t m_aimPunchCache = 0x15A8; // CUtlVector<QAngle>
если итернал получешь через схему m_aimPunchCach
SCHEMA(C_CSPlayerPawn*, m_aimPunchCach, "C_CSPlayerPawn", "m_aimPunchCach");


Код:
        if (C_GET(bool, Vars.bNoRecoil))
            {
                // создаем QAngle для преведущего значения
                static auto prev = QAngle_t(0.f, 0.f, 0.f);
..              // полчуаем кеш разброса
                auto cache = pLocalPawn->m_aimPunchCache();
                // получаем преведущее значение панча
                auto pred_punch = cache.m_Data[cache.m_Size - 1];
                auto delta = prev - pred_punch * 2.f;
                // если есть отдача
                if (cache.m_Size > 0 && cache.m_Size <= 0xFFFF)
                {
                    // форсим новое значние
                    pred_punch = cache.m_Data[cache.m_Size - 1];
                    prev = pred_punch;
                }
                
                // финальное значение позиции камеры 2.f - компенсация
                finalAngle += delta * 2.f;
            }
 
Начинающий
Статус
Оффлайн
Регистрация
22 Янв 2025
Сообщения
15
Реакции[?]
0
Поинты[?]
0
если итернал получешь через схему m_aimPunchCach
SCHEMA(C_CSPlayerPawn*, m_aimPunchCach, "C_CSPlayerPawn", "m_aimPunchCach");


Код:
        if (C_GET(bool, Vars.bNoRecoil))
            {
                // создаем QAngle для преведущего значения
                static auto prev = QAngle_t(0.f, 0.f, 0.f);
..              // полчуаем кеш разброса
                auto cache = pLocalPawn->m_aimPunchCache();
                // получаем преведущее значение панча
                auto pred_punch = cache.m_Data[cache.m_Size - 1];
                auto delta = prev - pred_punch * 2.f;
                // если есть отдача
                if (cache.m_Size > 0 && cache.m_Size <= 0xFFFF)
                {
                    // форсим новое значние
                    pred_punch = cache.m_Data[cache.m_Size - 1];
                    prev = pred_punch;
                }
           
                // финальное значение позиции камеры 2.f - компенсация
                finalAngle += delta * 2.f;
            }
Сорян что сразу не объяснил, чит экстернал. Я смог прочитать "m_aimPunchCach" но там странные значения типа 1.889798е27 т.д., они меняются во во время стрельбы но как их использовать не понял.
Я смог использовать m_aimPunchAngle но значения там меняются только во время выстрела и это очень неудобно.
Можешь рассказать как преобразовать значения из m_aimPunchCach в понятные углы как в m_aimPunchAngle или можетя я чёт не так делаю.
В идеале получить координаты позиции прицела в пикселях, как при включенной функции следовать за отдачей или узнать текущий угол куда будет произведён выстрел.
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
8 Дек 2020
Сообщения
110
Реакции[?]
26
Поинты[?]
6K
Сорян что сразу не объяснил, чит экстернал. Я смог прочитать "m_aimPunchCach" но там странные значения типа 1.889798е27 т.д., они меняются во во время стрельбы но как их использовать не понял.
Я смог использовать m_aimPunchAngle но значения там меняются только во время выстрела и это очень неудобно.
Можешь рассказать как преобразовать значения из m_aimPunchCach в понятные углы как в m_aimPunchAngle или можетя я чёт не так делаю.
В идеале получить координаты позиции прицела в пикселях, как при включенной функции следовать за отдачей или узнать текущий угол куда будет произведён выстрел.

C++:
VOID STANDALONE_RCS()
{
    float aimPunch_x = player.AimPunchAngle;
    float aimPunch_y = Memory::ReadMemory<float>(player.localPlayerPawn + player.AimPunchAngle + 0x4);
    if (player.IsFiring > 1)
    {
        auto delta_x = (aimPunch_x - Config::RCS::oldPunch_x) * -1.0;
        auto delta_y = (aimPunch_y - Config::RCS::oldPunch_y) * -1.0;
        auto mouse_x = int((delta_y * 2.0 / player.Sensitivity) / -0.022);
        auto mouse_y = int((delta_x * 2.0 / player.Sensitivity) / 0.022);
 
        MouseEvents::SimulateMouseMove(mouse_x, mouse_y);
        Config::RCS::oldPunch_x = aimPunch_x;
        Config::RCS::oldPunch_y = aimPunch_y;
    }
    else
    {
        Config::RCS::oldPunch_x = aimPunch_x; // 0
        Config::RCS::oldPunch_y = aimPunch_y; // 0
    }
}
 
Начинающий
Статус
Оффлайн
Регистрация
22 Янв 2025
Сообщения
15
Реакции[?]
0
Поинты[?]
0
C++:
VOID STANDALONE_RCS()
{
    float aimPunch_x = player.AimPunchAngle;
    float aimPunch_y = Memory::ReadMemory<float>(player.localPlayerPawn + player.AimPunchAngle + 0x4);
    if (player.IsFiring > 1)
    {
        auto delta_x = (aimPunch_x - Config::RCS::oldPunch_x) * -1.0;
        auto delta_y = (aimPunch_y - Config::RCS::oldPunch_y) * -1.0;
        auto mouse_x = int((delta_y * 2.0 / player.Sensitivity) / -0.022);
        auto mouse_y = int((delta_x * 2.0 / player.Sensitivity) / 0.022);

        MouseEvents::SimulateMouseMove(mouse_x, mouse_y);
        Config::RCS::oldPunch_x = aimPunch_x;
        Config::RCS::oldPunch_y = aimPunch_y;
    }
    else
    {
        Config::RCS::oldPunch_x = aimPunch_x; // 0
        Config::RCS::oldPunch_y = aimPunch_y; // 0
    }
}
Я глупянькив и плохо понимаю.
oldPunch_x откуда это

float aimPunch_x = player.AimPunchAngle; почему тут так
float aimPunch_y = Memory::ReadMemory<float>(player.localPlayerPawn + player.AimPunchAngle + 0x4); а тут так
там как я понял в AimPunchAngle все углы в одном, а тут в x одно а в y другое.
Распиши если не в падлу, ты и так помог, я в целом смогу сделать на aimPunchAngle, но там один большой костыль у меня выходит я уверен можно по другому.
Запрос у меня спицифичный, а познания скудны.
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
8 Дек 2020
Сообщения
110
Реакции[?]
26
Поинты[?]
6K
C++:
struct c_utl_vector
{
    DWORD64 count;
    DWORD64 data;
};

vector2_t old_aim_punch = nullptr;

void recoil_control_system() {
    if (!player.local_player_pawn)
        return;

    c_utl_vector aim_punch_cache = mem::Read<c_utl_vector>(local_player + offsets::m_aimPunchCache);
    vector2_t aim_punch_angle;

    uintptr_t dw_sensitivity = mem::Read<uintptr_t>(mem::baseAddress + offsets::dwSensitivity); // private
    float sensitivity = mem::Read<float>(dw_sensitivity + offsets::dwSensitivity_sensitivity);

    int shots_fired = mem::Read<int>(local_player + offsets::m_iShotsFired);
    if (aim_punch_cache.count > 0 && aim_punch_cache <= 0xFFFF) {
        aim_punch_angle = mem::Read<Vector2>(punchCache.data + (punchCache.count - 1) * sizeof(vector3_t));

        if (aim_punch_angle.zero())
            return;

        if (shots_fired > 1) {
            float x = (aim_punch_angle.x - old_aim_punch.x) * -1.0f;
            float y = (aim_punch_angle.y - old_aim_punch.y) * -1.0f;

            int mouse_angle_x = (int)(((y * 2.0f) / sensitivity) / -0.022f);
            int mouse_angle_y = (int)(((x * 2.0f) / sensitivity) / 0.022f);

            mouse_event(MOUSEEVENTF_MOVE, mouse_angle_x, mouse_angle_y, NULL, NULL);
        }

        old_aim_punch = aim_punch_angle;
    }
}
может так будеи понятнее
 
Начинающий
Статус
Оффлайн
Регистрация
22 Янв 2025
Сообщения
15
Реакции[?]
0
Поинты[?]
0
C++:
struct c_utl_vector
{
    DWORD64 count;
    DWORD64 data;
};

vector2_t old_aim_punch = nullptr;

void recoil_control_system() {
    if (!player.local_player_pawn)
        return;

    c_utl_vector aim_punch_cache = mem::Read<c_utl_vector>(local_player + offsets::m_aimPunchCache);
    vector2_t aim_punch_angle;

    uintptr_t dw_sensitivity = mem::Read<uintptr_t>(mem::baseAddress + offsets::dwSensitivity); // private
    float sensitivity = mem::Read<float>(dw_sensitivity + offsets::dwSensitivity_sensitivity);

    int shots_fired = mem::Read<int>(local_player + offsets::m_iShotsFired);
    if (aim_punch_cache.count > 0 && aim_punch_cache <= 0xFFFF) {
        aim_punch_angle = mem::Read<Vector2>(punchCache.data + (punchCache.count - 1) * sizeof(vector3_t));

        if (aim_punch_angle.zero())
            return;

        if (shots_fired > 1) {
            float x = (aim_punch_angle.x - old_aim_punch.x) * -1.0f;
            float y = (aim_punch_angle.y - old_aim_punch.y) * -1.0f;

            int mouse_angle_x = (int)(((y * 2.0f) / sensitivity) / -0.022f);
            int mouse_angle_y = (int)(((x * 2.0f) / sensitivity) / 0.022f);

            mouse_event(MOUSEEVENTF_MOVE, mouse_angle_x, mouse_angle_y, NULL, NULL);
        }

        old_aim_punch = aim_punch_angle;
    }
}
может так будеи понятнее
Не сильно понятней стало :)
Я сделал по своему, в целом неплохо получилось.
Спасибо за помощь, ты сильно помог :kissingheart:
 
Начинающий
Статус
Оффлайн
Регистрация
3 Окт 2021
Сообщения
84
Реакции[?]
24
Поинты[?]
18K
В игре есть векторное значение в виде нетвара, которая возвращает панч англ. Вот берешь его и грубо говоря вычитаешь его от текущего значения вьюангла.
 
Начинающий
Статус
Оффлайн
Регистрация
22 Янв 2025
Сообщения
15
Реакции[?]
0
Поинты[?]
0
В игре есть векторное значение в виде нетвара, которая возвращает панч англ. Вот берешь его и грубо говоря вычитаешь его от текущего значения вьюангла.
Йоу, это как тюремный сленг только у программистов?
Если можно, распиши по подробнее буду очень признателен 🍌
 
Начинающий
Статус
Оффлайн
Регистрация
13 Сен 2022
Сообщения
87
Реакции[?]
3
Поинты[?]
3K
Йоу, это как тюремный сленг только у программистов?
Если можно, распиши по подробнее буду очень признателен 🍌
если ты хочешь каких то туториалов и гайдов по читдеву на плюсах, то тебе в помощь гугл, если тебе нужна какая то практика по кс2, то качай сурсы асфиксии новые паттерны делай и все, или можешь скачать сурсы пидорайса, там конечно фиксить много, но хотя бы что то уже есть
 
Начинающий
Статус
Оффлайн
Регистрация
22 Янв 2025
Сообщения
15
Реакции[?]
0
Поинты[?]
0
если ты хочешь каких то туториалов и гайдов по читдеву на плюсах, то тебе в помощь гугл, если тебе нужна какая то практика по кс2, то качай сурсы асфиксии новые паттерны делай и все, или можешь скачать сурсы пидорайса, там конечно фиксить много, но хотя бы что то уже есть
😭Ну вопрос же про ОФСЕТЫ И АНТИОТДАЧУ, ну зачем флудить не по теме, н нинада
 
Начинающий
Статус
Оффлайн
Регистрация
8 Дек 2020
Сообщения
110
Реакции[?]
26
Поинты[?]
6K
Йоу, это как тюремный сленг только у программистов?
Если можно, распиши по подробнее буду очень признателен 🍌
ты получаешь с игры значение punh_angel и вычитаешь его его от такушего положения камеры и так у тебя получаеться антиотдача
 
Начинающий
Статус
Оффлайн
Регистрация
22 Янв 2025
Сообщения
15
Реакции[?]
0
Поинты[?]
0
Сверху Снизу