swlm
Участник
- 63
- 33
и вот такую хуйню вижу, когда нажимаю кнопки ALT и ENTERлишнее
и вот такую хуйню вижу, когда нажимаю кнопки ALT и ENTERлишнее
При удалении создания шрифта в ресете, ничего не меняется?и вот такую хуйню вижу, когда нажимаю кнопки ALT и ENTERПосмотреть вложение 277204
У меня вообще подозрения на то, что я не правильно понял предназначения этих двух Event`овПри удалении создания шрифта в ресете, ничего не меняется?
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 - восстановлен фокус с экраном?
Это не нужно делать, достаточно вызвать ImGui_ImplDX9_InvalidateDeviceObjects (Восстанавливать состояния в этом случае также не требуется. Это делается автоматически)Так-вот, я делаю очистку шрифта, и у меня игра сразу же при запуске.
пиздец(В точку
Это не нужно делать, достаточно вызвать ImGui_ImplDX9_InvalidateDeviceObjects (Восстанавливать состояния в этом случае также не требуется. Это делается автоматически)
Можешь скинуть проект в ЛС, я в свободное время глянупиздец(
и чо делать?
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;
}
}
}