• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

Вопрос Помогите с бхопом пожалуйста

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
27 Дек 2024
Сообщения
19
Реакции
1
Я написал простой интернальный бхоп, но он прыгает вообще не в тайминги, как это исправить? Заранее спасибо

C++:
Expand Collapse Copy
#include <Windows.h>
#include <cstdint>
#include <thread>
#include <chrono>
#include <iostream>

namespace Offsets
{
    constexpr std::ptrdiff_t jump = 0x1884C40;
}

void BunnyHop(HMODULE instance) {
    uintptr_t client = reinterpret_cast<uintptr_t>(GetModuleHandleA("client.dll"));

    if (!client) {
        std::cout << "Ошибка: клиентский модуль не найден." << std::endl;
        return;
    }

    while (true) {
        std::this_thread::sleep_for(std::chrono::milliseconds(1));

        if (GetAsyncKeyState(VK_SPACE) & 0x8000) {
            *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 65537;
            Sleep(0.01);
            *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 256;
        }
    }
}

int __stdcall DllMain(HMODULE instance, DWORD reason, void* reserved) {
    if (reason == DLL_PROCESS_ATTACH) {
        DisableThreadLibraryCalls(instance);

        auto thread = CreateThread(nullptr, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(BunnyHop), instance, 0, nullptr);

        if (thread)
            CloseHandle(thread);
    }

    return TRUE;
}
 
сначало тебе нужно найти адрес localplayer (std::uintptr_t LocalPlayer = mem.Read<std::uintptr_t>(client + dwLocalPlayerPawn);) и с помощью смещения получаешь адрес m_fFlags (uintptr_t fFlag = mem.Read<std::uint32_t>(LocalPlayer + m_fFlag);)
ну и делаешь проверку if (m_fFlags == fl_ground) *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 65537;
 
сначало тебе нужно найти адрес localplayer (std::uintptr_t LocalPlayer = mem.Read<std::uintptr_t>(client + dwLocalPlayerPawn);) и с помощью смещения получаешь адрес m_fFlags (uintptr_t fFlag = mem.Read<std::uint32_t>(LocalPlayer + m_fFlag);)
ну и делаешь проверку if (m_fFlags == fl_ground) *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 65537;

типо так?


Код:
Expand Collapse Copy
#include <Windows.h>
#include <cstdint>
#include <thread>
#include <chrono>
#include <iostream>

namespace Offsets
{
    constexpr std::ptrdiff_t dwLocalPlayerPawn = 0x188BF30;
    constexpr std::ptrdiff_t m_fFlags = 0x63;
    constexpr std::ptrdiff_t jump = 0x1884C40;
    constexpr int fl_ground = 1;
}

uintptr_t GetClientModule()
{
    return reinterpret_cast<uintptr_t>(GetModuleHandleA("client.dll"));
}

template <typename T>
T ReadMemory(uintptr_t address)
{
    return *reinterpret_cast<T*>(address);
}

void BunnyHop()
{
    uintptr_t client = GetClientModule();
    if (!client) {
        std::cout << "Ошибка: клиентский модуль не найден." << std::endl;
        return;
    }

    while (true) {
        std::this_thread::sleep_for(std::chrono::milliseconds(1));

        if (GetAsyncKeyState(VK_SPACE) & 0x8000) {
            uintptr_t LocalPlayer = ReadMemory<uintptr_t>(client + Offsets::dwLocalPlayerPawn);
            if (!LocalPlayer) continue;

            int fFlags = ReadMemory<int>(LocalPlayer + Offsets::m_fFlags);
            if (fFlags & Offsets::fl_ground) {
                *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 65537;
                Sleep(1);
                *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 256;
            }
        }
    }
}

int __stdcall DllMain(HMODULE instance, DWORD reason, void* reserved) {
    if (reason == DLL_PROCESS_ATTACH) {
        DisableThreadLibraryCalls(instance);
        auto thread = CreateThread(nullptr, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(BunnyHop), instance, 0, nullptr);
        if (thread)
            CloseHandle(thread);
    }
    return TRUE;
}
 
типо так?


Код:
Expand Collapse Copy
#include <Windows.h>
#include <cstdint>
#include <thread>
#include <chrono>
#include <iostream>

namespace Offsets
{
    constexpr std::ptrdiff_t dwLocalPlayerPawn = 0x188BF30;
    constexpr std::ptrdiff_t m_fFlags = 0x63;
    constexpr std::ptrdiff_t jump = 0x1884C40;
    constexpr int fl_ground = 1;
}

uintptr_t GetClientModule()
{
    return reinterpret_cast<uintptr_t>(GetModuleHandleA("client.dll"));
}

template <typename T>
T ReadMemory(uintptr_t address)
{
    return *reinterpret_cast<T*>(address);
}

void BunnyHop()
{
    uintptr_t client = GetClientModule();
    if (!client) {
        std::cout << "Ошибка: клиентский модуль не найден." << std::endl;
        return;
    }

    while (true) {
        std::this_thread::sleep_for(std::chrono::milliseconds(1));

        if (GetAsyncKeyState(VK_SPACE) & 0x8000) {
            uintptr_t LocalPlayer = ReadMemory<uintptr_t>(client + Offsets::dwLocalPlayerPawn);
            if (!LocalPlayer) continue;

            int fFlags = ReadMemory<int>(LocalPlayer + Offsets::m_fFlags);
            if (fFlags & Offsets::fl_ground) {
                *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 65537;
                Sleep(1);
                *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 256;
            }
        }
    }
}

int __stdcall DllMain(HMODULE instance, DWORD reason, void* reserved) {
    if (reason == DLL_PROCESS_ATTACH) {
        DisableThreadLibraryCalls(instance);
        auto thread = CreateThread(nullptr, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(BunnyHop), instance, 0, nullptr);
        if (thread)
            CloseHandle(thread);
    }
    return TRUE;
}
только если игрок находится на земле то тогда он должен прыгать

C++:
Expand Collapse Copy
 if (fFlags & Offsets::fl_ground) {

                *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 65537;

                }else{

                *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 256;

            }

и лучше с помощью cheat engine посмотри m_fFlags чтобы узнать значение нахождение игрока на земле.
там увидешь что число изменяется при прыжке , присяде и т.д
 
только если игрок находится на земле то тогда он должен прыгать

C++:
Expand Collapse Copy
 if (fFlags & Offsets::fl_ground) {

                *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 65537;

                }else{

                *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 256;

            }

и лучше с помощью cheat engine посмотри m_fFlags чтобы узнать значение нахождение игрока на земле.
там увидешь что число изменяется при прыжке , присяде и т.д
попробовал, но неработает вообще, незнаю почему

вот код

Код:
Expand Collapse Copy
#include <Windows.h>
#include <cstdint>
#include <thread>
#include <chrono>
#include <iostream>

namespace Offsets
{
    constexpr std::ptrdiff_t dwLocalPlayerPawn = 0x188BF30;
    constexpr std::ptrdiff_t m_fFlags = 0x63;
    constexpr std::ptrdiff_t jump = 0x1884C40;
    constexpr int fl_ground = 1;
}

uintptr_t GetClientModule()
{
    return reinterpret_cast<uintptr_t>(GetModuleHandleA("client.dll"));
}

template <typename T>
T ReadMemory(uintptr_t address)
{
    return *reinterpret_cast<T*>(address);
}

void BunnyHop()
{
    uintptr_t client = GetClientModule();
    if (!client) {
        std::cout << "Ошибка: клиентский модуль не найден." << std::endl;
        return;
    }

    while (true) {
        std::this_thread::sleep_for(std::chrono::milliseconds(1));

        if (GetAsyncKeyState(VK_SPACE) & 0x8000) {
            uintptr_t LocalPlayer = ReadMemory<uintptr_t>(client + Offsets::dwLocalPlayerPawn);
            if (!LocalPlayer) continue;

            int fFlags = ReadMemory<int>(LocalPlayer + Offsets::m_fFlags);
            if (fFlags & Offsets::fl_ground) {
                *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 65537;
            }
            else {
                *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 256;
            }
        }
    }
}

int __stdcall DllMain(HMODULE instance, DWORD reason, void* reserved) {
    if (reason == DLL_PROCESS_ATTACH) {
        DisableThreadLibraryCalls(instance);
        auto thread = CreateThread(nullptr, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(BunnyHop), instance, 0, nullptr);
        if (thread)
            CloseHandle(thread);
    }
    return TRUE;
}
 
попробовал, но неработает вообще, незнаю почему

вот код

Код:
Expand Collapse Copy
#include <Windows.h>
#include <cstdint>
#include <thread>
#include <chrono>
#include <iostream>

namespace Offsets
{
    constexpr std::ptrdiff_t dwLocalPlayerPawn = 0x188BF30;
    constexpr std::ptrdiff_t m_fFlags = 0x63;
    constexpr std::ptrdiff_t jump = 0x1884C40;
    constexpr int fl_ground = 1;
}

uintptr_t GetClientModule()
{
    return reinterpret_cast<uintptr_t>(GetModuleHandleA("client.dll"));
}

template <typename T>
T ReadMemory(uintptr_t address)
{
    return *reinterpret_cast<T*>(address);
}

void BunnyHop()
{
    uintptr_t client = GetClientModule();
    if (!client) {
        std::cout << "Ошибка: клиентский модуль не найден." << std::endl;
        return;
    }

    while (true) {
        std::this_thread::sleep_for(std::chrono::milliseconds(1));

        if (GetAsyncKeyState(VK_SPACE) & 0x8000) {
            uintptr_t LocalPlayer = ReadMemory<uintptr_t>(client + Offsets::dwLocalPlayerPawn);
            if (!LocalPlayer) continue;

            int fFlags = ReadMemory<int>(LocalPlayer + Offsets::m_fFlags);
            if (fFlags & Offsets::fl_ground) {
                *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 65537;
            }
            else {
                *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 256;
            }
        }
    }
}

int __stdcall DllMain(HMODULE instance, DWORD reason, void* reserved) {
    if (reason == DLL_PROCESS_ATTACH) {
        DisableThreadLibraryCalls(instance);
        auto thread = CreateThread(nullptr, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(BunnyHop), instance, 0, nullptr);
        if (thread)
            CloseHandle(thread);
    }
    return TRUE;
}
при проверки m_fFlags & fl_ground там другое значение, можешь с помощью cheat engine посмотреть.
в интернете я нашел int fl_ground = 65665;
 
при проверки m_fFlags & fl_ground там другое значение, можешь с помощью cheat engine посмотреть.
в интернете я нашел int fl_ground = 65665;
я просто вообще не понимаю как через читенджн смотореть, просто я смотрю m_fFlags и там какоето рандомное число вообще
 
я просто вообще не понимаю как через читенджн смотореть, просто я смотрю m_fFlags и там какоето рандомное число вообще
на ютубчике много гайдов
1741983729314.png

это как пример, то есть ты подключаешься к процессу cs2 потом добавляешь адрес. в твой случае это так client.dll+0x188BF30 ставишь галочку на pointer и добавляешь смещение m_fFlags
 
Последнее редактирование:
на ютубчике много гайдов
Посмотреть вложение 301147
это как пример, то есть ты подключаешься к процессу cs2 потом добавляешь адрес. в твой случае это так client.dll+0x188BF30 ставишь галочку на pointer и добавляешь смещение m_fFlags
а это смещение типо если я пишу в поинтер m_fFlags, то просто красным светиться
1741985232506.png

или мневсе как у тебя на скрине делать
 
а это смещение типо если я пишу в поинтер m_fFlags, то просто красным светитьсяПосмотреть вложение 301149
или мневсе как у тебя на скрине делать
не ,тебе не именно m_fFlags вписывать а смещение его.
0x63
рекомендую тебе посмотреть гайды на ютубчике как работать с cheat engine, так ты не поймешь что да как работает
 
не ,тебе не именно m_fFlags вписывать а смещение его.
0x63
рекомендую тебе посмотреть гайды на ютубчике как работать с cheat engine, так ты не поймешь что да как работает

странно, вроде посмотрел, все совпало, но бхоп неработает
 
Братан скинь код который у тебя сейчас.

скинь код который у тебя сейчас
Код:
Expand Collapse Copy
#include <Windows.h>
#include <cstdint>
#include <thread>
#include <chrono>
#include <iostream>

namespace Offsets
{
    constexpr std::ptrdiff_t dwLocalPlayerPawn = 0x188BF30;
    constexpr std::ptrdiff_t m_fFlags = 0x3EC;
    constexpr std::ptrdiff_t jump = 0x1884C40;
    constexpr int fl_ground = 65665;
}

uintptr_t GetClientModule()
{
    return reinterpret_cast<uintptr_t>(GetModuleHandleA("client.dll"));
}

template <typename T>
T ReadMemory(uintptr_t address)
{
    return *reinterpret_cast<T*>(address);
}

void BunnyHop()
{
    uintptr_t client = GetClientModule();
    if (!client) {
        std::cout << "Ошибка: клиентский модуль не найден." << std::endl;
        return;
    }

    while (true) {
        std::this_thread::sleep_for(std::chrono::milliseconds(1));

        if (GetAsyncKeyState(VK_SPACE) & 0x8000) {
            uintptr_t LocalPlayer = ReadMemory<uintptr_t>(client + Offsets::dwLocalPlayerPawn);
            if (!LocalPlayer) continue;

            int fFlags = ReadMemory<int>(LocalPlayer + Offsets::m_fFlags);
            if (fFlags & Offsets::fl_ground) {

                *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 65537;
            }
            else {
                *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 256;
            }
        }
    }
}

int __stdcall DllMain(HMODULE instance, DWORD reason, void* reserved) {
    if (reason == DLL_PROCESS_ATTACH) {
        DisableThreadLibraryCalls(instance);
        auto thread = CreateThread(nullptr, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(BunnyHop), instance, 0, nullptr);
        if (thread)
            CloseHandle(thread);
    }
    return TRUE;
}
 
Код:
Expand Collapse Copy
#include <Windows.h>
#include <cstdint>
#include <thread>
#include <chrono>
#include <iostream>

namespace Offsets
{
    constexpr std::ptrdiff_t dwLocalPlayerPawn = 0x188BF30;
    constexpr std::ptrdiff_t m_fFlags = 0x3EC;
    constexpr std::ptrdiff_t jump = 0x1884C40;
    constexpr int fl_ground = 65665;
}

uintptr_t GetClientModule()
{
    return reinterpret_cast<uintptr_t>(GetModuleHandleA("client.dll"));
}

template <typename T>
T ReadMemory(uintptr_t address)
{
    return *reinterpret_cast<T*>(address);
}

void BunnyHop()
{
    uintptr_t client = GetClientModule();
    if (!client) {
        std::cout << "Ошибка: клиентский модуль не найден." << std::endl;
        return;
    }

    while (true) {
        std::this_thread::sleep_for(std::chrono::milliseconds(1));

        if (GetAsyncKeyState(VK_SPACE) & 0x8000) {
            uintptr_t LocalPlayer = ReadMemory<uintptr_t>(client + Offsets::dwLocalPlayerPawn);
            if (!LocalPlayer) continue;

            int fFlags = ReadMemory<int>(LocalPlayer + Offsets::m_fFlags);
            if (fFlags & Offsets::fl_ground) {

                *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 65537;
            }
            else {
                *reinterpret_cast<uintptr_t*>(client + Offsets::jump) = 256;
            }
        }
    }
}

int __stdcall DllMain(HMODULE instance, DWORD reason, void* reserved) {
    if (reason == DLL_PROCESS_ATTACH) {
        DisableThreadLibraryCalls(instance);
        auto thread = CreateThread(nullptr, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(BunnyHop), instance, 0, nullptr);
        if (thread)
            CloseHandle(thread);
    }
    return TRUE;
}
смотри есть несколько причин почему он может не работать
1. тебе надо делать проверку fFlags == Offsets::fl_ground потому что это полное число
2.добавить задержку, я думаю это из-за субтика такое

Код:
Expand Collapse Copy
if (flags == 65665 || flags == 65667) {
    std::this_thread::sleep_for(std::chrono::milliseconds(10));
    mem.write_process_memory<uint32_t>(jump, 65537);
}
else {
    std::this_thread::sleep_for(std::chrono::milliseconds(10));
    mem.write_process_memory<uint32_t>(jump, 256);
}
 
смотри есть несколько причин почему он может не работать
1. тебе надо делать проверку fFlags == Offsets::fl_ground потому что это полное число
2.добавить задержку, я думаю это из-за субтика такое

Код:
Expand Collapse Copy
if (flags == 65665 || flags == 65667) {
    std::this_thread::sleep_for(std::chrono::milliseconds(10));
    mem.write_process_memory<uint32_t>(jump, 65537);
}
else {
    std::this_thread::sleep_for(std::chrono::milliseconds(10));
    mem.write_process_memory<uint32_t>(jump, 256);
}
спасибо большое, работает
 
смотри есть несколько причин почему он может не работать
1. тебе надо делать проверку fFlags == Offsets::fl_ground потому что это полное число
2.добавить задержку, я думаю это из-за субтика такое

Код:
Expand Collapse Copy
if (flags == 65665 || flags == 65667) {
    std::this_thread::sleep_for(std::chrono::milliseconds(10));
    mem.write_process_memory<uint32_t>(jump, 65537);
}
else {
    std::this_thread::sleep_for(std::chrono::milliseconds(10));
    mem.write_process_memory<uint32_t>(jump, 256);
}

я заметел, если присидать прямо перед приземлением, бхопит лучше, с чем это можнт быть связано?
 
Назад
Сверху Снизу