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

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

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

C++:
Expand Collapse Copy
    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
 
ESP уезжает вниз от противника
Вероятно ты получаешь позицию самого плеера, а она отдает положение самой нижней кости. Поэтому получаешь позицию кости головы (8) или живота (5) и радуешься жизни.
 
Вероятно ты получаешь позицию самого плеера, а она отдает положение самой нижней кости. Поэтому получаешь позицию кости головы (8) или живота (5) и радуешься жизни.
Ну тебе скинуть как у меня код выглядит от esp?
У меня нет позиции головы, я ее не получаю

C++:
Expand Collapse Copy
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++:
Expand Collapse Copy
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++:
Expand Collapse Copy
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++:
Expand Collapse Copy
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;
}
 
Так я и говорю, берешь и получаешь позицию головы и от нее рисуешь боксы

C++:
Expand Collapse Copy
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?
и как потом отрисовывать через кость головы боксы?
 
Последнее редактирование:
Что означает 0x30 и 0xC, 0x1C, 0x2C?
0x30 это смещение по которому находится структура координатов кости
0xC, 0x1C, 0x2C это соответственно смещение для координат x, y и z соответственно (они хранятся во флоате, а как ты (возможно) знаешь, то размер одного флота = 4 байтам)
 
0x30 это смещение по которому находится структура координатов кости
0xC, 0x1C, 0x2C это соответственно смещение для координат x, y и z соответственно (они хранятся во флоате, а как ты (возможно) знаешь, то размер одного флота = 4 байтам)
Понял, большое спасибо за информацию, я попробую сделать сам, но ты если сможешь, то подскажи как через кость вызывать, сам могу пример не найти
 
Всем Привет, смотря функцию WorldToScreen в исходниках и смотря исходники где есть оверлей, наткнулся на такую проблему что везде ESP уезжает вниз от противника, и находится хер знает где, что не так в функции и из за нее ли это? Если что, подскажите что нужно исправить. + фото Уехавшего ESP

C++:
Expand Collapse Copy
    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
 
Назад
Сверху Снизу