Другое С/С++ Вопрос - Ответ

writeline

Новичок
28
9
Да я уже давно справился с этой задачей. Но всё равно спасибо.

Всем привет. Вопрос следующего характера. Не могу понять, почему при Render`е обычного 3D текста через графическую библиотеку ImGui при ALT + ENTER (смене разрешения) всё нормально, но, стоит мне сделать ALT + ENTER, то ники мои вообще не вижу (собсна, которые рендерю через ImGui)
А если я сделаю ALT + ENTER в момент когда рендерится ник над головой, то игра вообще не развернётся и всё.

В чём трабл?
Единственное что удивляет, с HP/Armour барами такого нету.
Может дело в шрифте?

cpp:
void __fastcall CPlayerTags_DrawHealthBar_Hook(void* thisptr, void* edx, CVectorSamp* position, float fHealth, float fArmour, float fDistanceToCamera) {
    if (!deviceReset)
        return cPlayerTags_DrawHealthBar(thisptr, position, fHealth, fArmour, fDistanceToCamera);
   
    Main::RenderBars(position, fDistanceToCamera, fHealth, fArmour);
}

void __fastcall CPlayerTags_DrawLabel_Hook(void* thisptr, void* edx, CVectorSamp* position, const char* szText, unsigned long color, float fDistanceCamera, bool bDrawStatus, int nStatus) {
    /*if (true) {
        return;
    }*/

    if (!deviceReset)
        return cPlayerTags_DrawLabel(thisptr, position, szText, color, fDistanceCamera, bDrawStatus, nStatus);

    Main::RenderText(szText, position, color, fDistanceCamera);
}

Инициализация ImGui.

Events::initGameEvent += []() {
    CHooks::InitMinHook();

    ImGui::CreateContext();
    ImGuiIO& io = ImGui::GetIO(); (void)io;
    io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange;

    myFont = io.Fonts->AddFontFromFileTTF(std::string(CUtils::GetPath() + "font.ttf").c_str(), 18.0f, NULL, io.Fonts->GetGlyphRangesCyrillic());
    if (myFont == nullptr) {
        printf("font not found\n");
        myFont = io.Fonts->AddFontDefault();
    }

    ImGui::StyleColorsDark();

    ImGui_ImplWin32_Init(GetActiveWindow());
    ImGui_ImplDX9_Init(*reinterpret_cast<IDirect3DDevice9**>(0xC97C28));

    CHooks::GameLoop_HookInstall();
    CHooks::CLabel__DrawHookInstall();
    CHooks::CPlayerTags__DrawLabelHookInstall();
    CHooks::CPlayerTags__DrawHealthBarHookInstall();

    return true;
};

Events::d3dResetEvent += []() {
    deviceReset = true;

    ImGui_ImplWin32_Init(GetActiveWindow());
    ImGui_ImplDX9_Init(*reinterpret_cast<IDirect3DDevice9**>(0xC97C28));

    ImGui_ImplDX9_CreateDeviceObjects();

    ImGuiIO& io = ImGui::GetIO();
    io.Fonts->AddFontFromFileTTF(std::string(CUtils::GetPath() + "font.ttf").c_str(), 18.0f, NULL, io.Fonts->GetGlyphRangesCyrillic());
    io.Fonts->Build();

    return true;
};

Events::d3dLostEvent += []() {
    if (!deviceReset) return true;

    deviceReset = false;

    ImGui_ImplWin32_Shutdown();
    ImGui_ImplDX9_Shutdown();

    ImGui_ImplDX9_InvalidateDeviceObjects();

    ImGuiIO& io = ImGui::GetIO();
    io.Fonts->Clear(); // Очистить текущие шрифты

    return true;
};

extern "C" __declspec(dllexport) void Ext_RenderText(const char* szText, CVectorSamp* position, unsigned long color, float fDistanceToCamera, bool isBot = false)
{
    if (!deviceReset) return;

    ImGui_ImplDX9_NewFrame();
    ImGui_ImplWin32_NewFrame();
    ImGui::NewFrame();

    position->z = fDistanceToCamera * 0.047499999 + position->z + 0.2;
    RwV3d pos{ position->x, position->y, position->z };
    RwV3d out;
    float width, height;
    uint8_t r, g, b, a;
    CUtils::explode_argb((uint32_t)color, a, r, g, b);

    CVector cameraPos = TheCamera.GetPosition();
    CEntity* entity = FindPlayerPed();
    CColPoint colPoint;
    bool isLineOfSight = !CWorld::ProcessLineOfSight(
        cameraPos,
        pos,
        colPoint,
        entity,
        true,
        false,
        false,
        true,
        false,
        true,
        false,
        false
    );

    if (!isLineOfSight) return;

    if (CSprite::CalcScreenCoors(pos, &out, &width, &height, true, true)) {
        ImVec2 screenPos(out.x, out.y + 4.0f);
        ImDrawList* drawList = ImGui::GetForegroundDrawList();
        std::string utf8Text = CUtils::ConvertAnsiToUtf8(szText);

        auto RemoveColorCodes = [](const std::string& text) -> std::string {
            std::string result = text;
            size_t pos = 0;
            while ((pos = result.find('{', pos)) != std::string::npos) {
                size_t endPos = result.find('}', pos);
                if (endPos != std::string::npos) {
                    result.erase(pos, endPos - pos + 1);
                }
                else {
                    break;
                }
            }
            return result;
        };

        std::string nickname;
        int playerID = -1;

        size_t openBracket = utf8Text.find('(');
        if (openBracket != std::string::npos) {
            size_t closeBracket = utf8Text.find(')', openBracket);
            if (closeBracket != std::string::npos) {
                nickname = utf8Text.substr(0, openBracket);

                std::string idString = utf8Text.substr(openBracket + 1, closeBracket - openBracket - 1);
                try {
                    playerID = std::stoi(idString);
                }
                catch (const std::exception&) {
                    playerID = -1;
                }

                if (!nickname.empty() && nickname.back() == ' ') {
                    nickname.pop_back();
                }
            }
        }
        else {
            nickname = utf8Text;
            playerID = -1;
        }

        UINT32 characterId = 0;

        if (CHooks::playersCharacterId.contains(playerID)) {
            characterId = CHooks::playersCharacterId[playerID];
        }

        if (!characterId && !isBot) return;

        if (isBot) characterId = playerID;

        nickname = RemoveColorCodes(nickname);

        std::string characterIdPart = " #" + std::to_string(characterId);

        ImVec2 nicknameSize = ImGui::CalcTextSize(nickname.c_str());
        ImVec2 characterIdSize = ImGui::CalcTextSize(characterIdPart.c_str());
        ImVec2 totalSize = ImVec2(nicknameSize.x + characterIdSize.x, std::max(nicknameSize.y, characterIdSize.y));

        ImVec2 centeredPos = screenPos;
        centeredPos.x -= totalSize.x / 2.0f;
        centeredPos.y -= totalSize.y / 2.0f;

        auto DrawTextOutline = [&](const ImVec2& pos, const std::string& text, ImU32 textColor, ImU32 outlineColor = IM_COL32(0, 0, 0, 255)) {
            float outlineThickness = 1.0f;
            ImVec2 offsets[] = {
                ImVec2(-outlineThickness, -outlineThickness), // лево-верх
                ImVec2(0, -outlineThickness),                 // верх
                ImVec2(outlineThickness, -outlineThickness),  // право-верх
                ImVec2(-outlineThickness, 0),                 // лево
                ImVec2(outlineThickness, 0),                  // право
                ImVec2(-outlineThickness, outlineThickness),  // лево-низ
                ImVec2(0, outlineThickness),                  // низ
                ImVec2(outlineThickness, outlineThickness)    // право-низ
            };

            for (int layer = 0; layer < 2; layer++) {
                for (const auto& offset : offsets) {
                    ImVec2 outlinePos = ImVec2(pos.x + offset.x, pos.y + offset.y);
                    drawList->AddText(
                        myFont,
                        ImGui::GetFontSize(),
                        outlinePos,
                        outlineColor,
                        text.c_str()
                    );
                }
            }

            drawList->AddText(
                myFont,
                ImGui::GetFontSize(),
                pos,
                textColor,
                text.c_str()
            );
        };

        if (!nickname.empty()) {
            ImU32 nicknameColor = IM_COL32(r, g, b, 255);
            DrawTextOutline(centeredPos, nickname, nicknameColor);
        }

        ImVec2 characterIdPos = ImVec2(centeredPos.x + nicknameSize.x, centeredPos.y);
        ImU32 whiteColor = IM_COL32(255, 255, 255, 255);
        DrawTextOutline(characterIdPos, characterIdPart, whiteColor);
    }

    ImGui::EndFrame();
    ImGui::Render();
    ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
}
У меня подобное было при рендере текста через DirectX, попробуй восстанавливать состояние, я обошёл это обычным перезапуском рендера
 

swlm

Участник
52
18
У меня подобное было при рендере текста через DirectX, попробуй восстанавливать состояние, я обошёл это обычным перезапуском рендера
Ты имеешь ввиду вот это?

cpp:
ImGui_ImplWin32_Init(GetActiveWindow());
ImGui_ImplDX9_Init(*reinterpret_cast<IDirect3DDevice9**>(0xC97C28));

Восстанавливать состояние? Не особо понял, что ты имел ввиду.

Ты имеешь ввиду вот это?

cpp:
ImGui_ImplWin32_Init(GetActiveWindow());
ImGui_ImplDX9_Init(*reinterpret_cast<IDirect3DDevice9**>(0xC97C28));

Восстанавливать состояние? Не особо понял, что ты имел ввиду.

P.S. Всё исправил. Проблема была в моей невнимательности.

Ты имеешь ввиду вот это?

cpp:
ImGui_ImplWin32_Init(GetActiveWindow());
ImGui_ImplDX9_Init(*reinterpret_cast<IDirect3DDevice9**>(0xC97C28));

Восстанавливать состояние? Не особо понял, что ты имел ввиду.



P.S. Всё исправил. Проблема была в моей невнимательности.
Моим нервам пизда, нихуя не исправилось, как исправить эту ебаную хуйню?
С WindowedMode всё заебись и ALT + ENTER нормально работает, но как я удалю этот ебучий WindowedMode всё летит к хуям собачим, а именно текст ломается нахуй "появляются квадратики какие-то"


cpp:
        Events::initGameEvent += []() {
            CHooks::InitMinHook();

            ImGui::CreateContext();
            ImGuiIO& io = ImGui::GetIO(); (void)io;
            io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange;

            myFont = io.Fonts->AddFontFromFileTTF(std::string(CUtils::GetPath() + "font.ttf").c_str(), 18.0f, NULL, io.Fonts->GetGlyphRangesCyrillic());
            if (myFont == nullptr) {
                printf("font not found\n");
                myFont = io.Fonts->AddFontDefault();
            }

            ImGui::StyleColorsDark();

            ImGui_ImplWin32_Init(GetActiveWindow());
            ImGui_ImplDX9_Init(*reinterpret_cast<IDirect3DDevice9**>(0xC97C28));

            CHooks::GameLoop_HookInstall();
            CHooks::CLabel__DrawHookInstall();
            CHooks::CPlayerTags__DrawLabelHookInstall();
            CHooks::CPlayerTags__DrawHealthBarHookInstall();

            return true;
        };

        Events::d3dResetEvent += []() {
            if (!deviceReset) return false;
            
            deviceReset = false;

            //ImGui::CreateContext();
            //ImGui_ImplWin32_Init(GetActiveWindow());
            //ImGui_ImplDX9_Init(*reinterpret_cast<IDirect3DDevice9**>(0xC97C28));

            ImGui_ImplDX9_CreateDeviceObjects();

            ImGuiIO& io = ImGui::GetIO();
            io.Fonts->AddFontFromFileTTF(std::string(CUtils::GetPath() + "font.ttf").c_str(), 18.0f, NULL, io.Fonts->GetGlyphRangesCyrillic());
            io.Fonts->Build();

            return true;
        };

        Events::d3dLostEvent += []() {
            deviceReset = true;

            //ImGui_ImplWin32_Shutdown();
            //ImGui_ImplDX9_Shutdown();

            ImGui_ImplDX9_InvalidateDeviceObjects();

            //ImGuiIO& io = ImGui::GetIO();
            //io.Fonts->Clear(); // Очистить текущие шрифты

            return true;
        };

        Events::pedDtorEvent += [](CPed* ped) {
            int playerId = CMultiplayer::GetPlayerID(ped);

            if (playerId != 65535) {
                CHooks::playersCharacterId.erase(playerId);
            }
        };
    };
} grade_tags;

BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH) {}
        //gChat.initialize();
    else if (fdwReason == DLL_PROCESS_DETACH)
    {
        ImGui_ImplDX9_Shutdown();
        ImGui_ImplWin32_Shutdown();
        ImGui::DestroyContext();
    }

    return TRUE;
}

extern "C" __declspec(dllexport) void Ext_RenderText(const char* szText, CVectorSamp* position, unsigned long color, float fDistanceToCamera, bool isBot = false)
{
    if (deviceReset) return;

    ImGui_ImplDX9_NewFrame();
    ImGui_ImplWin32_NewFrame();
    ImGui::NewFrame();

    position->z = fDistanceToCamera * 0.047499999 + position->z + 0.2;
    RwV3d pos{ position->x, position->y, position->z };
    RwV3d out;
    float width, height;
    uint8_t r, g, b, a;
    CUtils::explode_argb((uint32_t)color, a, r, g, b);

    CVector cameraPos = TheCamera.GetPosition();
    CEntity* entity = FindPlayerPed();
    CColPoint colPoint;
    bool isLineOfSight = !CWorld::ProcessLineOfSight(
        cameraPos,
        pos,
        colPoint,
        entity,
        true,
        false,
        false,
        true,
        false,
        true,
        false,
        false
    );

    if (!isLineOfSight) return;

    if (CSprite::CalcScreenCoors(pos, &out, &width, &height, true, true)) {
        ImVec2 screenPos(out.x, out.y + 4.0f);
        ImDrawList* drawList = ImGui::GetForegroundDrawList();
        std::string utf8Text = CUtils::ConvertAnsiToUtf8(szText);

        auto RemoveColorCodes = [](const std::string& text) -> std::string {
            std::string result = text;
            size_t pos = 0;
            while ((pos = result.find('{', pos)) != std::string::npos) {
                size_t endPos = result.find('}', pos);
                if (endPos != std::string::npos) {
                    result.erase(pos, endPos - pos + 1);
                }
                else {
                    break;
                }
            }
            return result;
        };

        std::string nickname;
        int playerID = -1;

        size_t openBracket = utf8Text.find('(');
        if (openBracket != std::string::npos) {
            size_t closeBracket = utf8Text.find(')', openBracket);
            if (closeBracket != std::string::npos) {
                nickname = utf8Text.substr(0, openBracket);

                std::string idString = utf8Text.substr(openBracket + 1, closeBracket - openBracket - 1);
                try {
                    playerID = std::stoi(idString);
                }
                catch (const std::exception&) {
                    playerID = -1;
                }

                if (!nickname.empty() && nickname.back() == ' ') {
                    nickname.pop_back();
                }
            }
        }
        else {
            nickname = utf8Text;
            playerID = -1;
        }

        UINT32 characterId = 0;

        if (CHooks::playersCharacterId.contains(playerID)) {
            characterId = CHooks::playersCharacterId[playerID];
        }

        if (!characterId && !isBot) return;

        if (isBot) characterId = playerID;

        nickname = RemoveColorCodes(nickname);

        std::string characterIdPart = " #" + std::to_string(characterId);

        ImVec2 nicknameSize = ImGui::CalcTextSize(nickname.c_str());
        ImVec2 characterIdSize = ImGui::CalcTextSize(characterIdPart.c_str());
        ImVec2 totalSize = ImVec2(nicknameSize.x + characterIdSize.x, std::max(nicknameSize.y, characterIdSize.y));

        ImVec2 centeredPos = screenPos;
        centeredPos.x -= totalSize.x / 2.0f;
        centeredPos.y -= totalSize.y / 2.0f;

        auto DrawTextOutline = [&](const ImVec2& pos, const std::string& text, ImU32 textColor, ImU32 outlineColor = IM_COL32(0, 0, 0, 255)) {
            float outlineThickness = 1.0f;
            ImVec2 offsets[] = {
                ImVec2(-outlineThickness, -outlineThickness), // лево-верх
                ImVec2(0, -outlineThickness),                 // верх
                ImVec2(outlineThickness, -outlineThickness),  // право-верх
                ImVec2(-outlineThickness, 0),                 // лево
                ImVec2(outlineThickness, 0),                  // право
                ImVec2(-outlineThickness, outlineThickness),  // лево-низ
                ImVec2(0, outlineThickness),                  // низ
                ImVec2(outlineThickness, outlineThickness)    // право-низ
            };

            for (int layer = 0; layer < 2; layer++) {
                for (const auto& offset : offsets) {
                    ImVec2 outlinePos = ImVec2(pos.x + offset.x, pos.y + offset.y);
                    drawList->AddText(
                        myFont,
                        ImGui::GetFontSize(),
                        outlinePos,
                        outlineColor,
                        text.c_str()
                    );
                }
            }

            drawList->AddText(
                myFont,
                ImGui::GetFontSize(),
                pos,
                textColor,
                text.c_str()
            );
        };

        if (!nickname.empty()) {
            ImU32 nicknameColor = IM_COL32(r, g, b, 255);
            DrawTextOutline(centeredPos, nickname, nicknameColor);
        }

        ImVec2 characterIdPos = ImVec2(centeredPos.x + nicknameSize.x, centeredPos.y);
        ImU32 whiteColor = IM_COL32(255, 255, 255, 255);
        DrawTextOutline(characterIdPos, characterIdPart, whiteColor);
    }

    ImGui::EndFrame();
    ImGui::Render();
    ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
}

Всякие хуки

void __fastcall CPlayerTags_DrawHealthBar_Hook(void* thisptr, void* edx, CVectorSamp* position, float fHealth, float fArmour, float fDistanceToCamera) {
    if (deviceReset)
        return cPlayerTags_DrawHealthBar(thisptr, position, fHealth, fArmour, fDistanceToCamera);
    
    Main::RenderBars(position, fDistanceToCamera, fHealth, fArmour);
}

void __fastcall CPlayerTags_DrawLabel_Hook(void* thisptr, void* edx, CVectorSamp* position, const char* szText, unsigned long color, float fDistanceCamera, bool bDrawStatus, int nStatus) {
    /*if (true) {
        return;
    }*/

    if (deviceReset)
        return cPlayerTags_DrawLabel(thisptr, position, szText, color, fDistanceCamera, bDrawStatus, nStatus);

    Main::RenderText(szText, position, color, fDistanceCamera);
}
 
Последнее редактирование:

swlm

Участник
52
18
и вот такую хуйню вижу, когда нажимаю кнопки ALT и ENTER
2NfpNsUTJYUFZKEs5hkIfWNzxppUwAruTnCmln0xtg2FV6OOW3hG-zFJD0MIAq9Vi3BoeZkSzZ_SGrYqXscgMuO4.jpg
 

swlm

Участник
52
18
При удалении создания шрифта в ресете, ничего не меняется?
У меня вообще подозрения на то, что я не правильно понял предназначения этих двух Event`ов


cpp:
Events::d3dResetEvent += []() {
    if (!deviceReset) return false;
    
    deviceReset = false;

    ImGui::CreateContext();
    //ImGui_ImplWin32_Init(GetActiveWindow());
    //ImGui_ImplDX9_Init(*reinterpret_cast<IDirect3DDevice9**>(0xC97C28));

    //ImGui_ImplDX9_CreateDeviceObjects();

    //ImGuiIO& io = ImGui::GetIO();
    //io.Fonts->AddFontFromFileTTF(std::string(CUtils::GetPath() + "font.ttf").c_str(), 18.0f, NULL, io.Fonts->GetGlyphRangesCyrillic());
    //io.Fonts->Build();

    return true;
};

Events::d3dLostEvent += []() {
    deviceReset = true;

    //ImGui_ImplWin32_Shutdown();
    //ImGui_ImplDX9_Shutdown();
  
    ImGui_ImplDX9_InvalidateDeviceObjects();

    ImGuiIO& io = ImGui::GetIO();
    io.Fonts->Clear(); // Очистить текущие шрифты

    return true;
};
lost, когда же потерян фокус с экраном, а reset - восстановлен фокус с экраном?
Так-вот, я делаю очистку шрифта, и у меня игра сразу же при запуске.
 

вайега52

Налуашил состояние
Модератор
2,995
3,125
lost, когда же потерян фокус с экраном, а reset - восстановлен фокус с экраном?
В точку
Так-вот, я делаю очистку шрифта, и у меня игра сразу же при запуске.
Это не нужно делать, достаточно вызвать ImGui_ImplDX9_InvalidateDeviceObjects (Восстанавливать состояния в этом случае также не требуется. Это делается автоматически)
 

swlm

Участник
52
18
В точку

Это не нужно делать, достаточно вызвать ImGui_ImplDX9_InvalidateDeviceObjects (Восстанавливать состояния в этом случае также не требуется. Это делается автоматически)
пиздец(
и чо делать?
ImGui_ImplDX9_InvalidateDeviceObjects(); вот у меня вызывается в lost event
очистку шрифтов я убрал, но ничего не изменяется(((
 

вайега52

Налуашил состояние
Модератор
2,995
3,125
пиздец(
и чо делать?
ImGui_ImplDX9_InvalidateDeviceObjects(); вот у меня вызывается в lost event
очистку шрифтов я убрал, но ничего не изменяется(((
Можешь скинуть проект в ЛС, я в свободное время гляну
 

вайега52

Налуашил состояние
Модератор
2,995
3,125
короче есть такой код

C++:
void show_cursor(bool state)
{
    using RwD3D9GetCurrentD3DDevice_t = LPDIRECT3DDEVICE9(__cdecl*)();

    auto rwCurrentD3dDevice{ reinterpret_cast<
        RwD3D9GetCurrentD3DDevice_t>(0x7F9D50U)() };

    if (nullptr == rwCurrentD3dDevice) {
        return;
    }

    static DWORD
        updateMouseProtection,
        rsMouseSetPosProtFirst,
        rsMouseSetPosProtSecond;

    if (state)
    {
        ::VirtualProtect(reinterpret_cast<void*>(0x53F3C6U), 5U,
            PAGE_EXECUTE_READWRITE, &updateMouseProtection);

        ::VirtualProtect(reinterpret_cast<void*>(0x53E9F1U), 5U,
            PAGE_EXECUTE_READWRITE, &rsMouseSetPosProtFirst);

        ::VirtualProtect(reinterpret_cast<void*>(0x748A1BU), 5U,
            PAGE_EXECUTE_READWRITE, &rsMouseSetPosProtSecond);

        // NOP: CPad::UpdateMouse
        *reinterpret_cast<uint8_t*>(0x53F3C6U) = 0xE9U;
        *reinterpret_cast<uint32_t*>(0x53F3C6U + 1U) = 0x15BU;

        // NOP: RsMouseSetPos
        memset(reinterpret_cast<void*>(0x53E9F1U), 0x90, 5U);
        memset(reinterpret_cast<void*>(0x748A1BU), 0x90, 5U);

        rwCurrentD3dDevice->ShowCursor(TRUE);
    }
    else
    {
        // Original: CPad::UpdateMouse
        memcpy(reinterpret_cast<void*>(0x53F3C6U), "\xE8\x95\x6C\x20\x00", 5U);

        // Original: RsMouseSetPos
        memcpy(reinterpret_cast<void*>(0x53E9F1U), "\xE8\xAA\xAA\x0D\x00", 5U);
        memcpy(reinterpret_cast<void*>(0x748A1BU), "\xE8\x80\x0A\xED\xFF", 5U);

        using CPad_ClearMouseHistory_t = void(__cdecl*)();
        using CPad_UpdatePads_t = void(__cdecl*)();

        reinterpret_cast<CPad_ClearMouseHistory_t>(0x541BD0U)();
        reinterpret_cast<CPad_UpdatePads_t>(0x541DD0U)();

        ::VirtualProtect(reinterpret_cast<void*>(0x53F3C6U), 5U,
            updateMouseProtection, &updateMouseProtection);

        ::VirtualProtect(reinterpret_cast<void*>(0x53E9F1U), 5U,
            rsMouseSetPosProtFirst, &rsMouseSetPosProtFirst);

        ::VirtualProtect(reinterpret_cast<void*>(0x748A1BU), 5U,
            rsMouseSetPosProtSecond, &rsMouseSetPosProtSecond);

        rwCurrentD3dDevice->ShowCursor(FALSE);
    }
}
и там есть трабл в том что при выводе курсора можно управлять педом, но а мне надо что бы при выводе курсора нельзя было типо как в сампе открываешь чат/esc что бы так же выводило
 

swlm

Участник
52
18
Столкнулся с такой проблемой, что на Windows 11 32-х битной структуры плагины не запускаются (ну когда x86 выбираешь в Visual Studio)
И вообще, на 11 винде как-то не стабильно работает гта
 

writeline

Новичок
28
9
Столкнулся с такой проблемой, что на Windows 11 32-х битной структуры плагины не запускаются (ну когда x86 выбираешь в Visual Studio)
И вообще, на 11 винде как-то не стабильно работает гта
на 11 винде проблема с путями.
Если же на той же 10й винде ты указываешь путь в плагине \\models\\gta3.img, то на 11 винде уже нужен полный путь: С:\\GTA San Andreas\\models\\gta3.img.
По крайней мере у меня были такие траблы на 11, только из-за этого ушёл обратно на 10ку.










При запуске предлагает выбрать монитор и разрешение, как можно перехватить это окно выбора и изменить, картинку там добавить или текст какой то?
Через IDA смотрел не нашёл по strings ничего подобного.
Сделал.
1757029393486.png
 
Последнее редактирование: