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

Вопрос Помощь с страфом

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
1 Апр 2025
Сообщения
25
Реакции
0
Можете помочь, страф не работает даже когда sv_quantize... на 0

C++:
Expand Collapse Copy
void c_movement::fix_cmd_buttons(c_user_cmd* user_cmd)
{
    if (!user_cmd) return;

    user_cmd->m_button_state.m_button_state &= ~(IN_FORWARD | IN_BACK | IN_MOVELEFT | IN_MOVERIGHT);

    if (user_cmd->pb.mutable_base()->forwardmove() > 0.f)
        user_cmd->m_button_state.m_button_state |= IN_FORWARD;
    else if (user_cmd->pb.mutable_base()->forwardmove() < 0.f)
        user_cmd->m_button_state.m_button_state |= IN_BACK;

    if (user_cmd->pb.mutable_base()->leftmove() > 0.f)
        user_cmd->m_button_state.m_button_state |= IN_MOVELEFT;
    else if (user_cmd->pb.mutable_base()->leftmove() < 0.f)
        user_cmd->m_button_state.m_button_state |= IN_MOVERIGHT;
}

void c_movement::bunnyhop(c_user_cmd* user_cmd)
{
    if (!g_cfg->misc.m_bunny_hop || g_interfaces->m_var->get_by_name(xorstr_("sv_autobunnyhopping"))->get_int())
        return;

    if (!(user_cmd->m_button_state.m_button_state & IN_JUMP))
        return;

    if (!(g_ctx->m_local_pawn->m_flags() & FL_ONGROUND))
    {
        user_cmd->m_button_state.m_button_state &= ~IN_JUMP;
        user_cmd->m_button_state.m_button_state2 &= ~IN_JUMP;
        user_cmd->m_button_state.m_button_state3 &= ~IN_JUMP;
    }
    else
    {
        auto cmd_push = g_protobuf->add_subtick_move_step(user_cmd);
        cmd_push->set_button(IN_JUMP);
        cmd_push->set_pressed(true);
        cmd_push->set_when(0.999f);

        auto cmd_release = g_protobuf->add_subtick_move_step(user_cmd);
        cmd_release->set_button(IN_JUMP);
        cmd_release->set_pressed(false);
        cmd_release->set_when(0.999f);
    }
}

void c_movement::auto_strafe(c_user_cmd* user_cmd, float old_yaw)
{
    if (!g_cfg->misc.m_auto_strafe)
        return;

    if (!g_ctx->m_local_pawn || (g_ctx->m_local_pawn->m_flags() & FL_ONGROUND))
        return;

    if (!user_cmd || !user_cmd->pb.mutable_base() || !user_cmd->pb.mutable_base()->mutable_viewangles())
        return;

    auto base_cmd = user_cmd->pb.mutable_base();
    vec3_t velocity = g_ctx->m_local_pawn->m_vec_abs_velocity();
    float speed_2d = velocity.length_2d();

    bool move_forward = user_cmd->m_button_state.m_button_state & IN_FORWARD;
    bool move_backward = user_cmd->m_button_state.m_button_state & IN_BACK;
    bool move_left = user_cmd->m_button_state.m_button_state & IN_MOVELEFT;
    bool move_right = user_cmd->m_button_state.m_button_state & IN_MOVERIGHT;

    if (speed_2d < 2.f && !move_forward && !move_backward && !move_left && !move_right)
        return;

    float ideal_rotation = speed_2d > 0.f ? (std::min)(RAD2DEG * std::asinf(15.f / speed_2d), 90.f) : 90.f;
    float sign = base_cmd->legacy_command_number() % 2 ? 1.f : -1.f;

    base_cmd->set_forwardmove(450.f);

    vec3_t movement_angle{
        base_cmd->viewangles().x(),
        base_cmd->viewangles().y(),
        base_cmd->viewangles().z()
    };

    if (move_forward)
        movement_angle.y += move_left ? 45.f : move_right ? -45.f : 0.f;
    else if (move_backward)
        movement_angle.y += move_left ? 135.f : move_right ? -135.f : 180.f;
    else if (move_left || move_right)
        movement_angle.y += move_left ? 90.f : -90.f;

    float yaw_delta = std::remainder(movement_angle.y - old_yaw, 360.f);
    float abs_yaw_delta = std::abs(yaw_delta);

    if (yaw_delta > 0.f)
        base_cmd->set_leftmove(-450.f);
    else if (yaw_delta < 0.f)
        base_cmd->set_leftmove(450.f);

    if (abs_yaw_delta <= ideal_rotation || abs_yaw_delta >= 30.f)
    {
        float vel_ang = RAD2DEG * std::atan2(velocity.y, velocity.x);
        float vel_delta = std::remainder(movement_angle.y - vel_ang, 360.f);
        float retrack_speed = ideal_rotation * ((g_cfg->misc.m_strafe_smooth / 100.f) * 3.f);

        if (vel_delta <= retrack_speed || speed_2d <= 15.f)
        {
            if (-retrack_speed <= vel_delta || speed_2d <= 15.f)
            {
                movement_angle.y += ideal_rotation * sign;
                base_cmd->set_leftmove(sign * 450.f);
            }
            else
            {
                movement_angle.y = vel_ang - retrack_speed;
                base_cmd->set_leftmove(450.f);
            }
        }
        else
        {
            movement_angle.y = vel_ang + retrack_speed;
            base_cmd->set_leftmove(-450.f);
        }
    }

    const float rotation = DEG2RAD * (base_cmd->viewangles().y() - movement_angle.y);

    const float new_forward = std::cos(rotation) * base_cmd->forwardmove() - std::sin(rotation) * base_cmd->leftmove();
    const float new_side = std::sin(rotation) * base_cmd->forwardmove() + std::cos(rotation) * base_cmd->leftmove();

    base_cmd->set_forwardmove(std::clamp(new_forward, -450.f, 450.f));
    base_cmd->set_leftmove(std::clamp(new_side, -450.f, 450.f));

    fix_cmd_buttons(user_cmd);
}


&


C++:
Expand Collapse Copy
void c_movement::movement_fix(c_user_cmd* user_cmd, vec3_t angle)
{
    vec3_t wish_angle{
        user_cmd->pb.mutable_base()->viewangles().x(),
        user_cmd->pb.mutable_base()->viewangles().y(),
        user_cmd->pb.mutable_base()->viewangles().z()
    };

    int sign = wish_angle.x > 90.f ? -1.f : 1.f;
    wish_angle.clamp();

    vec3_t forward, right, up, old_forward, old_right, old_up;
    vec3_t view_angles = angle;

    g_math->angle_vectors(wish_angle, forward, right, up);

    forward.z = right.z = up.x = up.y = 0.f;

    forward.normalize_in_place();
    right.normalize_in_place();
    up.normalize_in_place();

    g_math->angle_vectors(view_angles, old_forward, old_right, old_up);

    old_forward.z = old_right.z = old_up.x = old_up.y = 0.f;

    old_forward.normalize_in_place();
    old_right.normalize_in_place();
    old_up.normalize_in_place();

    forward *= user_cmd->pb.mutable_base()->forwardmove();
    right *= user_cmd->pb.mutable_base()->leftmove();
    up *= user_cmd->pb.mutable_base()->upmove();

    float fixed_forward_move = old_forward.dot(right) + old_forward.dot(forward) + old_forward.dot(up, true);
    float fixed_side_move = old_right.dot(right) + old_right.dot(forward) + old_right.dot(up, true);
    float fixed_up_move = old_up.dot(right, true) + old_up.dot(forward, true) + old_up.dot(up);

    user_cmd->pb.mutable_base()->set_forwardmove(fixed_forward_move);
    user_cmd->pb.mutable_base()->set_leftmove(fixed_side_move);
    user_cmd->pb.mutable_base()->set_upmove(fixed_up_move);

    fixed_forward_move = sign * (old_forward.dot(right) + old_forward.dot(forward));
    fixed_side_move = old_right.dot(right) + old_right.dot(forward);

    user_cmd->pb.mutable_base()->set_forwardmove(std::clamp(fixed_forward_move, -450.f, 450.f));
    user_cmd->pb.mutable_base()->set_leftmove(std::clamp(fixed_side_move, -450.f, 450.f));
}
 
Назад
Сверху Снизу