HeresOtis Posted June 4, 2017 Share Posted June 4, 2017 (edited) I have adapted this from ScripthookDotNet source. All credits to them. GTA V Coordinate Systemx +ve = right, -ve = left | pitchy +ve = front, -ve = behind | rollz +ve = up, -ve = down | yaw #include <Psapi.h>uintptr_t FindPattern(const char *pattern, const char *mask){ MODULEINFO module = {}; GetModuleInformation(GetCurrentProcess(), GetModuleHandle(nullptr), &module, sizeof(MODULEINFO)); auto *address = reinterpret_cast<const char *>(module.lpBaseOfDll), *address_end = address + module.SizeOfImage; const auto mask_length = static_cast<size_t>(strlen(mask) - 1); for (size_t i = 0; address < address_end; address++) { if (*address == pattern[i] || mask[i] == '?') { if (mask[i + 1] == '\0') { return reinterpret_cast<uintptr_t>(address) - mask_length; } i++; } else { i = 0; } } return 0;}struct Vec3{ float x, y, z;};void GetGameplayCameraVectors(){ uintptr_t address = FindPattern("\x48\x8B\xC7\xF3\x0F\x10\x0D", "xxxxxxx") - 0x1D; address = address + *reinterpret_cast<int*>(address) + 4; uint64_t* _gamePlayCameraAddr = reinterpret_cast<uint64_t*>(*reinterpret_cast<int*>(address + 3) + address + 7); Vec3 right = *(Vec3*)(*_gamePlayCameraAddr + 0x1F0); // right.x = *(float*)(*_gamePlayCameraAddr + 0x1F0); // right.y = *(float*)(*_gamePlayCameraAddr + 0x1F4); // right.z = *(float*)(*_gamePlayCameraAddr + 0x1F8); Vec3 forward = *(Vec3*)(*_gamePlayCameraAddr + 0x200); // forward.x = *(float*)(*_gamePlayCameraAddr + 0x200); // forward.y = *(float*)(*_gamePlayCameraAddr + 0x204); // forward.z = *(float*)(*_gamePlayCameraAddr + 0x208); Vec3 up = *(Vec3*)(*_gamePlayCameraAddr + 0x210); // up.x = *(float*)(*_gamePlayCameraAddr + 0x210); // up.y = *(float*)(*_gamePlayCameraAddr + 0x214); // up.z = *(float*)(*_gamePlayCameraAddr + 0x218); Vec3 pos = *(Vec3*)(*_gamePlayCameraAddr + 0x220); // pos.x = *(float*)(*_gamePlayCameraAddr + 0x220); // pos.y = *(float*)(*_gamePlayCameraAddr + 0x224); // pos.z = *(float*)(*_gamePlayCameraAddr + 0x228);} Edited June 4, 2017 by HeresOtis Link to comment Share on other sites More sharing options...
unknown modder Posted June 4, 2017 Share Posted June 4, 2017 (edited) You've turned not nice looking code I wrote in the shvdn source and made it worse. A nicer way of doing it would be to define a matrix struct struct alignas(0x10) vector3_t { float x; float y; float z; // float w;//probably not important};struct alignas(0x10) matrix_t { vector3_t right; vector3_t forward; vector3_t up; vector3_t position;}; then just return the pointer to that matrix. If you wanna be really smart you can define the vector3_t as a xmm register for faster operations on them Edited June 4, 2017 by unknown modder Tez2 1 Link to comment Share on other sites More sharing options...