Вопрос Функция WorldToScreen для External

Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
Всем Привет, смотря функцию WorldToScreen в исходниках и смотря исходники где есть оверлей, наткнулся на такую проблему что везде ESP уезжает вниз от противника, и находится хер знает где, что не так в функции и из за нее ли это? Если что, подскажите что нужно исправить. + фото Уехавшего ESP

C++:
    bool world_to_screen(const vec3_t& screen_size, const vec3_t& pos, vec3_t& out, sdk::view_matrix_t matrix) {
        out.x = matrix[0][0] * pos.x + matrix[0][1] * pos.y + matrix[0][2] * pos.z + matrix[0][3];
        out.y = matrix[1][0] * pos.x + matrix[1][1] * pos.y + matrix[1][2] * pos.z + matrix[1][3];

        float w = matrix[3][0] * pos.x + matrix[3][1] * pos.y + matrix[3][2] * pos.z + matrix[3][3];

        if (w < 0.01f)
            return false;

        float inv_w = 1.f / w;
        out.x *= inv_w;
        out.y *= inv_w;

        float x = screen_size.x * .5f;
        float y = screen_size.y * .5f;

        x += 0.5f * out.x * screen_size.x + 0.5f;
        y -= 0.5f * out.y * screen_size.y + 0.5f;

        out.x = x;
        out.y = y;

        return true;
    }
ESP ERROR.png
 
Пользователь
Статус
Оффлайн
Регистрация
17 Июл 2021
Сообщения
462
Реакции[?]
118
Поинты[?]
10K
ESP уезжает вниз от противника
Вероятно ты получаешь позицию самого плеера, а она отдает положение самой нижней кости. Поэтому получаешь позицию кости головы (8) или живота (5) и радуешься жизни.
 
Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
Вероятно ты получаешь позицию самого плеера, а она отдает положение самой нижней кости. Поэтому получаешь позицию кости головы (8) или живота (5) и радуешься жизни.
Ну тебе скинуть как у меня код выглядит от esp?
У меня нет позиции головы, я ее не получаю

C++:
void draw(forceinline::memory_manager* memory, forceinline::dx_renderer* renderer) {
        //create our variables for screnpos
        sdk::vec3_t screen_bottom, screen_top;

        //get base module
        static std::uintptr_t client_dll = memory->get_module_base("client.dll");

        //grab view matrix
        sdk::view_matrix_t view_matrix = memory->read< sdk::view_matrix_t >(client_dll + viewmatrix); //view_matrix

    
        //Doesn't work; flickers a LOT for some reason.
        //static std::uintptr_t crender_bytes = memory->find_pattern( "engine.dll", "B9 ? ? ? ? A1 ? ? ? ? FF 60 38" ) + 1;
        //static std::uintptr_t crender_offset = memory->read< std::uintptr_t >( crender_bytes );

        //sdk::view_matrix_t view_matrix = memory->read< sdk::view_matrix_t >( crender_offset + 39 * 4 );

            //Loop our vector containing the entities
            for (auto& ent : entities) {
                //If our entity isn't valid, skip it
                if (!ent.valid)
                    continue;

                //Convert 3D space coordinates to 2D screen coordinates
                if (!sdk::world_to_screen(screen_size, ent.origin, screen_bottom, view_matrix) || !sdk::world_to_screen(screen_size, ent.top_origin, screen_top, view_matrix))
                    continue;

                //Box properties
                int box_height = screen_bottom.y - screen_top.y;
                int box_width = box_height / 2;
                
                //Draw the ESP
                renderer->draw_outlined_rect(screen_top.x - box_width / 2, screen_top.y, box_width, box_height, D3DCOLOR_RGBA(119, 136, 153, 255));
                renderer->draw_text(ent.name, screen_top.x, screen_top.y - 13, 0xFFFFFFFF, true);
                renderer->draw_text(std::to_string(ent.health) + " HP", screen_top.x, screen_bottom.y, 0xFFFFFFFF);

            }
Ну тебе скинуть как у меня код выглядит от esp?
У меня нет позиции головы, я ее не получаю

C++:
void draw(forceinline::memory_manager* memory, forceinline::dx_renderer* renderer) {
        //create our variables for screnpos
        sdk::vec3_t screen_bottom, screen_top;

        //get base module
        static std::uintptr_t client_dll = memory->get_module_base("client.dll");

        //grab view matrix
        sdk::view_matrix_t view_matrix = memory->read< sdk::view_matrix_t >(client_dll + viewmatrix); //view_matrix

   
        //Doesn't work; flickers a LOT for some reason.
        //static std::uintptr_t crender_bytes = memory->find_pattern( "engine.dll", "B9 ? ? ? ? A1 ? ? ? ? FF 60 38" ) + 1;
        //static std::uintptr_t crender_offset = memory->read< std::uintptr_t >( crender_bytes );

        //sdk::view_matrix_t view_matrix = memory->read< sdk::view_matrix_t >( crender_offset + 39 * 4 );

            //Loop our vector containing the entities
            for (auto& ent : entities) {
                //If our entity isn't valid, skip it
                if (!ent.valid)
                    continue;

                //Convert 3D space coordinates to 2D screen coordinates
                if (!sdk::world_to_screen(screen_size, ent.origin, screen_bottom, view_matrix) || !sdk::world_to_screen(screen_size, ent.top_origin, screen_top, view_matrix))
                    continue;

                //Box properties
                int box_height = screen_bottom.y - screen_top.y;
                int box_width = box_height / 2;
               
                //Draw the ESP
                renderer->draw_outlined_rect(screen_top.x - box_width / 2, screen_top.y, box_width, box_height, D3DCOLOR_RGBA(119, 136, 153, 255));
                renderer->draw_text(ent.name, screen_top.x, screen_top.y - 13, 0xFFFFFFFF, true);
                renderer->draw_text(std::to_string(ent.health) + " HP", screen_top.x, screen_bottom.y, 0xFFFFFFFF);

            }
Что мне нужно добавить что бы данная проблема с есп ушла?
Если можешь, кодом подскажи
 
Пользователь
Статус
Оффлайн
Регистрация
17 Июл 2021
Сообщения
462
Реакции[?]
118
Поинты[?]
10K
Ну тебе скинуть как у меня код выглядит от esp?
У меня нет позиции головы, я ее не получаю

C++:
void draw(forceinline::memory_manager* memory, forceinline::dx_renderer* renderer) {
        //create our variables for screnpos
        sdk::vec3_t screen_bottom, screen_top;

        //get base module
        static std::uintptr_t client_dll = memory->get_module_base("client.dll");

        //grab view matrix
        sdk::view_matrix_t view_matrix = memory->read< sdk::view_matrix_t >(client_dll + viewmatrix); //view_matrix

   
        //Doesn't work; flickers a LOT for some reason.
        //static std::uintptr_t crender_bytes = memory->find_pattern( "engine.dll", "B9 ? ? ? ? A1 ? ? ? ? FF 60 38" ) + 1;
        //static std::uintptr_t crender_offset = memory->read< std::uintptr_t >( crender_bytes );

        //sdk::view_matrix_t view_matrix = memory->read< sdk::view_matrix_t >( crender_offset + 39 * 4 );

            //Loop our vector containing the entities
            for (auto& ent : entities) {
                //If our entity isn't valid, skip it
                if (!ent.valid)
                    continue;

                //Convert 3D space coordinates to 2D screen coordinates
                if (!sdk::world_to_screen(screen_size, ent.origin, screen_bottom, view_matrix) || !sdk::world_to_screen(screen_size, ent.top_origin, screen_top, view_matrix))
                    continue;

                //Box properties
                int box_height = screen_bottom.y - screen_top.y;
                int box_width = box_height / 2;
               
                //Draw the ESP
                renderer->draw_outlined_rect(screen_top.x - box_width / 2, screen_top.y, box_width, box_height, D3DCOLOR_RGBA(119, 136, 153, 255));
                renderer->draw_text(ent.name, screen_top.x, screen_top.y - 13, 0xFFFFFFFF, true);
                renderer->draw_text(std::to_string(ent.health) + " HP", screen_top.x, screen_bottom.y, 0xFFFFFFFF);

            }
Что мне нужно добавить что бы данная проблема с есп ушла?
Если можешь, кодом подскажи
Так я и говорю, берешь и получаешь позицию головы и от нее рисуешь боксы

C++:
Vector3 GetBonePosition(DWORD dwEntity, int iBone)
{
    Vector3 vecBone;

    DWORD dwBoneBase = read<DWORD>(dwEntity + Offsets::m_dwBoneMatrix);

    vecBone.x = read<float>(dwBoneBase + 0x30 * iBone + 0xC);
    vecBone.y = read<float>(dwBoneBase + 0x30 * iBone + 0x1C);
    vecBone.z = read<float>(dwBoneBase + 0x30 * iBone + 0x2C);

    return vecBone;
}
 
Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
Так я и говорю, берешь и получаешь позицию головы и от нее рисуешь боксы

C++:
Vector3 GetBonePosition(DWORD dwEntity, int iBone)
{
    Vector3 vecBone;

    DWORD dwBoneBase = read<DWORD>(dwEntity + Offsets::m_dwBoneMatrix);

    vecBone.x = read<float>(dwBoneBase + 0x30 * iBone + 0xC);
    vecBone.y = read<float>(dwBoneBase + 0x30 * iBone + 0x1C);
    vecBone.z = read<float>(dwBoneBase + 0x30 * iBone + 0x2C);

    return vecBone;
}
Что означает 0x30 и 0xC, 0x1C, 0x2C?
и как потом отрисовывать через кость головы боксы?
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
17 Июл 2021
Сообщения
462
Реакции[?]
118
Поинты[?]
10K
Что означает 0x30 и 0xC, 0x1C, 0x2C?
0x30 это смещение по которому находится структура координатов кости
0xC, 0x1C, 0x2C это соответственно смещение для координат x, y и z соответственно (они хранятся во флоате, а как ты (возможно) знаешь, то размер одного флота = 4 байтам)
 
Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
0x30 это смещение по которому находится структура координатов кости
0xC, 0x1C, 0x2C это соответственно смещение для координат x, y и z соответственно (они хранятся во флоате, а как ты (возможно) знаешь, то размер одного флота = 4 байтам)
Понял, большое спасибо за информацию, я попробую сделать сам, но ты если сможешь, то подскажи как через кость вызывать, сам могу пример не найти
 
UwU Femboy EAC coder
Забаненный
Статус
Оффлайн
Регистрация
27 Мар 2021
Сообщения
252
Реакции[?]
64
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всем Привет, смотря функцию WorldToScreen в исходниках и смотря исходники где есть оверлей, наткнулся на такую проблему что везде ESP уезжает вниз от противника, и находится хер знает где, что не так в функции и из за нее ли это? Если что, подскажите что нужно исправить. + фото Уехавшего ESP

C++:
    bool world_to_screen(const vec3_t& screen_size, const vec3_t& pos, vec3_t& out, sdk::view_matrix_t matrix) {
        out.x = matrix[0][0] * pos.x + matrix[0][1] * pos.y + matrix[0][2] * pos.z + matrix[0][3];
        out.y = matrix[1][0] * pos.x + matrix[1][1] * pos.y + matrix[1][2] * pos.z + matrix[1][3];

        float w = matrix[3][0] * pos.x + matrix[3][1] * pos.y + matrix[3][2] * pos.z + matrix[3][3];

        if (w < 0.01f)
            return false;

        float inv_w = 1.f / w;
        out.x *= inv_w;
        out.y *= inv_w;

        float x = screen_size.x * .5f;
        float y = screen_size.y * .5f;

        x += 0.5f * out.x * screen_size.x + 0.5f;
        y -= 0.5f * out.y * screen_size.y + 0.5f;

        out.x = x;
        out.y = y;

        return true;
    }
Посмотреть вложение 204853
Как screensize получаешь ? Просто похоже как будто ты сделал скринсайз full hd , запуская игру в 2k
 
Начинающий
Статус
Оффлайн
Регистрация
22 Дек 2018
Сообщения
360
Реакции[?]
21
Поинты[?]
0
Сверху Снизу