Исходник Darkside sdk fix (30.10.2025)

она же валид вроде
Я ее достать чет не могу через Ida
как пофиксить
Код:
Expand Collapse Copy
CSubtickMoveStep* c_protobuf::create_new_subtick_move_step(google::protobuf::repeated_ptr_field_t<CSubtickMoveStep>* rept_ptr, void* arena) {
    static auto fn_create_new_subtick_move_step = reinterpret_cast<CSubtickMoveStep * (__fastcall*)(void*)>(g_opcodes->scan_absolute(g_modules->m_modules.client_dll.get_name(), xorstr_("E8 ? ? ? ? 48 8B D0 48 8D 4F ? E8 ? ? ? ? 48 8B D0"), 0x1));
    static auto fn_add_element_to_rep_field_container = reinterpret_cast<CSubtickMoveStep * (__fastcall*)(google::protobuf::repeated_ptr_field_t<CSubtickMoveStep>*, void*)>(g_opcodes->scan_absolute(g_modules->m_modules.client_dll.get_name(), xorstr_("E8 ? ? ? ? 48 8B D0 8B 4A ? F3 41 0F 10 46"), 0x1));

    auto subtick_move = fn_create_new_subtick_move_step(arena);

    return fn_add_element_to_rep_field_container(rept_ptr, subtick_move);
}
[15:00:25] utils.cpp:60: failed to find pattern: E8 ? ? ? ? 48 8B D0 8B 4A ? F3 41 0F 10 46
Код:
Expand Collapse Copy
     4da32d4.dll!c_protobuf::create_new_subtick_move_step(google::protobuf::repeated_ptr_field_t<CSubtickMoveStep> * rept_ptr, void * arena) Строка 50    C++
     4da32d4.dll!c_protobuf::add_subtick_move_step(c_user_cmd * user_cmd) Строка 9    C++
>    4da32d4.dll!c_movement::subtick_airstrafe_epta(c_user_cmd * user_cmd) Строка 153    C++
     4da32d4.dll!c_movement::on_create_move(c_user_cmd * user_cmd, float old_yaw) Строка 581    C++
     4da32d4.dll!hooks::create_move::hk_create_move(i_csgo_input * rcx, int slot, bool active) Строка 127    C++
Через Ida достань эту сигнатуру она валидная
 
так если валидная то чё это за хуйня?
1761307658007.png
1761307649579.png
 
расскажу факт, на дарксайд сдк еще никто не смог сделать нормальный автострейф с педалями потому что база 💩

найтмод я пофиксил
с педалями нету, но есть норм view angles авто стрейфер
Код:
Expand Collapse Copy
void c_movement::auto_strafe()
{
    if (!g_interfaces->m_engine->is_connected() || !g_interfaces->m_engine->is_in_game())
        return;

    if (!g_ctx->m_local_pawn || !g_ctx->m_local_controller->m_pawn_is_alive())
        return;

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

    if (g_ctx->m_local_pawn->m_move_type() == 1794 || g_ctx->m_local_pawn->m_move_type() == 2313)
        return;

    if (!g_cfg->misc.m_auto_strafe)
        return;

    if (g_ctx->m_user_cmd->m_button_state.m_button_state & (1 << 16))
        return;

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

    vec3_t vel = g_ctx->m_local_pawn->m_vec_abs_velocity();
    vec3_t move = movement_services->m_last_movement_impulses();
    float yaw = normalize(g_interfaces->m_csgo_input->get_view_angles().y);

    static uint64_t last_pressed = 0;
    static uint64_t last_buttons = 0;
    const auto current_buttons = g_ctx->m_user_cmd->m_button_state.m_button_state;

    auto check_button = [&](const uint64_t button) {
        if (current_buttons & button && (!(last_buttons & button) ||
            (button & IN_MOVELEFT && !(last_pressed & IN_MOVERIGHT)) ||
            (button & IN_MOVERIGHT && !(last_pressed & IN_MOVELEFT)) ||
            (button & IN_FORWARD && !(last_pressed & IN_BACK)) ||
            (button & IN_BACK && !(last_pressed & IN_FORWARD)))) {
            if (button & IN_MOVELEFT)
                last_pressed &= ~IN_MOVERIGHT;
            else if (button & IN_MOVERIGHT)
                last_pressed &= ~IN_MOVELEFT;
            else if (button & IN_FORWARD)
                last_pressed &= ~IN_BACK;
            else if (button & IN_BACK)
                last_pressed &= ~IN_FORWARD;

            last_pressed |= button;
        }
        else if (!(current_buttons & button))
            last_pressed &= ~button;
        };

    check_button(IN_MOVELEFT);
    check_button(IN_MOVERIGHT);
    check_button(IN_FORWARD);
    check_button(IN_BACK);
    last_buttons = current_buttons;

    float offset = 0.f;
    if (last_pressed & IN_MOVELEFT)
        offset += 90.f;
    if (last_pressed & IN_MOVERIGHT)
        offset -= 90.f;
    if (last_pressed & IN_FORWARD)
        offset *= 0.5f;
    else if (last_pressed & IN_BACK)
        offset = -offset * 0.5f + 180.f;

    yaw += offset;

    float velocity_angle = RAD2DEG * std::atan2f(vel.y, vel.x);
    if (velocity_angle < 0.0f)
        velocity_angle += 360.0f;
    velocity_angle -= floorf(velocity_angle / 360.0f + 0.5f) * 360.0f;

    float speed = vel.length_2d();
    float ideal = speed > 0.f ? std::clamp(RAD2DEG * std::atan2(40.f / speed, 1.f), 0.0f, 90.0f) : 90.0f;
    float correct = (100.f - 100) * 0.01f * ideal;

    auto rotate_movement = [](float target_yaw) {
        float rot = DEG2RAD * (g_interfaces->m_csgo_input->get_view_angles().y - target_yaw);
        float new_forward = std::cos(rot) * g_ctx->m_user_cmd->pb.mutable_base()->forwardmove() -
            std::sin(rot) * g_ctx->m_user_cmd->pb.mutable_base()->leftmove();
        float new_side = std::sin(rot) * g_ctx->m_user_cmd->pb.mutable_base()->forwardmove() +
            std::cos(rot) * g_ctx->m_user_cmd->pb.mutable_base()->leftmove();

        g_ctx->m_user_cmd->m_button_state.m_button_state &= ~(IN_BACK | IN_FORWARD | IN_MOVELEFT | IN_MOVERIGHT);
        g_ctx->m_user_cmd->m_button_state.m_button_state2 &= ~(IN_BACK | IN_FORWARD | IN_MOVELEFT | IN_MOVERIGHT);

        g_ctx->m_user_cmd->pb.mutable_base()->set_forwardmove(std::clamp(new_forward, -1.f, 1.f));
        g_ctx->m_user_cmd->pb.mutable_base()->set_leftmove(std::clamp(new_side * -1.f, -1.f, 1.f));

        if (g_ctx->m_user_cmd->pb.mutable_base()->forwardmove() > 0.0f)
            g_ctx->m_user_cmd->m_button_state.m_button_state |= IN_FORWARD;
        else if (g_ctx->m_user_cmd->pb.mutable_base()->forwardmove() < 0.0f)
            g_ctx->m_user_cmd->m_button_state.m_button_state |= IN_BACK;
        if (g_ctx->m_user_cmd->pb.mutable_base()->leftmove() > 0.0f)
            g_ctx->m_user_cmd->m_button_state.m_button_state |= IN_MOVELEFT;
        else if (g_ctx->m_user_cmd->pb.mutable_base()->leftmove() < 0.0f)
            g_ctx->m_user_cmd->m_button_state.m_button_state |= IN_MOVERIGHT;
        };

    float velocity_delta = normalize(yaw - velocity_angle);
    if (fabsf(velocity_delta) > 90.f)
        velocity_delta = std::copysignf(90.f, velocity_delta);

    g_ctx->m_user_cmd->pb.mutable_base()->set_forwardmove(0.f);
    g_ctx->m_user_cmd->pb.mutable_base()->set_leftmove(0.f);

    if (speed <= 80.f) {
        yaw += ideal * 3.0f;
        g_ctx->m_user_cmd->pb.mutable_base()->set_leftmove(1.0f);
    }
    else if (velocity_delta > correct) {
        yaw = velocity_angle + correct * 4.0f;
        g_ctx->m_user_cmd->pb.mutable_base()->set_leftmove(-1.0f);
    }
    else if (velocity_delta < -correct) {
        yaw = velocity_angle - correct * 4.0f;
        g_ctx->m_user_cmd->pb.mutable_base()->set_leftmove(1.0f);
    }
    else {
        yaw += ideal * 4.0f;
        g_ctx->m_user_cmd->pb.mutable_base()->set_leftmove(1.0f);
    }

    rotate_movement(normalize(yaw));
}
 
с педалями нету, но есть норм view angles авто стрейфер
Код:
Expand Collapse Copy
void c_movement::auto_strafe()
{
    if (!g_interfaces->m_engine->is_connected() || !g_interfaces->m_engine->is_in_game())
        return;

    if (!g_ctx->m_local_pawn || !g_ctx->m_local_controller->m_pawn_is_alive())
        return;

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

    if (g_ctx->m_local_pawn->m_move_type() == 1794 || g_ctx->m_local_pawn->m_move_type() == 2313)
        return;

    if (!g_cfg->misc.m_auto_strafe)
        return;

    if (g_ctx->m_user_cmd->m_button_state.m_button_state & (1 << 16))
        return;

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

    vec3_t vel = g_ctx->m_local_pawn->m_vec_abs_velocity();
    vec3_t move = movement_services->m_last_movement_impulses();
    float yaw = normalize(g_interfaces->m_csgo_input->get_view_angles().y);

    static uint64_t last_pressed = 0;
    static uint64_t last_buttons = 0;
    const auto current_buttons = g_ctx->m_user_cmd->m_button_state.m_button_state;

    auto check_button = [&](const uint64_t button) {
        if (current_buttons & button && (!(last_buttons & button) ||
            (button & IN_MOVELEFT && !(last_pressed & IN_MOVERIGHT)) ||
            (button & IN_MOVERIGHT && !(last_pressed & IN_MOVELEFT)) ||
            (button & IN_FORWARD && !(last_pressed & IN_BACK)) ||
            (button & IN_BACK && !(last_pressed & IN_FORWARD)))) {
            if (button & IN_MOVELEFT)
                last_pressed &= ~IN_MOVERIGHT;
            else if (button & IN_MOVERIGHT)
                last_pressed &= ~IN_MOVELEFT;
            else if (button & IN_FORWARD)
                last_pressed &= ~IN_BACK;
            else if (button & IN_BACK)
                last_pressed &= ~IN_FORWARD;

            last_pressed |= button;
        }
        else if (!(current_buttons & button))
            last_pressed &= ~button;
        };

    check_button(IN_MOVELEFT);
    check_button(IN_MOVERIGHT);
    check_button(IN_FORWARD);
    check_button(IN_BACK);
    last_buttons = current_buttons;

    float offset = 0.f;
    if (last_pressed & IN_MOVELEFT)
        offset += 90.f;
    if (last_pressed & IN_MOVERIGHT)
        offset -= 90.f;
    if (last_pressed & IN_FORWARD)
        offset *= 0.5f;
    else if (last_pressed & IN_BACK)
        offset = -offset * 0.5f + 180.f;

    yaw += offset;

    float velocity_angle = RAD2DEG * std::atan2f(vel.y, vel.x);
    if (velocity_angle < 0.0f)
        velocity_angle += 360.0f;
    velocity_angle -= floorf(velocity_angle / 360.0f + 0.5f) * 360.0f;

    float speed = vel.length_2d();
    float ideal = speed > 0.f ? std::clamp(RAD2DEG * std::atan2(40.f / speed, 1.f), 0.0f, 90.0f) : 90.0f;
    float correct = (100.f - 100) * 0.01f * ideal;

    auto rotate_movement = [](float target_yaw) {
        float rot = DEG2RAD * (g_interfaces->m_csgo_input->get_view_angles().y - target_yaw);
        float new_forward = std::cos(rot) * g_ctx->m_user_cmd->pb.mutable_base()->forwardmove() -
            std::sin(rot) * g_ctx->m_user_cmd->pb.mutable_base()->leftmove();
        float new_side = std::sin(rot) * g_ctx->m_user_cmd->pb.mutable_base()->forwardmove() +
            std::cos(rot) * g_ctx->m_user_cmd->pb.mutable_base()->leftmove();

        g_ctx->m_user_cmd->m_button_state.m_button_state &= ~(IN_BACK | IN_FORWARD | IN_MOVELEFT | IN_MOVERIGHT);
        g_ctx->m_user_cmd->m_button_state.m_button_state2 &= ~(IN_BACK | IN_FORWARD | IN_MOVELEFT | IN_MOVERIGHT);

        g_ctx->m_user_cmd->pb.mutable_base()->set_forwardmove(std::clamp(new_forward, -1.f, 1.f));
        g_ctx->m_user_cmd->pb.mutable_base()->set_leftmove(std::clamp(new_side * -1.f, -1.f, 1.f));

        if (g_ctx->m_user_cmd->pb.mutable_base()->forwardmove() > 0.0f)
            g_ctx->m_user_cmd->m_button_state.m_button_state |= IN_FORWARD;
        else if (g_ctx->m_user_cmd->pb.mutable_base()->forwardmove() < 0.0f)
            g_ctx->m_user_cmd->m_button_state.m_button_state |= IN_BACK;
        if (g_ctx->m_user_cmd->pb.mutable_base()->leftmove() > 0.0f)
            g_ctx->m_user_cmd->m_button_state.m_button_state |= IN_MOVELEFT;
        else if (g_ctx->m_user_cmd->pb.mutable_base()->leftmove() < 0.0f)
            g_ctx->m_user_cmd->m_button_state.m_button_state |= IN_MOVERIGHT;
        };

    float velocity_delta = normalize(yaw - velocity_angle);
    if (fabsf(velocity_delta) > 90.f)
        velocity_delta = std::copysignf(90.f, velocity_delta);

    g_ctx->m_user_cmd->pb.mutable_base()->set_forwardmove(0.f);
    g_ctx->m_user_cmd->pb.mutable_base()->set_leftmove(0.f);

    if (speed <= 80.f) {
        yaw += ideal * 3.0f;
        g_ctx->m_user_cmd->pb.mutable_base()->set_leftmove(1.0f);
    }
    else if (velocity_delta > correct) {
        yaw = velocity_angle + correct * 4.0f;
        g_ctx->m_user_cmd->pb.mutable_base()->set_leftmove(-1.0f);
    }
    else if (velocity_delta < -correct) {
        yaw = velocity_angle - correct * 4.0f;
        g_ctx->m_user_cmd->pb.mutable_base()->set_leftmove(1.0f);
    }
    else {
        yaw += ideal * 4.0f;
        g_ctx->m_user_cmd->pb.mutable_base()->set_leftmove(1.0f);
    }

    rotate_movement(normalize(yaw));
}
педали реддера у всех уже есть
 
захожу за любую команду, тт или кт и сразу краш че за фигня
сигнатура не находится 48 89 5C 24 ?? 48 89 6C 24 ?? 56 57 41 54 41 56 41 57 48 83 EC ?? 4C 8B F9
через иду чекнул все норм...
 
Пацы чтобы исправить логику auto wall

Сделайте 1 вещь в Has_armor исправить эту строчку float heavy_armor_bonus = 1.0f, armor_bonus = 0.5f, armor_ratio = weapon_data->m_armor_ratio( ) * 0.5f; НА


1:
Expand Collapse Copy
    if (!entity->has_armor(hitgroup) || damage <= 0.0f)
        return;

    // Расчёт урона с учётом брони
    float armor_ratio = weapon_data->m_armor_ratio();
    float armor_bonus = 0.5f;
    float heavy_armor_bonus = 1.0f;

    const int armor_value = entity->m_armor_value();


    float new_damage = damage;

    float damage_to_armor = damage * armor_ratio * armor_bonus;
    float damage_to_health = damage - damage_to_armor;

    if (damage_to_armor > armor_value) {
        damage_to_armor = static_cast<float>(armor_value);
        damage_to_health = damage - damage_to_armor / armor_bonus;
    }

    damage = damage_to_health;
}
 
Последнее редактирование:
Пацы чтобы исправить логику auto wall

Сделайте 1 вещь в Has_armor исправить эту строчку float heavy_armor_bonus = 1.0f, armor_bonus = 0.5f, armor_ratio = weapon_data->m_armor_ratio( ) * 0.5f; НА


1:
Expand Collapse Copy
    if (!entity->has_armor(hitgroup) || damage <= 0.0f)
        return;

    // Расчёт урона с учётом брони
    float armor_ratio = weapon_data->m_armor_ratio();
    float armor_bonus = 0.5f;
    float heavy_armor_bonus = 1.0f;

    const int armor_value = entity->m_armor_value();


    float new_damage = damage;

    float damage_to_armor = damage * armor_ratio * armor_bonus;
    float damage_to_health = damage - damage_to_armor;

    if (damage_to_armor > armor_value) {
        damage_to_armor = static_cast<float>(armor_value);
        damage_to_health = damage - damage_to_armor / armor_bonus;
    }

    damage = damage_to_health;
}
так авол исправно работает и такой проверки нет, нах это добавлять?
рейдж говянно написан, проверки калл. у тебя из за проверки на is player pawn крашит в рейдже
 
так авол исправно работает и такой проверки нет, нах это добавлять?

рейдж говянно написан, проверки калл. у тебя из за проверки на is player pawn крашит в рейдже
Ты говоришь авол идеально работает? когда он с кт базы хуярит через стены в т базу и стреляет в не существующие стенки где прострелить нельзя!

Краша не одного не было и все идеально работает
Ты говоришь авол идеально работает? когда он с кт базы хуярит через стены в т базу и стреляет в не существующие стенки где прострелить нельзя!

Краша не одного не было и все идеально рабоает
Могу скинуть код на луа систему
Ты говоришь авол идеально работает? когда он с кт базы хуярит через стены в т базу и стреляет в не существующие стенки где прострелить нельзя!

Краша не одного не было и все идеально работает

Могу скинуть код на луа систему
Доква что в моем коде нету крашов
Ты говоришь авол идеально работает? когда он с кт базы хуярит через стены в т базу и стреляет в не существующие стенки где прострелить нельзя!

Краша не одного не было и все идеально работает

Могу скинуть код на луа систему

Доква что в моем коде нету крашов
Также хорошо стал пробивать стены
 

Вложения

  • Снимок.PNG
    Снимок.PNG
    11.3 KB · Просмотры: 52
  • Снимок.PNG
    Снимок.PNG
    2.9 MB · Просмотры: 51
  • Снимок.PNG
    Снимок.PNG
    2 MB · Просмотры: 51
Последнее редактирование:
так авол исправно работает и такой проверки нет, нах это добавлять?

рейдж говянно написан, проверки калл. у тебя из за проверки на is player pawn крашит в рейдже
почему крашит при возрождении? и какая именно проверка вызывает краш, у меня когда я зашел за кт и возродился в дебаггере начало спамить heap corruption
 
Также в ragebot.cpp исправить код weapon_is_at_max_accuracy на


ragebot.cpp:
Expand Collapse Copy
bool c_rage_bot::weapon_is_at_max_accuracy(c_cs_weapon_base_v_data* weapon_data, float inaccuracy) {
    auto local_data = g_prediction->get_local_data();
    if (!local_data)
        return false;

    constexpr auto round_accuracy = [](float accuracy) { return floorf(accuracy * 170.f) / 170.f; };
    constexpr auto round_duck_accuracy = [](float accuracy) { return floorf(accuracy * 300.f) / 300.f; };

    float speed = g_ctx->m_local_pawn->m_vec_abs_velocity().length();

    // Исправлено условие is_scoped: должно быть true, если оружие снайперское и игрок прицелен
    bool is_scoped = (weapon_data->m_weapon_type() == WEAPONTYPE_SNIPER_RIFLE) &&
                     ((g_ctx->m_user_cmd->m_button_state.m_button_state & IN_ZOOM) || g_ctx->m_local_pawn->m_scoped());

    bool is_ducking = (g_ctx->m_local_pawn->m_flags() & FL_DUCKING) || (g_ctx->m_user_cmd->m_button_state.m_button_state & IN_DUCK);

    bool on_ground = (g_ctx->m_local_pawn->m_flags() & FL_ONGROUND);

    float rounded_accuracy = round_accuracy(inaccuracy);
    float rounded_duck_accuracy = round_duck_accuracy(inaccuracy);

    // Проверяем условия достижения максимальной точности
    if (on_ground) {
        if (is_scoped) {
            if (is_ducking && rounded_duck_accuracy <= local_data->m_inaccuracy)
                return true;
            if (speed <= 0.f && rounded_accuracy <= local_data->m_inaccuracy)
                return true;
        } else {
            // Для не снайперских оружий можно добавить логику, если надо
            if (rounded_accuracy <= local_data->m_inaccuracy)
                return true;
        }
    }

    return false;
}
 

Похожие темы

Назад
Сверху Снизу