Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Вопрос Как сделать jumpbug

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
23 Янв 2025
Сообщения
9
Реакции
0
Я недавно захотел сделать jumpbug для кс2, у меня уже был опыт с ксго но там было всё проще

пример jumpbug csgo:
Expand Collapse Copy
void n_movement::impl_t::jump_bug( )
{
    [[unlikely]] if ( !( g_ctx.m_cmd->m_buttons & e_command_buttons::in_jump ) )
    {
        static bool ducked = false;

        if ( g_ctx.m_local->get_flags( ) & e_flags::fl_onground && !( g_prediction.backup_data.m_flags & e_flags::fl_onground ) && !ducked ) {
            g_ctx.m_cmd->m_buttons |= e_command_buttons::in_duck;
            ducked = true;
        } else
            ducked = false;

        if ( g_prediction.backup_data.m_flags & e_flags::fl_onground && ducked )
            ducked = false;
    }
    else
    {
        if ( g_ctx.m_local->get_flags( ) & e_flags::fl_onground && !( g_prediction.backup_data.m_flags & e_flags::fl_onground ) )
            g_ctx.m_cmd->m_buttons |= e_command_buttons::in_duck;

        if ( g_ctx.m_local->get_flags( ) & e_flags::fl_onground )
            g_ctx.m_cmd->m_buttons &= ~e_command_buttons::in_jump;

        if ( !( g_ctx.m_local->get_flags( ) & fl_onground ) && g_prediction.backup_data.m_flags & fl_onground )
            g_ctx.m_cmd->m_buttons &= ~e_command_buttons::in_duck;
    }
}

но тут я увидел что тот способ который был в ксго устарел и пришёл новый способ (джампбаг который работает всегда в отличии от ксго) и я хотел бы задать вопрос как сделать такой джампбаг который не присидает, а каким - то образом ресает ланд стамину как в том же plaguecheat?
 
Последнее редактирование:
впринципе как у бхопа код у джамп бага, если у бхопа

C++:
Expand Collapse Copy
    if (g_ctx->m_local_pawn->m_flags() & FL_ONGROUND)
        user_cmd->m_button_state.m_button_state &= ~IN_JUMP;
то у джампбага

C++:
Expand Collapse Copy
    if (g_ctx->m_local_pawn->m_flags() & FL_ONGROUND)
        user_cmd->m_button_state.m_button_state &= ~IN_DUCK;
 
впринципе как у бхопа код у джамп бага, если у бхопа

C++:
Expand Collapse Copy
    if (g_ctx->m_local_pawn->m_flags() & FL_ONGROUND)
        user_cmd->m_button_state.m_button_state &= ~IN_JUMP;
то у джампбага

C++:
Expand Collapse Copy
    if (g_ctx->m_local_pawn->m_flags() & FL_ONGROUND)
        user_cmd->m_button_state.m_button_state &= ~IN_DUCK;
разве для JB не нужен predict??
 
разве для JB не нужен predict??
нужен, тем более
if (g_ctx->m_local_pawn->m_flags() & FL_ONGROUND)
user_cmd->m_button_state.m_button_state &= ~IN_DUCK;

не будет работать, если уж делать таким старым и не очень рабочим способом то нужно IN_DUCK на 2 тика зажать когда ты на земле но оно будет работать но не всегда вот я и спрашиваю как сделать новый способ jb

я недовно нашёл чтото вроде по новому способу -


newgen yumpbuggg:
Expand Collapse Copy
void c_movement::jump_bug()
{
    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;

    c_user_cmd* cmd = g_ctx->m_user_cmd;
    CBaseUserCmdPB* base_cmd = g_ctx->m_user_cmd->pb.mutable_base();

    auto pawn = g_ctx->m_local_pawn;
    if (!pawn)
        return;

    auto movement = pawn->m_movement_services();
    if (!movement)
        return;

    bool edge_detected = false;
    if ((pawn->m_flags() & FL_ONGROUND) && !(g_prediction->get_post_flags() & FL_ONGROUND))
    {
        vec3_t origin = pawn->m_scene_node()->m_abs_origin();

        auto collision = pawn->m_collision();
        if (collision)
        {
            vec3_t mins = collision->m_mins();
            vec3_t maxs = collision->m_maxs();

            trace_filter_t filter;
            g_interfaces->m_trace->init_player_movement_trace_filter(&filter, pawn, 0x1C3003, COLLISION_GROUP_PLAYER_MOVEMENT);

            vec3_t start = origin;
            vec3_t end = origin - vec3_t(0, 0, 32.0f);

            game_trace_t trace;
            bbox_t bounds = { mins, maxs };

            if (g_interfaces->m_trace->trace_player_bbox(&start, &end, &bounds, &filter, &trace))
            {
                edge_detected = trace.m_fraction >= 1.0f || !trace.m_hit_entity;
            }
        }
    }

    if (((pawn->m_flags() & FL_ONGROUND) && !(g_prediction->get_post_flags() & FL_ONGROUND)) || edge_detected)
    {
        cmd->m_button_state.set_button_state(IN_DUCK, IN_BUTTON_DOWN);

        base_cmd->clear_subtick_moves();

        if (auto duck_subtick = g_interfaces->m_csgo_input->create_new_subtick_move_step(base_cmd->mutable_subtick_moves()))
        {
            duck_subtick->set_when(0.f);
            duck_subtick->set_button(IN_DUCK);
            duck_subtick->set_pressed(true);
            base_cmd->mutable_subtick_moves()->AddAllocated(duck_subtick);
        }

        if (auto jump_subtick = g_interfaces->m_csgo_input->create_new_subtick_move_step(base_cmd->mutable_subtick_moves()))
        {
            jump_subtick->set_when(0.25f);
            jump_subtick->set_button(IN_JUMP);
            jump_subtick->set_pressed(true);
            base_cmd->mutable_subtick_moves()->AddAllocated(jump_subtick);
        }

        if (auto unduck_subtick = g_interfaces->m_csgo_input->create_new_subtick_move_step(base_cmd->mutable_subtick_moves()))
        {
            unduck_subtick->set_when(0.999f);
            unduck_subtick->set_button(IN_DUCK);
            unduck_subtick->set_pressed(false);
            base_cmd->mutable_subtick_moves()->AddAllocated(unduck_subtick);
        }

        if (auto unjump_subtick = g_interfaces->m_csgo_input->create_new_subtick_move_step(base_cmd->mutable_subtick_moves())) {
            unjump_subtick->set_when(0.999f);
            unjump_subtick->set_button(IN_JUMP);
            unjump_subtick->set_pressed(false);
            base_cmd->mutable_subtick_moves()->AddAllocated(unjump_subtick);
        }
    }
    else if (!(pawn->m_flags() & FL_ONGROUND))
    {
        cmd->m_button_state.set_button_state(IN_DUCK, IN_BUTTON_UP);
    }
}

но я так и не понял как это работает
 
нужен, тем более
if (g_ctx->m_local_pawn->m_flags() & FL_ONGROUND)
user_cmd->m_button_state.m_button_state &= ~IN_DUCK;

не будет работать, если уж делать таким старым и не очень рабочим способом то нужно IN_DUCK на 2 тика зажать когда ты на земле но оно будет работать но не всегда вот я и спрашиваю как сделать новый способ jb

я недовно нашёл чтото вроде по новому способу -


newgen yumpbuggg:
Expand Collapse Copy
void c_movement::jump_bug()
{
    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;

    c_user_cmd* cmd = g_ctx->m_user_cmd;
    CBaseUserCmdPB* base_cmd = g_ctx->m_user_cmd->pb.mutable_base();

    auto pawn = g_ctx->m_local_pawn;
    if (!pawn)
        return;

    auto movement = pawn->m_movement_services();
    if (!movement)
        return;

    bool edge_detected = false;
    if ((pawn->m_flags() & FL_ONGROUND) && !(g_prediction->get_post_flags() & FL_ONGROUND))
    {
        vec3_t origin = pawn->m_scene_node()->m_abs_origin();

        auto collision = pawn->m_collision();
        if (collision)
        {
            vec3_t mins = collision->m_mins();
            vec3_t maxs = collision->m_maxs();

            trace_filter_t filter;
            g_interfaces->m_trace->init_player_movement_trace_filter(&filter, pawn, 0x1C3003, COLLISION_GROUP_PLAYER_MOVEMENT);

            vec3_t start = origin;
            vec3_t end = origin - vec3_t(0, 0, 32.0f);

            game_trace_t trace;
            bbox_t bounds = { mins, maxs };

            if (g_interfaces->m_trace->trace_player_bbox(&start, &end, &bounds, &filter, &trace))
            {
                edge_detected = trace.m_fraction >= 1.0f || !trace.m_hit_entity;
            }
        }
    }

    if (((pawn->m_flags() & FL_ONGROUND) && !(g_prediction->get_post_flags() & FL_ONGROUND)) || edge_detected)
    {
        cmd->m_button_state.set_button_state(IN_DUCK, IN_BUTTON_DOWN);

        base_cmd->clear_subtick_moves();

        if (auto duck_subtick = g_interfaces->m_csgo_input->create_new_subtick_move_step(base_cmd->mutable_subtick_moves()))
        {
            duck_subtick->set_when(0.f);
            duck_subtick->set_button(IN_DUCK);
            duck_subtick->set_pressed(true);
            base_cmd->mutable_subtick_moves()->AddAllocated(duck_subtick);
        }

        if (auto jump_subtick = g_interfaces->m_csgo_input->create_new_subtick_move_step(base_cmd->mutable_subtick_moves()))
        {
            jump_subtick->set_when(0.25f);
            jump_subtick->set_button(IN_JUMP);
            jump_subtick->set_pressed(true);
            base_cmd->mutable_subtick_moves()->AddAllocated(jump_subtick);
        }

        if (auto unduck_subtick = g_interfaces->m_csgo_input->create_new_subtick_move_step(base_cmd->mutable_subtick_moves()))
        {
            unduck_subtick->set_when(0.999f);
            unduck_subtick->set_button(IN_DUCK);
            unduck_subtick->set_pressed(false);
            base_cmd->mutable_subtick_moves()->AddAllocated(unduck_subtick);
        }

        if (auto unjump_subtick = g_interfaces->m_csgo_input->create_new_subtick_move_step(base_cmd->mutable_subtick_moves())) {
            unjump_subtick->set_when(0.999f);
            unjump_subtick->set_button(IN_JUMP);
            unjump_subtick->set_pressed(false);
            base_cmd->mutable_subtick_moves()->AddAllocated(unjump_subtick);
        }
    }
    else if (!(pawn->m_flags() & FL_ONGROUND))
    {
        cmd->m_button_state.set_button_state(IN_DUCK, IN_BUTTON_UP);
    }
}

но я так и не понял как это работает
если не понял как работает <30 строчный код, стоит обратится к нейросети лгбт 5...
 
нужен, тем более
if (g_ctx->m_local_pawn->m_flags() & FL_ONGROUND)
user_cmd->m_button_state.m_button_state &= ~IN_DUCK;

не будет работать, если уж делать таким старым и не очень рабочим способом то нужно IN_DUCK на 2 тика зажать когда ты на земле но оно будет работать но не всегда вот я и спрашиваю как сделать новый способ jb

я недовно нашёл чтото вроде по новому способу -


newgen yumpbuggg:
Expand Collapse Copy
void c_movement::jump_bug()
{
    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;

    c_user_cmd* cmd = g_ctx->m_user_cmd;
    CBaseUserCmdPB* base_cmd = g_ctx->m_user_cmd->pb.mutable_base();

    auto pawn = g_ctx->m_local_pawn;
    if (!pawn)
        return;

    auto movement = pawn->m_movement_services();
    if (!movement)
        return;

    bool edge_detected = false;
    if ((pawn->m_flags() & FL_ONGROUND) && !(g_prediction->get_post_flags() & FL_ONGROUND))
    {
        vec3_t origin = pawn->m_scene_node()->m_abs_origin();

        auto collision = pawn->m_collision();
        if (collision)
        {
            vec3_t mins = collision->m_mins();
            vec3_t maxs = collision->m_maxs();

            trace_filter_t filter;
            g_interfaces->m_trace->init_player_movement_trace_filter(&filter, pawn, 0x1C3003, COLLISION_GROUP_PLAYER_MOVEMENT);

            vec3_t start = origin;
            vec3_t end = origin - vec3_t(0, 0, 32.0f);

            game_trace_t trace;
            bbox_t bounds = { mins, maxs };

            if (g_interfaces->m_trace->trace_player_bbox(&start, &end, &bounds, &filter, &trace))
            {
                edge_detected = trace.m_fraction >= 1.0f || !trace.m_hit_entity;
            }
        }
    }

    if (((pawn->m_flags() & FL_ONGROUND) && !(g_prediction->get_post_flags() & FL_ONGROUND)) || edge_detected)
    {
        cmd->m_button_state.set_button_state(IN_DUCK, IN_BUTTON_DOWN);

        base_cmd->clear_subtick_moves();

        if (auto duck_subtick = g_interfaces->m_csgo_input->create_new_subtick_move_step(base_cmd->mutable_subtick_moves()))
        {
            duck_subtick->set_when(0.f);
            duck_subtick->set_button(IN_DUCK);
            duck_subtick->set_pressed(true);
            base_cmd->mutable_subtick_moves()->AddAllocated(duck_subtick);
        }

        if (auto jump_subtick = g_interfaces->m_csgo_input->create_new_subtick_move_step(base_cmd->mutable_subtick_moves()))
        {
            jump_subtick->set_when(0.25f);
            jump_subtick->set_button(IN_JUMP);
            jump_subtick->set_pressed(true);
            base_cmd->mutable_subtick_moves()->AddAllocated(jump_subtick);
        }

        if (auto unduck_subtick = g_interfaces->m_csgo_input->create_new_subtick_move_step(base_cmd->mutable_subtick_moves()))
        {
            unduck_subtick->set_when(0.999f);
            unduck_subtick->set_button(IN_DUCK);
            unduck_subtick->set_pressed(false);
            base_cmd->mutable_subtick_moves()->AddAllocated(unduck_subtick);
        }

        if (auto unjump_subtick = g_interfaces->m_csgo_input->create_new_subtick_move_step(base_cmd->mutable_subtick_moves())) {
            unjump_subtick->set_when(0.999f);
            unjump_subtick->set_button(IN_JUMP);
            unjump_subtick->set_pressed(false);
            base_cmd->mutable_subtick_moves()->AddAllocated(unjump_subtick);
        }
    }
    else if (!(pawn->m_flags() & FL_ONGROUND))
    {
        cmd->m_button_state.set_button_state(IN_DUCK, IN_BUTTON_UP);
    }
}

но я так и не понял как это работает
в чем проблема сделать

Код:
Expand Collapse Copy
    if (g_ctx->m_local_pawn->m_flags() & FL_ONGROUND)
        user_cmd->m_button_state.m_button_state &= ~IN_JUMP;
        if (!g_cfg->misc.m_jump_bug) {
          user_cmd->m_button_state.m_button_state &= ~IN_DUCK;
        }
 
в чем проблема сделать

Код:
Expand Collapse Copy
    if (g_ctx->m_local_pawn->m_flags() & FL_ONGROUND)
        user_cmd->m_button_state.m_button_state &= ~IN_JUMP;
        if (!g_cfg->misc.m_jump_bug) {
          user_cmd->m_button_state.m_button_state &= ~IN_DUCK;
        }
если ты хочешь сделать джамп баг который будет краучить на граунде то лучше сделать так -

void c_movement::jump_bug()
{
if (!g_cfg->misc.m_jump_bug)
return;

if (!g_key_handler->is_pressed(g_cfg->misc.m_jump_bug_key_bind, g_cfg->misc.m_jump_bug_key_bind_style))
return;

static int duck_ticks = 0;

if (g_ctx->m_local_pawn->m_flags() & FL_ONGROUND)
{
duck_ticks = 2;
}

if (duck_ticks > 0)
{
g_ctx->m_user_cmd->m_button_state.m_button_state |= IN_DUCK;
duck_ticks--;
}
}


а мне нужен который работает всегда а не по рандому
 
Назад
Сверху Снизу