Крашит при изменении координат машины.

otherwise

Участник
Автор темы
46
7
Пробую изменить координаты машины, в которой находится игрок, но почему-то при нажатии RSHIFT крашит игру, вот адреса.
CPed +0x58C = [dword] Последняя или текущая машина, которую вы водили/ведёте (CarPointer)
+0x14 = [dword] Указатель на матрицу вращения/позиционирования (64 байта)
C++:
WNDPROC pWndProc = nullptr;

DWORD CPed = 0xB6F5F0;
DWORD Car = CPed + 0x58C;
float* CarCoord = (*(DWORD*)Car) ? (float*)(*(DWORD*)(*(DWORD*)Car + 0x14) + 0x64) : NULL;



LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    static bool enabled = false;
    if (uMsg == WM_KEYUP)
    {
        if (wParam == VK_SHIFT && lParam == 0xC0360001) // костыль
        {
            enabled ^= true;
        }
    }

    if (enabled && uMsg == WM_KEYDOWN)
    {
        switch (wParam)
        {
        case VK_UP:

            CarCoord[2] += 2.0f;
            break;
        case VK_DOWN:

            CarCoord[2] -= 2.0f;
            break;
        case 0x41: // 'A' key
            CarCoord[0] -= 1.5f;
            break;
        case 0x44: // 'D' key
            CarCoord[0] += 1.5f;
            break;
        case 0x53: // 'S' key
            CarCoord[1] -= 1.5f;
            break;
        case 0x57: // 'W' key
            CarCoord[1] += 1.5f;
            break;
        default:
            break;
        }
    }
    return CallWindowProcA(WNDPROC(pWndProc), hwnd, uMsg, wParam, lParam);
}

bool WINAPI DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    if (dwReasonForCall == DLL_PROCESS_ATTACH)
        pWndProc = (WNDPROC)SetWindowLongPtr(FindWindowA(nullptr, "GTA:SA:MP"), GWL_WNDPROC, (LONG_PTR)WndProc);
    return true;
}