1

Тема: Помилка C2106 =: лівий операнд повинен бути лівим значенням

#include "include.h"
using namespace offsets::netvars;
using namespace offsets::signatures;

BOOL WINAPI glowThread(HMODULE hModule)
{
    uintptr_t GameModule = (uintptr_t)GetModuleHandle("client.dll");

    for (; !GetAsyncKeyState(VK_END); std::this_thread::sleep_for(std::chrono::microseconds(1)))
    {
        uintptr_t localPlayer = *(uintptr_t*)(GameModule + dwLocalPlayer);
        uintptr_t GlowObjectManager = *(uintptr_t*)(GameModule + dwGlowObjectManager);
        uintptr_t EntityList = *(uintptr_t*)(GameModule + dwEntityList);

        if (localPlayer) continue;

        uint32_t localTeam = *(uint32_t*)(localPlayer + m_iTeamNum);

        for (int x = 0; x < 32; x++)
        {
            uintptr_t Enemy = *(uintptr_t*)(GameModule + dwEntityList + x * 0x10);
            if (Enemy == NULL) continue;

            uint32_t glowIndex = *(uint32_t*)(Enemy + m_iGlowIndex);
            uint32_t enemyTeam = *(uint32_t*)(Enemy + m_iTeamNum);

            if (enemyTeam != localTeam)
            {
                *(float*)(GlowObjectManager + glowIndex * 0x38 = 0x4) = 0.f; // R
                *(float*)(GlowObjectManager + glowIndex * 0x38 = 0x8) = 1.f; // G
                *(float*)(GlowObjectManager + glowIndex * 0x38 = 0xC) = 1.f; // A
                *(float*)(GlowObjectManager + glowIndex * 0x38 = 0x10) = 1.7f; // R
            }
            *(bool*)(GlowObjectManager + glowIndex * 0x38 = 0x10) = true;
            *(bool*)(GlowObjectManager + glowIndex * 0x38 = 0x10) = false;
        }
    }

    FreeLibraryAndExitThread(hModule, 0);
    return 0;
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID IpReserved)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        DisableThreadLibraryCalls(hModule);
        CreateThread(0, 0, 0, (LPTHREAD_START_ROUTINE)glowThread, 0, 0);
    case DLL_THREAD_DETACH:
        break;
    }
    return TRUE;
}

Помилки

Серйозність Код Опис Проект Файл Рядок Стан придушення
Помилка (активно) E0137 вираз повинен бути допустимим для зміни лівого значення
GlowTuturial C:\Users\igorp\source\repos\GlowTuturial\GlowTuturial\dllmine.cpp 29

Серйозність Код Опис Проект Файл Рядок Стан придушення
Помилка C2106 =: лівий операнд повинен бути лівим значенням
GlowTuturial C:\Users\igorp\source\repos\GlowTuturial\GlowTuturial\dllmine.cpp 32

2

Re: Помилка C2106 =: лівий операнд повинен бути лівим значенням

А що ви намагаєтеся зробити? Тут якісь складні ігри з адресами в Windows, причому я так бачу, що ви по кілька разів намагаєтеся в одне й те саме місце різні значення писати(?), причому явно без розуміння того, що відбувається.
Конкретно ваша помилка в тому, що в C++ можна робити

a=b=c

при цьому цей вираз виконується справа наліво, і a та b набувають значення c; реалізовано це так: вираз b=c не лише змінює значення b, а ще й повертає це значення, і вираз

a=(b=c)

повністю еквівалентний першому. Але ви робите

(a=b)=c

що не має жодного сенсу: ви намагаєтеся присвоїти значення не змінній, а результату, повернутому виразом (a=b). Для того, щоб це виправити, нам треба знати, що саме ви хочете зробити.

Подякували: leofun011

3

Re: Помилка C2106 =: лівий операнд повинен бути лівим значенням

GPT-4 написав:

Проблема полягає в рядках 30-32 та 34-36, де оператор присвоєння (=) неправильно використовується разом з оператором додавання (+). Щоб виправити помилку, виправте рядки так, як показано нижче:

Замість:

30                *(float*)(GlowObjectManager + glowIndex * 0x38 = 0x4) = 0.f; // R
31                *(float*)(GlowObjectManager + glowIndex * 0x38 = 0x8) = 1.f; // G
32                *(float*)(GlowObjectManager + glowIndex * 0x38 = 0xC) = 1.f; // A
...
34            *(bool*)(GlowObjectManager + glowIndex * 0x38 = 0x10) = true;
35            *(bool*)(GlowObjectManager + glowIndex * 0x38 = 0x10) = false;

Скоригуйте на:

30                *(float*)(GlowObjectManager + glowIndex * 0x38 + 0x4) = 0.f; // R
31                *(float*)(GlowObjectManager + glowIndex * 0x38 + 0x8) = 1.f; // G
32                *(float*)(GlowObjectManager + glowIndex * 0x38 + 0xC) = 1.f; // A
...
34            *(bool*)(GlowObjectManager + glowIndex * 0x38 + 0x24) = true;
35            *(bool*)(GlowObjectManager + glowIndex * 0x38 + 0x25) = false;

Таким чином, код буде мати наступний вигляд:

...
28            if (enemyTeam != localTeam)
29            {
30                *(float*)(GlowObjectManager + glowIndex * 0x38 + 0x4) = 0.f; // R
31                *(float*)(GlowObjectManager + glowIndex * 0x38 + 0x8) = 1.f; // G
32                *(float*)(GlowObjectManager + glowIndex * 0x38 + 0xC) = 1.f; // A
33                *(float*)(GlowObjectManager + glowIndex * 0x38 + 0x10) = 1.7f; // R
34            }
35            *(bool*)(GlowObjectManager + glowIndex * 0x38 + 0x24) = true;
36            *(bool*)(GlowObjectManager + glowIndex * 0x38 + 0x25) = false;
37        }
...

Після внесення цих змін, помилки в коді повинні зникнути.