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

вайега52

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

swlm

Участник
47
15
В точку

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

вайега52

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

вайега52

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

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

Участник
47
15
Столкнулся с такой проблемой, что на 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
 
Последнее редактирование:

swlm

Участник
47
15
Есть одна очень бесячая проблема - при частом ALT + TAB без плагина III.VC.SA.WindowedMode игра в какой-то момент перестаёт разворачиваться, есть ли 100% гарантированный фикс этой проблемы?

И есть какая-то стабильная версия DirectX-9? Потому-что какие-то скрипты ведут себя очень странно на других компьютерах, ну например у меня всё отлично, а у других случаются какие-то краши, хотя у всех все те-же плагины, а происходит иногда какая-то дичь...
 
Последнее редактирование:
  • Эм
Реакции: 0xFF

tanksoftik

Участник
35
7
1757694575863.png

как можно удалить эти кнопки? пробовал нопать в samp.dll от 100C612E до 100C6218 но ничего не получилось, терь просто крашит
 

swlm

Участник
47
15
Почему-то Object 0 is valid не выводится, но по сути должно же..
Я что-то упустил?

C++:
typedef void** samp_objects_array;
typedef uintptr_t* samp_objects_pool;
typedef void* samp_object_ptr;

samp_objects_array CMultiplayer::GetSampObjects()
{
    DWORD sampDLL = (DWORD)GetModuleHandleA("samp.dll");
    if (!sampDLL) return nullptr;

    DWORD sampInfo = *(DWORD*)(sampDLL + 0x26E8DC);
    if (!sampInfo) return nullptr;

    DWORD pPools = *(DWORD*)(sampInfo + 0x3DE);
    if (!pPools) return nullptr;

    DWORD pObjectPool = *(DWORD*)(pPools + 0x14);
    if (!pObjectPool) return nullptr;

    void** objects_array = reinterpret_cast<void**>(pObjectPool + 0xFA4);
    return objects_array;
}

samp_objects_array objects_array = CMultiplayer::GetSampObjects();
if (objects_array != nullptr) {
    samp_object_ptr object = objects_array[0];
    if (object != nullptr) {
        printf("Object 0 is valid!\n");
    }
}
 

leqwe

Новичок
3
0
помогите с моей функцией mark target, она работает, но при нажатии пкм таргет рисуется на миллисекунду и сразу исчезает:

C++:
if (gMarkTarget && sCurrent.gamePed) {
    sAimHudTick = GetTickCount64();
    auto* net = sampapi::v037r1::RefNetGame();
    if (net && net->GetPlayerPool()) {
        auto* lp = net->GetPlayerPool()->GetLocalPlayer();
        if (lp) {
            if (sCurrent.sampPlayerId >= 0)
                lp->m_cameraTarget.m_nPlayer = (unsigned short)sCurrent.sampPlayerId;
            *reinterpret_cast<::CPed**>(*reinterpret_cast<int*>(0xB6F5F0) + 0x79C) = sCurrent.gamePed;
        }
    }
}
 

swlm

Участник
47
15
помогите с моей функцией mark target, она работает, но при нажатии пкм таргет рисуется на миллисекунду и сразу исчезает:

C++:
if (gMarkTarget && sCurrent.gamePed) {
    sAimHudTick = GetTickCount64();
    auto* net = sampapi::v037r1::RefNetGame();
    if (net && net->GetPlayerPool()) {
        auto* lp = net->GetPlayerPool()->GetLocalPlayer();
        if (lp) {
            if (sCurrent.sampPlayerId >= 0)
                lp->m_cameraTarget.m_nPlayer = (unsigned short)sCurrent.sampPlayerId;
            *reinterpret_cast<::CPed**>(*reinterpret_cast<int*>(0xB6F5F0) + 0x79C) = sCurrent.gamePed;
        }
    }
}
так в цикл закинь игровой, game_loop