Вопрос Имгуй краш простого рендера текста

Тьомчик
Участник
Статус
Оффлайн
Регистрация
30 Июн 2020
Сообщения
731
Реакции[?]
150
Поинты[?]
58K
1686068403071.png
draw_text:
void imguirender::draw_text(const std::string& text, ImFont* font, ImVec2 pos, float size, color outline, color clr, bool text_center_align, bool text_right_align, bool text_outline, bool text_dropshadow)
{
    _drawList = ImGui::GetBackgroundDrawList();

    _drawList->PushTextureID(font->ContainerAtlas->TexID);

    ImVec2 textSize = ImGui::CalcTextSize(text.c_str());

    if (!text_right_align && text_center_align)
    {
        pos.x -= textSize.x / 2.0f;
    }

    if (!text_center_align && text_right_align)
    {
        pos.x -= textSize.x;
    }

    if (!text_outline && text_dropshadow)
    {
        _drawList->AddText(font, size, ImVec2(pos.x + 1, pos.y + 1), getU32(color(outline[0], outline[1], outline[2], clr.get_alpha())), text.c_str());
    }

    if (!text_dropshadow && text_outline)
    {
       _drawList->AddText(font, size, ImVec2(pos.x + 1, pos.y + 1), getU32(color(outline[0], outline[1], outline[2], clr.get_alpha())), text.c_str());
       _drawList->AddText(font, size, ImVec2(pos.x - 1, pos.y - 1), getU32(color(outline[0], outline[1], outline[2], clr.get_alpha())), text.c_str());
       _drawList->AddText(font, size, ImVec2(pos.x + 1, pos.y - 1), getU32(color(outline[0], outline[1], outline[2], clr.get_alpha())), text.c_str());
       _drawList->AddText(font, size, ImVec2(pos.x - 1, pos.y + 1), getU32(color(outline[0], outline[1], outline[2], clr.get_alpha())), text.c_str());
    }

    _drawList->AddText(font, size, pos, getU32(clr), text.c_str());

    _drawList->PopTextureID();

}
хукаю есп тут
1686068988811.png 1686069009953.png
Для вызова есп использую paint_traverse хук и present
 
Последнее редактирование:
Тьомчик
Участник
Статус
Оффлайн
Регистрация
30 Июн 2020
Сообщения
731
Реакции[?]
150
Поинты[?]
58K
Начинающий
Статус
Оффлайн
Регистрация
8 Ноя 2022
Сообщения
68
Реакции[?]
5
Поинты[?]
0
проблема не в самом esp.
а в методе рендера.
Я использую не стандартный рендер CSGOsimpl'а. А свой
ну как по мне лучше деф используй, ну это конечно твоё дело
 
Тьомчик
Участник
Статус
Оффлайн
Регистрация
30 Июн 2020
Сообщения
731
Реакции[?]
150
Поинты[?]
58K
ну как по мне лучше деф используй, ну это конечно твоё дело
я точно не помню почему я не использую дефолтную, но там была какая то проблема не помню почему...
UPD: версия имгуя я просто самую последню юзаю
 
Начинающий
Статус
Оффлайн
Регистрация
8 Ноя 2022
Сообщения
68
Реакции[?]
5
Поинты[?]
0
я точно не помню почему я не использую дефолтную, но там была какая то проблема не помню почему...
UPD: версия имгуя я просто самую последню юзаю
а тогда понятно
даже незнаю что сказать можешь попробовать поискать что то в инете по этому
 
Femboy Access
Эксперт
Статус
Оффлайн
Регистрация
11 Ноя 2020
Сообщения
1,333
Реакции[?]
428
Поинты[?]
96K
Ты зачем имгуи рендеришь в пеинттраверсе, если он предназначен для рисовки на директх
 
Тьомчик
Участник
Статус
Оффлайн
Регистрация
30 Июн 2020
Сообщения
731
Реакции[?]
150
Поинты[?]
58K
Ты зачем имгуи рендеришь в пеинттраверсе, если он предназначен для рисовки на директх
есть такая вещь как который нужно вызывать каждый тик(чтобы esp не фликало и было плавным) с этим прекрасно справляется pain traverse hook
get_box:
RECT get_box(entity_t* ent, Vector pointstransf[])
{
    RECT rect{};
    auto collideable = ent->GetCollideable();

    if (!collideable)
        return rect;

    auto min = collideable->OBBMins();
    auto max = collideable->OBBMaxs();

    const matrix3x4_t& trans = ent->coordinate_frame();

    Vector points[] =
    {
        Vector(min.x, min.y, min.z),
        Vector(min.x, max.y, min.z),
        Vector(max.x, max.y, min.z),
        Vector(max.x, min.y, min.z),
        Vector(max.x, max.y, max.z),
        Vector(min.x, max.y, max.z),
        Vector(min.x, min.y, max.z),
        Vector(max.x, min.y, max.z)
    };

    Vector pointsTransformed[8];

    for (int i = 0; i < 8; i++)
    {
        math::VectorTransform(points[i], trans, pointsTransformed[i]);
    }

    Vector screen_points[8] = {};

    for (int i = 0; i < 8; i++) {
        if (!math::WorldToScreen(pointsTransformed[i], screen_points[i]))
            return rect;
    }

    auto left = screen_points[0].x;
    auto top = screen_points[0].y;
    auto right = screen_points[0].x;
    auto bottom = screen_points[0].y;

    for (int i = 1; i < 8; i++)
    {
        if (left > screen_points[i].x)
            left = screen_points[i].x;
        if (top < screen_points[i].y)
            top = screen_points[i].y;
        if (right < screen_points[i].x)
            right = screen_points[i].x;
        if (bottom > screen_points[i].y)
            bottom = screen_points[i].y;
    }

    return RECT{ (long)left, (long)top, (long)right, (long)bottom };
}
 
Femboy Access
Эксперт
Статус
Оффлайн
Регистрация
11 Ноя 2020
Сообщения
1,333
Реакции[?]
428
Поинты[?]
96K
есть такая вещь как который нужно вызывать каждый тик(чтобы esp не фликало и было плавным) с этим прекрасно справляется pain traverse hook
get_box:
RECT get_box(entity_t* ent, Vector pointstransf[])
{
    RECT rect{};
    auto collideable = ent->GetCollideable();

    if (!collideable)
        return rect;

    auto min = collideable->OBBMins();
    auto max = collideable->OBBMaxs();

    const matrix3x4_t& trans = ent->coordinate_frame();

    Vector points[] =
    {
        Vector(min.x, min.y, min.z),
        Vector(min.x, max.y, min.z),
        Vector(max.x, max.y, min.z),
        Vector(max.x, min.y, min.z),
        Vector(max.x, max.y, max.z),
        Vector(min.x, max.y, max.z),
        Vector(min.x, min.y, max.z),
        Vector(max.x, min.y, max.z)
    };

    Vector pointsTransformed[8];

    for (int i = 0; i < 8; i++)
    {
        math::VectorTransform(points[i], trans, pointsTransformed[i]);
    }

    Vector screen_points[8] = {};

    for (int i = 0; i < 8; i++) {
        if (!math::WorldToScreen(pointsTransformed[i], screen_points[i]))
            return rect;
    }

    auto left = screen_points[0].x;
    auto top = screen_points[0].y;
    auto right = screen_points[0].x;
    auto bottom = screen_points[0].y;

    for (int i = 1; i < 8; i++)
    {
        if (left > screen_points[i].x)
            left = screen_points[i].x;
        if (top < screen_points[i].y)
            top = screen_points[i].y;
        if (right < screen_points[i].x)
            right = screen_points[i].x;
        if (bottom > screen_points[i].y)
            bottom = screen_points[i].y;
    }

    return RECT{ (long)left, (long)top, (long)right, (long)bottom };
}
Но имгуи не умеет рендериться в пеинттраверсе?
Тебе надо написать свое апи для рендера в пеинттраверсе для имгуая, но у тебя и это не получится т.к. сюрфейс рендер слишком хай-левельный, т.е. единственный выход - рисовать в директх хуке
 
Хех.......)#манипулятор #кукловод #манипуляция
Участник
Статус
Оффлайн
Регистрация
28 Дек 2019
Сообщения
558
Реакции[?]
224
Поинты[?]
3K
Но имгуи не умеет рендериться в пеинттраверсе?
Тебе надо написать свое апи для рендера в пеинттраверсе для имгуая, но у тебя и это не получится т.к. сюрфейс рендер слишком хай-левельный, т.е. единственный выход - рисовать в директх хуке
Что вы за словесный понос только что высрали? Вы хотя бы понимаете значение слов, которые вы употребляете в своей лексике? Рендер ImGui, действительно, нужно вызывать в одном из хуков D3DDevice (Present/EndScene), а вот ESP вашего чита, а именно вызов функций отдельного дравлиста ImGui рекомендуется вызывать в одной из функций игры, как PaintTraverse, VGUI_Paint или даже FrameStageNotify. Связано это с тем, что происходит рассинхронизация с внутреигровыми и внешними функциями, из-за чего, как и говорил ТС, происходят шейки у ESP. Пример правильного кода вы можете посмотреть во многих открытых исходниках (CSGOSimple, wok-csgo-v2 and etc...). Чтобы это всё объяснить, мне достаточно было прочитать информацию в ОТКРЫТЫХ ДЛЯ ВСЕХ источниках невероятной технологии ИНТЕРНЕТ.
Посмотреть вложение 249856
draw_text:
void imguirender::draw_text(const std::string& text, ImFont* font, ImVec2 pos, float size, color outline, color clr, bool text_center_align, bool text_right_align, bool text_outline, bool text_dropshadow)
{
    _drawList = ImGui::GetBackgroundDrawList();

    _drawList->PushTextureID(font->ContainerAtlas->TexID);

    ImVec2 textSize = ImGui::CalcTextSize(text.c_str());

    if (!text_right_align && text_center_align)
    {
        pos.x -= textSize.x / 2.0f;
    }

    if (!text_center_align && text_right_align)
    {
        pos.x -= textSize.x;
    }

    if (!text_outline && text_dropshadow)
    {
        _drawList->AddText(font, size, ImVec2(pos.x + 1, pos.y + 1), getU32(color(outline[0], outline[1], outline[2], clr.get_alpha())), text.c_str());
    }

    if (!text_dropshadow && text_outline)
    {
       _drawList->AddText(font, size, ImVec2(pos.x + 1, pos.y + 1), getU32(color(outline[0], outline[1], outline[2], clr.get_alpha())), text.c_str());
       _drawList->AddText(font, size, ImVec2(pos.x - 1, pos.y - 1), getU32(color(outline[0], outline[1], outline[2], clr.get_alpha())), text.c_str());
       _drawList->AddText(font, size, ImVec2(pos.x + 1, pos.y - 1), getU32(color(outline[0], outline[1], outline[2], clr.get_alpha())), text.c_str());
       _drawList->AddText(font, size, ImVec2(pos.x - 1, pos.y + 1), getU32(color(outline[0], outline[1], outline[2], clr.get_alpha())), text.c_str());
    }

    _drawList->AddText(font, size, pos, getU32(clr), text.c_str());

    _drawList->PopTextureID();

}
хукаю есп тут
Посмотреть вложение 249857 Посмотреть вложение 249858
Для вызова есп использую paint_traverse хук и present
Если я правильно понял точку остановы, у вас скорее всего не прошла конструкция шрифта, возможно, вы не вызвали g_font = io.Fonts->AddFont ...?
 
Разработчик
Статус
Оффлайн
Регистрация
1 Сен 2018
Сообщения
1,598
Реакции[?]
880
Поинты[?]
114K
Посмотреть вложение 249856
draw_text:
void imguirender::draw_text(const std::string& text, ImFont* font, ImVec2 pos, float size, color outline, color clr, bool text_center_align, bool text_right_align, bool text_outline, bool text_dropshadow)
{
    _drawList = ImGui::GetBackgroundDrawList();

    _drawList->PushTextureID(font->ContainerAtlas->TexID);

    ImVec2 textSize = ImGui::CalcTextSize(text.c_str());

    if (!text_right_align && text_center_align)
    {
        pos.x -= textSize.x / 2.0f;
    }

    if (!text_center_align && text_right_align)
    {
        pos.x -= textSize.x;
    }

    if (!text_outline && text_dropshadow)
    {
        _drawList->AddText(font, size, ImVec2(pos.x + 1, pos.y + 1), getU32(color(outline[0], outline[1], outline[2], clr.get_alpha())), text.c_str());
    }

    if (!text_dropshadow && text_outline)
    {
       _drawList->AddText(font, size, ImVec2(pos.x + 1, pos.y + 1), getU32(color(outline[0], outline[1], outline[2], clr.get_alpha())), text.c_str());
       _drawList->AddText(font, size, ImVec2(pos.x - 1, pos.y - 1), getU32(color(outline[0], outline[1], outline[2], clr.get_alpha())), text.c_str());
       _drawList->AddText(font, size, ImVec2(pos.x + 1, pos.y - 1), getU32(color(outline[0], outline[1], outline[2], clr.get_alpha())), text.c_str());
       _drawList->AddText(font, size, ImVec2(pos.x - 1, pos.y + 1), getU32(color(outline[0], outline[1], outline[2], clr.get_alpha())), text.c_str());
    }

    _drawList->AddText(font, size, pos, getU32(clr), text.c_str());

    _drawList->PopTextureID();

}
хукаю есп тут
Посмотреть вложение 249857 Посмотреть вложение 249858
Для вызова есп использую paint_traverse хук и present
у тебя прям в ассерте показано, что не так
 
Последнее редактирование:
щитпостер стат ратио 0.17
Участник
Статус
Оффлайн
Регистрация
28 Окт 2017
Сообщения
1,243
Реакции[?]
227
Поинты[?]
38K
Что вы за словесный понос только что высрали? Вы хотя бы понимаете значение слов, которые вы употребляете в своей лексике? Рендер ImGui, действительно, нужно вызывать в одном из хуков D3DDevice (Present/EndScene), а вот ESP вашего чита, а именно вызов функций отдельного дравлиста ImGui рекомендуется вызывать в одной из функций игры, как PaintTraverse, VGUI_Paint или даже FrameStageNotify. Связано это с тем, что происходит рассинхронизация с внутреигровыми и внешними функциями, из-за чего, как и говорил ТС, происходят шейки у ESP. Пример правильного кода вы можете посмотреть во многих открытых исходниках (CSGOSimple, wok-csgo-v2 and etc...). Чтобы это всё объяснить, мне достаточно было прочитать информацию в ОТКРЫТЫХ ДЛЯ ВСЕХ источниках невероятной технологии ИНТЕРНЕТ.

Если я правильно понял точку остановы, у вас скорее всего не прошла конструкция шрифта, возможно, вы не вызвали g_font = io.Fonts->AddFont ...?
Это Вы на фотокарточке профиля?
 
Сверху Снизу