Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Подскажите что здесь не так

Мефедронный Коллайдер Ученик (99), на голосовании 2 года назад
#include "include.h" #include "offsets.h" #include using namespace offsets::signatures; using namespace offsets::netvars; BOOL WINAPI triggerThread(HMODULE hmodule) { uintptr_t gameModule = *(uintptr_t*)GetModuleHandle("client.dll"); while (!GetAsyncKeyState(VK_END)) { uintptr_t localPlayer = *(uintptr_t*)(gameModule + dwLocalPlayer); if (localPlayer == NULL) continue; uint32_t localTeam = *(uint32_t*)(localPlayer + m_iTeamNum); uint32_t CrosshairID = *(uint32_t*)(localPlayer + m_iCrosshairId); if (CrosshairID != 0 && CrosshairID < 32) { uintptr_t Enemy = *(uintptr_t*)(gameModule + dwEntityList + (m_iCrosshairId - 1) * 0x10); if (Enemy == NULL) continue; uint32_t eHealth = *(uint32_t*)(Enemy + m_iHealth); uint32_t EnemyTeam = *(uintptr_t*)(Enemy = m_iTeamNum); { mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); Sleep(20); } Sleep(1); } } } BOOL APIENTRY DllMain(HMODULE hmodule, DWORD ul_reasone_for_call, LPVOID lpReserved) { switch ({ case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hmodule); CloseHandle(CreateThread(0, 0, (LPTHREAD_START_ROUTINE)triggerThread, 0, 0, 0)); case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; }) return TRUE; }
Голосование за лучший ответ
Шрек Ниматор Знаток (326) 2 года назад
Не хватает точки с запятой после инклюдов:
#include "include.h";
#include "offsets.h";

Не указан тип возвращаемого значения для функции DllMain:
BOOL APIENTRY DllMain(HMODULE hmodule, DWORD ul_reasone_for_call, LPVOID lpReserved)

Странный switch-блок, со скобками и отсутствием действий для некоторых кейсов - его нужно заменить на обычный if-блок:
if (ul_reasone_for_call == DLL_PROCESS_ATTACH) {
...
} else if (ul_reasone_for_call == DLL_THREAD_ATTACH) {
...
} else if (ul_reasone_for_call == DLL_THREAD_DETACH) {
...
} else if (ul_reasone_for_call == DLL_PROCESS_DETACH) {
...
}

Ошибка в получении значения переменной EnemyTeam:
uint32_t EnemyTeam = (uintptr_t)(Enemy = m_iTeamNum); - здесь оператор присваивания '=' вместо '+' для вычисления адреса переменной.
Правильно: uint32_t EnemyTeam = (uint32_t)(Enemy + m_iTeamNum);
Taiga tajaУченик (101) 2 года назад
Даун вообще то здесь не хватает Правильно: uint32_t EnemyTeam = (uint32_t)(Enemy + m_iTeamNum
Шрек Ниматор Знаток (326) Taiga taja, завались чорт
serdПросветленный (20242) 2 года назад
лол, какие еще ; после include ...
Professional Professional Мудрец (16358) 2 года назад
Проблемы в коде, которые можно заметить:

1. В первых двух строках из include-файлов отсутствуют угловые скобки (`<>`), нужно использовать такой синтаксис:

```
#include <include.h>
#include <offsets.h>
```

2. В коде используются два пространства имен `offsets::signatures` и `offsets::netvars`, но первый из них не определен. Если вы используете какую-то библиотеку, которая должна предоставлять эти пространства имен, то нужно подключить соответствующий заголовочный файл.

3. В функции `triggerThread` присутствуют две фигурные скобки `{` и `}`, которые никак не связаны друг с другом. Вероятно, одна из этих скобок была случайно добавлена или было потеряно закрытие скобки.

4. В этой же функции в строке `uint32_t EnemyTeam = *(uintptr_t*)(Enemy = m_iTeamNum);`, при присваивании переменной `Enemy` значения `m_iTeamNum`, вместо знака равенства `=` был использован знак сравнения `==`. Нет необходимости присваивать переменной `Enemy` значение `m_iTeamNum`, ведь она уже определена в строке выше.

5. В функции `DllMain` в блоке `switch` не хватает закрывающей скобки `}` после `case DLL_PROCESS_ATTACH:`.

6. В строке `switch ({` в функции `DllMain` не нужны фигурные скобки `{}`. Нужно использовать такой синтаксис:

```
switch (ul_reasone_for_call) {
case DLL_PROCESS_ATTACH:
// ...
break;
case DLL_THREAD_ATTACH:
// ...
break;
case DLL_THREAD_DETACH:
// ...
break;
case DLL_PROCESS_DETACH:
// ...
break;
}
```

7. В условии цикла `while (!GetAsyncKeyState(VK_END))` используется отрицание `!`, что значит, что цикл будет выполняться до тех пор, пока клавиша `VK_END` НЕ нажата. Если вы хотите выйти из цикла при нажатии на клавишу `VK_END`, то нужно использовать следующее условие: `while (GetAsyncKeyState(VK_END) == 0)`.

8. В цикле `while` необходимо добавить `Sleep(1);` перед продолжением итерации цикла, чтобы не перегружать процессор.

9. В функции `triggerThread` вызывается функция `mouse_event` с параметрами, которые равны нулю. Это может быть неправильным поведением, если вы хотите кликнуть на определенную позицию. Нужно использовать соответствующие значения для координат и других параметров.
Яков Гото Искусственный Интеллект (353713) 2 года назад
Примерно все и сразу. Особенно постановка вопроса и выбор категории.
Похожие вопросы