Господа, проконсультируйте молодого, что не так. Проблема в том, что когда активирую столь прекраснейший чит - ГТАшка работает, всё супер, чат идёт, а вот управление полностью отнимается, камеру подвинуть не могу. Когда выключаю чит, все равно этот фриз управления остаётся, хотя по прежнему всё работает, челики бегают, машинки ездят.
И так, я учусь, за гавнокод не ругайте, лучше укажите на ошибки, исправлюсь:
Код вроде бы читаемый, сразу же подскажу. Всякие "std::chrono::duration_cast<std::chrono::milliseconds>(end - begin);" я делал для того, чтобы программа работала следующим образом: "аир брейк сделал одно действие (НЕ одна итерация цикла), программа зафиксировала сколько времени прошло с момента её запуска, затем еще раз цикл подошёл, она еще раз посчитала, сколько времени прошло с начала, вычла предыдущий результат, если более ста миллисекунд - можно еще раз выполнить одно действие цикла". Прошу, помогите))
P. S. Очень прошу ответить развёрнуто, а не кинуть какую-то левую ссылку на что-то там.
И так, я учусь, за гавнокод не ругайте, лучше укажите на ошибки, исправлюсь:
C++:
#include "pch.h"
#include <Windows.h>
#include <process.h>
#include <vector>
#include <thread>
#include <chrono>
#define button_W 87
#define button_S 83
#define button_A 65
#define button_D 68
std::vector<bool> pButton (1, false); // нажата ли клавиша? задержка до отпускания
int LastUse = 0;
bool AirBrake = false;
void __cdecl CheatStart(void *pArg)
{
auto begin = std::chrono::steady_clock::now();
while (true)
{
if (GetAsyncKeyState(VK_RSHIFT) && !pButton[0])
{
pButton[0] = true;
if (AirBrake)
AirBrake = false;
else
AirBrake = true;
}
if (!GetAsyncKeyState(VK_RSHIFT) && pButton[0]) pButton[0] = false;
if (AirBrake)
{
auto end = std::chrono::steady_clock::now();
auto elapsed_ms = std::chrono::duration_cast<std::chrono::milliseconds>(end - begin);
int Dtime = elapsed_ms.count() - LastUse;
if (Dtime >= 50)
{
LastUse += Dtime;
DWORD Cped = *(DWORD*)0xB6F5F0;
Cped += 0x4C;
*(float*)Cped = 1E-3;
Cped -= 0x4C;
float kAirBrake = 1.5; // длина "телепорта" в аирбрейке
if (GetAsyncKeyState(VK_UP))
{
Cped += 0x14;
DWORD Pstr = *(DWORD*)Cped;
DWORD coord3_adr = Pstr + 0x38; // верт. коорд
*(float*)coord3_adr += kAirBrake;
}
if (GetAsyncKeyState(VK_DOWN))
{
Cped += 0x14;
DWORD Pstr = *(DWORD*)Cped;
DWORD coord3_adr = Pstr + 0x38; // верт. коорд
*(float*)coord3_adr -= kAirBrake;
}
if (GetAsyncKeyState(button_W))
{
Cped += 0x14;
DWORD Pstr = *(DWORD*)Cped;
DWORD coord_adr = Pstr + 0x30;
DWORD coord2_adr = Pstr + 0x34;
float angle = *(float*)0xB6F258 + 1.57079633;
*(float*)coord_adr -= kAirBrake * sin(angle);
*(float*)coord2_adr += kAirBrake * cos(angle);
}
if (GetAsyncKeyState(button_S))
{
Cped += 0x14;
DWORD Pstr = *(DWORD*)Cped;
DWORD coord_adr = Pstr + 0x30;
DWORD coord2_adr = Pstr + 0x34;
float angle = *(float*)0xB6F258 + 1.57079633;
*(float*)coord_adr += kAirBrake * sin(angle);
*(float*)coord2_adr -= kAirBrake * cos(angle);
}
if (GetAsyncKeyState(button_A))
{
Cped += 0x14;
DWORD Pstr = *(DWORD*)Cped;
DWORD coord_adr = Pstr + 0x30;
DWORD coord2_adr = Pstr + 0x34;
float angle = *(float*)0xB6F258 + 1.57079633;
*(float*)coord_adr -= kAirBrake * cos(angle);
*(float*)coord2_adr -= kAirBrake * sin(angle);
}
if (GetAsyncKeyState(button_D))
{
Cped += 0x14;
DWORD Pstr = *(DWORD*)Cped;
DWORD coord_adr = Pstr + 0x30;
DWORD coord2_adr = Pstr + 0x34;
float angle = *(float*)0xB6F258 + 1.57079633;
*(float*)coord_adr += kAirBrake * cos(angle);
*(float*)coord2_adr += kAirBrake * sin(angle);
}
}
}
Sleep(1);
}
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
if (ul_reason_for_call == DLL_PROCESS_ATTACH)
_beginthread(CheatStart, NULL, nullptr);
return TRUE;
}
Код вроде бы читаемый, сразу же подскажу. Всякие "std::chrono::duration_cast<std::chrono::milliseconds>(end - begin);" я делал для того, чтобы программа работала следующим образом: "аир брейк сделал одно действие (НЕ одна итерация цикла), программа зафиксировала сколько времени прошло с момента её запуска, затем еще раз цикл подошёл, она еще раз посчитала, сколько времени прошло с начала, вычла предыдущий результат, если более ста миллисекунд - можно еще раз выполнить одно действие цикла". Прошу, помогите))
P. S. Очень прошу ответить развёрнуто, а не кинуть какую-то левую ссылку на что-то там.