Помогите понять где ошибка в коде(проблемы с работой в игре)

Начинающий
Статус
Оффлайн
Регистрация
1 Июн 2020
Сообщения
15
Реакции[?]
0
Поинты[?]
0
Если нужен исходник, то могу скинуть. Ну так вот. Что не так, фигли оно не работает?
Мне кажется, что вот сдеся чтото не так

if (local_flags == FL_ON_GROUND && GetAsyncKeyState(VK_SPACE) & 0x80000)



Вот код для бхопа
C++:
#include "csgo.hpp"
#include "process.h"


#define FL_ON_GROUND 257


int main()
{
    process csgo("Counter-Strike: Global Offensive");

    DWORD base_address = csgo.get_module((LPSTR)"client.dll");

    DWORD local_player;
    int local_flags;

    while (true)
    {
        local_player = csgo.rpm<DWORD>(base_address + hazedumper::signatures::dwLocalPlayer);
        local_flags = csgo.rpm<int>(local_player + hazedumper::netvars::m_fFlags);

        if (local_flags == FL_ON_GROUND && GetAsyncKeyState(VK_SPACE) & 0x80000)
        {
            csgo.wpm<bool>(true, base_address + hazedumper::signatures::dwForceJump);
            Sleep(25);
            csgo.wpm<bool>(false, base_address + hazedumper::signatures::dwForceJump);
        }
Вот код для процессов
C++:
#include <Windows.h>
#include<TlHelp32.h>
#include<iostream>

using namespace std;

class process
{
public:
    DWORD process_id;
    HANDLE process_handle;
    string window_name;

    process(string window_name)
    {
        this->window_name = window_name;
        GetWindowThreadProcessId(FindWindow(NULL, this->window_name.c_str()), & this->process_id);
        this->process_handle = OpenProcess(PROCESS_ALL_ACCESS, NULL, this->process_id);
    }
    template <class data_type>
    auto wpm(data_type value, DWORD address)->void
    {
        WriteProcessMemory(this->process_handle, (PVOID)address, &value, sizeof(data_type), NULL);
    }

    template <class data_type>
    auto rpm(DWORD address)->data_type
    {
        data_type buffer;
        ReadProcessMemory(this->process_handle, (PVOID)address, &buffer, sizeof(data_type), NULL);
        return buffer;
    }
    auto get_module(LPSTR module_name)->DWORD
    {
        auto module_snapshot = INVALID_HANDLE_VALUE;
        module_snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, this->process_id);

        if (module_snapshot == INVALID_HANDLE_VALUE)
        {
            cout << "Falied to snapshot of module" << endl;
            return 0;
        }
        MODULEENTRY32 module_entry;
        module_entry.dwSize = sizeof(MODULEENTRY32);

        if (Module32First(module_snapshot, &module_entry))
        {
            if (!strcmp(module_name, module_entry.szModule))
            {
                cout << "Found module " << module_entry.szModule << " with base address " << hex << (DWORD)module_entry.modBaseAddr << endl;
                
                CloseHandle(module_snapshot);
                return (DWORD)module_entry.modBaseAddr;
            }
        }
        while (Module32Next(module_snapshot, &module_entry))
        {
            if (!strcmp(module_name, module_entry.szModule))
            {
                cout << "Found module " << module_entry.szModule << " with base address " << hex << (DWORD)module_entry.modBaseAddr << endl;

                CloseHandle(module_snapshot);
                return (DWORD)module_entry.modBaseAddr;
            }
        }

        cout << "Couldnt find module" << endl;
        CloseHandle(module_snapshot);
        return 0;
    }
};
    }
}
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
(local_flags == FL_ON_GROUND
Возможно если это флаг, то стоит проверять что бит выставлен через &, а не на равенство через ==?
Потому что таким образом ты проверяешь что только этот флаг выставлен и больше ничего, а наверняка там есть и другие активные флаги, которые нарушают проверку.
Плюс вообще проверяй, что процесс открылся и запись происходит.
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
getasynckeystate & 0x8000 а не 0x80000 попробуй, функция short возвращает, 0x80000 не помещается в два байта
 
Начинающий
Статус
Оффлайн
Регистрация
1 Июн 2020
Сообщения
15
Реакции[?]
0
Поинты[?]
0
Возможно если это флаг, то стоит проверять что бит выставлен через &, а не на равенство через ==?
Потому что таким образом ты проверяешь что только этот флаг выставлен и больше ничего, а наверняка там есть и другие активные флаги, которые нарушают проверку.
Плюс вообще проверяй, что процесс открылся и запись происходит.
Буду пробовать делать по разному, как прийду к ответу, доложу
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
getasynckeystate & 0x8000 а не 0x80000 попробуй, функция short возвращает, 0x80000 не помещается в два байта
вообще-то я был не прав, щас сам проверил и работает с 0х80000, так что сорян хуйню сказал получается
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
вообще-то я был не прав
Прав, возвращается short, т.е .16 бит а это максимум 0x8000, если оно вдруг прокатывает с 0x80000 то это просто неопределенное поведение, получается short расширяется по знаковому биту до int, т.е. при 0x8000 станет 0xffff8000, и поэтому срабатывает с маской 0x8000, но это не есть гут.
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
Прав, возвращается short, т.е .16 бит а это максимум 0x8000, если оно вдруг прокатывает с 0x80000 то это просто неопределенное поведение, получается short расширяется по знаковому биту до int, т.е. при 0x8000 станет 0xffff8000, и поэтому срабатывает с маской 0x8000, но это не есть гут.
ага, и вправду. спасибо.
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
оно всеравно меня шлёт
Тебе ж сказали, попробуй с флагом &, а не ==.
Плюс проверь остальной код, поотлаживай, если у тебя в одной строке две ошибки, то проверять все нужно тщательно.
 
Сверху Снизу