• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

Вопрос External Kernel Bunny Hop

Dancin' in September
Пользователь
Пользователь
Статус
Оффлайн
Регистрация
26 Янв 2021
Сообщения
449
Реакции
44
гайс, столкнулся с проблемой, написал себе kernel драйвер для читика на бхоп, но хитает он так себе. максимум 4-5 прыжков на локалке, а на сервере ни одного тайминг прыжка, дальше сброс вело.
либо у меня код говна, либо может ioctl медленный? или это из-за сабтика...


bunny_hop.cpp:
Expand Collapse Copy
on_ground = ( game_process.read_memory< uint8_t >( local_player + offsets::m_fFlags ) ) & 1;

if ( game_process.is_foreground()  )
{  
    if ( GetAsyncKeyState( VK_SPACE ) < 0 )
    {
        if ( on_ground )
        {
            std::this_thread::sleep_for( std::chrono::milliseconds( 1 ) );

            game_process.write_memory< uint32_t >( game_process.get_client_module() + offsets::dwForceJump,
                                                   do_jump );

            std::this_thread::sleep_for( std::chrono::milliseconds( 1 ) );

            game_process.write_memory< uint32_t >( game_process.get_client_module() + offsets::dwForceJump,
                                                   do_not_jump );
        }
        else
        {
            game_process.write_memory< uint32_t >( game_process.get_client_module() + offsets::dwForceJump,
                                                   do_not_jump );
        }
    }
}
код сверху лучший результат которого я смог добиться. но даже с ним максимум 2 идеальных прыжка на серверах valve
 
Последнее редактирование:
сделай по другому, без чтения памяти просто по таймеру
вот простой пример
slow bhop:
Expand Collapse Copy
        if (GetAsyncKeyState(VK_SPACE) & 0x8000)
        {
            static auto lastHopTime = std::chrono::steady_clock::now();
            auto now = std::chrono::steady_clock::now();
            auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(now - lastHopTime);

            if (elapsed.count() > 40)
            {
                SendMessage(hwndCS2, WM_KEYDOWN, VK_SPACE, 0);
                SendMessage(hwndCS2, WM_KEYUP, VK_SPACE, 0);

                lastHopTime = now;
            }
        }
 
сделай по другому, без чтения памяти просто по таймеру
вот простой пример
slow bhop:
Expand Collapse Copy
        if (GetAsyncKeyState(VK_SPACE) & 0x8000)
        {
            static auto lastHopTime = std::chrono::steady_clock::now();
            auto now = std::chrono::steady_clock::now();
            auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(now - lastHopTime);

            if (elapsed.count() > 40)
            {
                SendMessage(hwndCS2, WM_KEYDOWN, VK_SPACE, 0);
                SendMessage(hwndCS2, WM_KEYUP, VK_SPACE, 0);

                lastHopTime = now;
            }
        }
ну это такое себе, я просто пробовал через SendMessage, но даже хуже было
 
гайс, столкнулся с проблемой, написал себе kernel драйвер для читика на бхоп, но хитает он так себе. максимум 4-5 прыжков на локалке, а на сервере ни одного тайминг прыжка, дальше сброс вело.
либо у меня код говна, либо может ioctl медленный? или это из-за сабтика...


bunny_hop.cpp:
Expand Collapse Copy
on_ground = ( game_process.read_memory< uint8_t >( local_player + offsets::m_fFlags ) ) & 1;

if ( game_process.is_foreground()  )
{ 
    if ( GetAsyncKeyState( VK_SPACE ) < 0 )
    {
        if ( on_ground )
        {
            std::this_thread::sleep_for( std::chrono::milliseconds( 1 ) );

            game_process.write_memory< uint32_t >( game_process.get_client_module() + offsets::dwForceJump,
                                                   do_jump );

            std::this_thread::sleep_for( std::chrono::milliseconds( 1 ) );

            game_process.write_memory< uint32_t >( game_process.get_client_module() + offsets::dwForceJump,
                                                   do_not_jump );
        }
        else
        {
            game_process.write_memory< uint32_t >( game_process.get_client_module() + offsets::dwForceJump,
                                                   do_not_jump );
        }
    }
}
код сверху лучший результат которого я смог добиться. но даже с ним максимум 2 идеальных прыжка на серверах valve
юзай вместо слип фор
QueryPerformanceFrequency(&qpc_frequency);
QueryPerformanceCounter(&last_jump_qpc);
и на след тик don no jump если прев тик был джамп
 
пиздец после последнего апдейта даже на локалке 0 тайминг прыжков
юзай вместо слип фор
QueryPerformanceFrequency(&qpc_frequency);
QueryPerformanceCounter(&last_jump_qpc);
и на след тик don no jump если прев тик был джамп
а какой смысл использовать QueryPerformanceCounter
 
"написал себе kernel драйвер для читика на бхоп"

Я думал только в разделе по майнкрафту я буду чувствовать себя в психиатрической клинике, а школьники и до кс2 добрались...
 
"написал себе kernel драйвер для читика на бхоп"

Я думал только в разделе по майнкрафту я буду чувствовать себя в психиатрической клинике, а школьники и до кс2 добрались...
че не так
 
Проблема в подходе ;)
флаг on_ground отправляются с сервера каждый тик, в то время как твой екстернал проверяет его каждый кадр твоего чита, а не игры, поэтом у тебя он +- работает на локалке (ибо ты и есть сервер), и не работает в онлайне.
Для идеального бхопа тебе нужно хукать createmove, internal подходом
Так-же не советую писать в память, у тебя эмулция нажатия кнопки будет работать с той-же скоростью, но чит останется readonly, что безопаснее
 
В чём проблема хуярить спамом алиасы на прыжок? Фулл безопасно, высокий процет прыжка.
 
Большой шанс, что в тик не попадешь
Шо то хуйня в коде шо это, зато память не надо трогать, запись в неё вообще маразм, перекрывает плюсы экстернала.
Ну а алиасы/бинды на бхоп как ко мне единственный варик в экстернале делать бхоп без записи, ну либо бхопля не на пробел
 
Шо то хуйня в коде шо это, зато память не надо трогать, запись в неё вообще маразм, перекрывает плюсы экстернала.
Ну а алиасы/бинды на бхоп как ко мне единственный варик в экстернале делать бхоп без записи, ну либо бхопля не на пробел
С этой стороны ты прав, но тогда самый рабочий вариант - это забиндить прыжок на колесико
 
Проблема в подходе ;)
флаг on_ground отправляются с сервера каждый тик, в то время как твой екстернал проверяет его каждый кадр твоего чита, а не игры, поэтом у тебя он +- работает на локалке (ибо ты и есть сервер), и не работает в онлайне.
Для идеального бхопа тебе нужно хукать createmove, internal подходом
Так-же не советую писать в память, у тебя эмулция нажатия кнопки будет работать с той-же скоростью, но чит останется readonly, что безопаснее
через SendMessage еще хуже, я пробовал делать чек на смену тика, даже хуже стало
С этой стороны ты прав, но тогда самый рабочий вариант - это забиндить прыжок на колесико
на колесико лучше получалось :D
 
Последнее редактирование:
через SendMessage еще хуже, я пробовал делать чек на смену тика, даже хуже стало

на колесико лучше получалось :D
Проблема в том, что у тебя итерация цикла твоего чита не попадает в тик игры. Если вкратце - то в екстернале невозможно сделать нормальных бх
 
Назад
Сверху Снизу