Основной принцип
Jump Bug имитирует быстрое нажатие приседания в момент падения, что "обманывает" физику игры и предотвращает получение урона.
Ключевые компоненты кода:
1. Условия активации
if (!(g_ctx->m_user_cmd->m_button_state.m_button_state & IN_JUMP))
return; // Игрок не нажимает прыжок
if (!g_configs->misc.m_jumpbug)
return; // Функция отключена в настройках
if (!g_interfaces->m_var->get_by_name("sv_autobunnyhopping")->get_bool())
return; // Требуется включенный autobunnyhopping
2. Обнаружение края
cpp
// Определяет момент, когда игрок отрывается от земли
if ((pawn->m_flags() & FL_ONGROUND) && !(g_prediction->get_post_flags() & FL_ONGROUND))
{
// Трассировка для точного определения края
// edge_detected становится true при обнаружении обрыва
}
3. Выполнение Jump Bug
Когда обнаружен момент падения, код создает последовательность субтиков:
cpp
// 1. Мгновенное приседание (время 0.0f)
duck_subtick->set_when(0.f);
duck_subtick->set_button(IN_DUCK);
duck_subtick->set_pressed(true);
// 2. Прыжок через 0.25 секунды
jump_subtick->set_when(0.25f);
jump_subtick->set_button(IN_JUMP);
jump_subtick->set_pressed(true);
// 3. Отпускание приседания и прыжка в конце кадра
unduck_subtick->set_when(0.999f);
unduck_subtick->set_pressed(false);
unjump_subtick->set_when(0.999f);
unjump_subtick->set_pressed(false);
Как это работает в игре:
- Обнаружение падения - код ловит момент, когда игрок отрывается от земли
- Быстрое приседание - мгновенно активирует Duck в начале падения
- Поздний прыжок - выполняет прыжок через короткий промежуток времени
- Отпускание кнопок - сбрасывает все состояния в конце
Эта последовательность заставляет движок игры думать, что игрок совершил контролируемое действие, а не просто упал, что предотвращает получение урона от падения при сохранении скорости движения.