- 24
- 1
Как вообще делаются читы на C++ для AMAZING ONLINE
Как сделать чит, который бегал бы от одной координаты к другой?
Как сделать чит, который бегал бы от одной координаты к другой?
Два клоуна сверху не смогли тебе нормально ответить, надеюсь я помогу.Как сделать чит, который бегал бы от одной координаты к другой?
Два клоуна сверху не смогли тебе нормально ответить, надеюсь я помогу.Как сделать чит, который бегал бы от одной координаты к другой?
Попытался сделать, что бы при нажатии Numpad1 персонаж начинал бежать пока не нажмёшь Numpad2, а тут данная ошибкаДва клоуна сверху не смогли тебе нормально ответить, надеюсь я помогу.
Для AMAZING ONLINE подходят .asi (по сути, .dll) плагины.
Поэтому тебе просто надо сделать .asi файл. Вот как его делать - интересный вопрос.
Мне кажется, что самый подходящий гайд - вот этот (там их 5 штук). Еще есть заброшенный цикл уроков от Пикселя.
Можно использовать Plugin SDK (в нём уже есть все адреса функций и констант, чтобы не искать всё с нуля). Сам я особо с ним не разбирался, если честно.
Чтобы самому понять как искать нужные тебе значения (в твоём случае - координаты) и как искать функцию, которая заставит твоего игрока бегать и поворачиваться куда нужно, можно глянуть видосы:
И плейлист геймхаклаба.
Но в целом для гта (она же - крмп) уже есть готовые адреса.
Если что-то непонятно конкретно - пиши, но изначально настоятельно рекомендую посмотреть всё, что скинул выше (цикл геймхаклаба очень длинный, его, конечно, можно весь не смотреть сразу). Твой вопрос достаточно широкий, и за день люди не учатся писать читы.
#include "pch.h"
DWORD WINAPI InitializeAndLoad(LPVOID) {
int* CPed;
CPed = (int*)0xB6F5F0;
while (*reinterpret_cast<unsigned char*>(0xC8D4C0) != 9) {
Sleep(100);
}
while (true)
{
if (GetAsyncKeyState(VK_NUMPAD1))
{
CPed + 0x15C = 154;
}
if (GetAsyncKeyState(VK_NUMPAD2))
{
break;
}
}
return 0;
}
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hModule);
CreateThread(0, 0, &InitializeAndLoad, 0, 0, 0);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Надо было всё таки пересмотреть все уроки, которые я тебе скинул.Попытался сделать, что бы при нажатии Numpad1 персонаж начинал бежать пока не нажмёшь Numpad2, а тут данная ошибка
Посмотреть вложение 233807
Бег:#include "pch.h" DWORD WINAPI InitializeAndLoad(LPVOID) { int* CPed; CPed = (int*)0xB6F5F0; while (*reinterpret_cast<unsigned char*>(0xC8D4C0) != 9) { Sleep(100); } while (true) { if (GetAsyncKeyState(VK_NUMPAD1)) { CPed + 0x15C = 154; } if (GetAsyncKeyState(VK_NUMPAD2)) { break; } } return 0; } BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hModule); CreateThread(0, 0, &InitializeAndLoad, 0, 0, 0); break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }
int* CPed;
CPed = (int*)0xB6F5F0;
0xB6F5F0
- это ни что иное как адрес памяти, в котором хранится значение нужного тебе CPed. Для его получения тебе надо прочитать значение по данному адресу:int* CPedPtr; // ptr (pointer) - указатель на переменную (т.е. он хранит адрес памяти этой переменной)
CPedPtr = (int*)0xB6F5F0; // записываем в него адрес нашей перменной (CPed)
int CPed = *CPedPtr; // и разыменовываем (т.е. получаем значение этой самой переменной)
int CPed = *(int*)0xB6F5F0; // просто в одну строку
CPed + 0x15C = 154;
Все эти данные хранятся по порядку в памяти. Так вот CPed указывает на начало структуры (на данном примере - это здоровье), а если нам нужно что-то другое (например, позиция по X) - нам нужно к этому адресу начала структуры добавить сколько-то байт (как у тебя: CPed + 0x15C).Здоровье
Бронежилет
Позиция по X
Позиция по Y
Позиция по Z
ID скина
...
int CPed = *(int*)0xB6F5F0; // читаем значение CPed по адресу 0xB6F5F0
CPed += 0x15C; // прибавляем к этому значению смещение (англ. offset) 0x15C
*(int*)CPed = 154; // меняем значение по адресу CPed + 0x15C
*(int*)CPed = 154; // записываем как 4 байта (int)
*(unsigned char*)CPed = 154; // записываем как 1 байт (unsigned char)
if (GetAsyncKeyState(VK_NUMPAD2))
{
break;
}
break
выйдет из цикла и что у нас дальше в коде, после цикла? return 0
. Программа тупо завершит работу, получается у тебя одноразовая штука. Правильно сделаем так: введём переменную "бежим ли мы сейчас", при нумпад1 - её значение делаем true, при нумпад2 - false.bool run = false;
while (true)
{
if (GetAsyncKeyState(VK_NUMPAD1))
run = true;
if (GetAsyncKeyState(VK_NUMPAD2))
run = false;
if (run)
{
int CPed = *(int*)0xB6F5F0;
CPed += 0x15C;
*(int*)CPed = 154;
}
}
DWORD WINAPI InitializeAndLoad(LPVOID)
{
int CPed = *(int*)0xB6F5F0;
CPed += 0x15C;
while (*(unsigned char*)0xC8D4C0 != 9)
Sleep(100);
bool run = false;
while (true)
{
if (GetAsyncKeyState(VK_NUMPAD1))
run = true;
if (GetAsyncKeyState(VK_NUMPAD2))
run = false;
if (run)
*(int*)CPed = 154;
}
return 0;
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
if (ul_reason_for_call == DLL_PROCESS_ATTACH)
CreateThread(0, 0, &InitializeAndLoad, 0, 0, 0);
return TRUE;
}
run
может записаться хоть 10 раз значение true. В данном случае не страшно, но вообще стоит сделать проверку на НАЖАТИЕ кнопки. Если кнопка нажата, а в некой переменной указано, что отпущена - значит только что нажал. Потом в эту переменную записываешь "нажато", и если отпущена - значит только что отпустил. Такая логика.run = true;
.#include "pch.h"
DWORD WINAPI InitializeAndLoad(LPVOID)
{
int CPed = *(int*)0xB6F5F0;
CPed += 0x15C;
while (*(unsigned char*)0xC8D4C0 != 9)
Sleep(100);
bool run = false;
while (true)
{
if (GetAsyncKeyState(VK_DELETE))
run = true;
if (GetAsyncKeyState(VK_INSERT))
run = false;
if (run)
*(int*)CPed = 154;
}
return 0;
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
if (ul_reason_for_call == DLL_PROCESS_ATTACH)
CreateThread(0, 0, &InitializeAndLoad, 0, 0, 0);
return TRUE;
}
что должно делать?поч не работает
C++:#include "pch.h" DWORD WINAPI InitializeAndLoad(LPVOID) { int CPed = *(int*)0xB6F5F0; CPed += 0x15C; while (*(unsigned char*)0xC8D4C0 != 9) Sleep(100); bool run = false; while (true) { if (GetAsyncKeyState(VK_DELETE)) run = true; if (GetAsyncKeyState(VK_INSERT)) run = false; if (run) *(int*)CPed = 154; } return 0; } BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { if (ul_reason_for_call == DLL_PROCESS_ATTACH) CreateThread(0, 0, &InitializeAndLoad, 0, 0, 0); return TRUE; }
Скорее всего заставлять бегать персонажачто должно делать?
Попытался сделать, что бы при нажатии Numpad1 персонаж начинал бежать пока не нажмёшь Numpad2, а тут данная ошибка
Посмотреть вложение 233807
Бег:#include "pch.h" DWORD WINAPI InitializeAndLoad(LPVOID) { int* CPed; CPed = (int*)0xB6F5F0; while (*reinterpret_cast<unsigned char*>(0xC8D4C0) != 9) { Sleep(100); } while (true) { if (GetAsyncKeyState(VK_NUMPAD1)) { CPed + 0x15C = 154; } if (GetAsyncKeyState(VK_NUMPAD2)) { break; } } return 0; } BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hModule); CreateThread(0, 0, &InitializeAndLoad, 0, 0, 0); break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }
CPed + 0x15C = 154;
GTA SA, естественно. Какие еще могут быть варианты?Привет всем. надеюсь тема ещё жива. Тут такой вопрос. Какую игру выбрать в плагин сдк для амазинг онлайн?