Можешь скинуть проект в ЛС, я в свободное время глянупиздец(
и чо делать?
ImGui_ImplDX9_InvalidateDeviceObjects(); вот у меня вызывается в lost event
очистку шрифтов я убрал, но ничего не изменяется(((
Можешь скинуть проект в ЛС, я в свободное время глянупиздец(
и чо делать?
ImGui_ImplDX9_InvalidateDeviceObjects(); вот у меня вызывается в lost event
очистку шрифтов я убрал, но ничего не изменяется(((
короче есть такой код
и там есть трабл в том что при выводе курсора можно управлять педом, но а мне надо что бы при выводе курсора нельзя было типо как в сампе открываешь чат/esc что бы так же выводило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); } }
на 11 винде проблема с путями.Столкнулся с такой проблемой, что на Windows 11 32-х битной структуры плагины не запускаются (ну когда x86 выбираешь в Visual Studio)
И вообще, на 11 винде как-то не стабильно работает гта
Сделал.При запуске предлагает выбрать монитор и разрешение, как можно перехватить это окно выбора и изменить, картинку там добавить или текст какой то?
Через IDA смотрел не нашёл по strings ничего подобного.
В потоке изменил, через опрос (polling)Как удалось?
:/Посмотреть вложение 278217
нопать в samp.dll от 100C612E до 100C6218
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");
}
}
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помогите с моей функцией 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; } } }
const float RadarWidth = 1.8f; // NewWidth
const float RadarHeight = 1.8f; // NewHeight
template<typename T>
bool SafeWrite(void* address, T value)
{
DWORD oldProtect;
if (VirtualProtect(address, sizeof(T), PAGE_EXECUTE_READWRITE, &oldProtect))
{
*reinterpret_cast<T*>(address) = value;
VirtualProtect(address, sizeof(T), oldProtect, &oldProtect);
return true;
}
return false;
}
void SetRadarSize()
{
//height
uintptr_t widthAddresses[] = { 0x5834C2, 0x58A449, 0x58A7E9, 0x58A840, 0x58A943, 0x58A99D };
for (auto addr : widthAddresses)
SafeWrite<float>(reinterpret_cast<void*>(addr), RadarWidth);
//width
uintptr_t heightAddresses[] = { 0x58A47D, 0x58A632, 0x58A6AB, 0x58A70E, 0x58A801, 0x58A8AB, 0x58A921, 0x58A9D5, 0x5834F6 };
for (auto addr : heightAddresses)
SafeWrite<float>(reinterpret_cast<void*>(addr), RadarHeight);
}
Ты указатель на переменные должен передавать, а не их значение, вроде как.Пробую изменить размеры радара, при открытии сцены игры крашит, в чём может быть проблема? 🧐
с++:const float RadarWidth = 1.8f; // NewWidth const float RadarHeight = 1.8f; // NewHeight template<typename T> bool SafeWrite(void* address, T value) { DWORD oldProtect; if (VirtualProtect(address, sizeof(T), PAGE_EXECUTE_READWRITE, &oldProtect)) { *reinterpret_cast<T*>(address) = value; VirtualProtect(address, sizeof(T), oldProtect, &oldProtect); return true; } return false; } void SetRadarSize() { //height uintptr_t widthAddresses[] = { 0x5834C2, 0x58A449, 0x58A7E9, 0x58A840, 0x58A943, 0x58A99D }; for (auto addr : widthAddresses) SafeWrite<float>(reinterpret_cast<void*>(addr), RadarWidth); //width uintptr_t heightAddresses[] = { 0x58A47D, 0x58A632, 0x58A6AB, 0x58A70E, 0x58A801, 0x58A8AB, 0x58A921, 0x58A9D5, 0x5834F6 }; for (auto addr : heightAddresses) SafeWrite<float>(reinterpret_cast<void*>(addr), RadarHeight); }
Крашит как только должен появится радар