Гайд Написание External чита с нуля. Часть 2 - BHOP и нормальный EntityList

Эксперт
Статус
Оффлайн
Регистрация
31 Авг 2018
Сообщения
1,791
Реакции[?]
1,073
Поинты[?]
29K
Без лишних слов продолжаем писать код, набросал маленький план, что мы сегодня сделаем:
Сделаем класс для ClientState, классы для каждого игрока(ведь гораздо удобнее использовать всем привычные классы).
Итак, создаем файл engine.hpp и наполняем его следующей начинкой:

Код:
#pragma once

#include "vector.hpp"

class Engine
{
public:
    int GetLocalPlayer(); // Нужно, чтобы получить индекс нашего игрока
    bool IsInGame(); // Проверка, находимся ли мы в игре

    Vector GetViewAngles(); // Зачатки аимбота: получаем углы нашего игрока
    void SetViewAngles(const Vector& viewangles); // Зачатки аимбота: устанавливаем углы нашего игрока
};

extern Engine* g_pEngine;
Вроде бы все хорошо, но ругается на отсутствие vector.hpp, создаем его и заполняем этим:
Код:
#pragma once

#include <cmath.h>

class Vector
{
public:
    Vector() { x = y = z = NULL };

    Vector(float X, float Y, float Z)
    {
        x = X;
        y = Y;
        z = Z;
    }

    float Length() const // В будущем понадобится
    {
        return sqrt(x*x + y * y + z * z);
    }

    float LengthSqr() const // В будущем понадобится
    {
        return (x*x + y * y + z * z);
    }

    float DistTo(const Vector &vOther) const // В будущем понадобится
    {
        Vector delta;

        delta.x = x - vOther.x;
        delta.y = y - vOther.y;
        delta.z = z - vOther.z;

        return delta.Length();
    }

    float DistToSqr(const Vector &vOther) const // В будущем понадобится
    {
        Vector delta;

        delta.x = x - vOther.x;
        delta.y = y - vOther.y;
        delta.z = z - vOther.z;

        return delta.LengthSqr();
    }

    float x, y, z;
};
теперь можем вернуться к классу, создаем engine.cpp и наполняем его:
Код:
#include "engine.hpp"

Engine* g_pEngine = new Engine();

bool Engine::IsInGame()
{
    if (!g_Offsets->ClientState)
        return false;
    return (process->Read<int>(g_Offsets->ClientState + 0x108) == (int)SIGNONSTATE_FULL);
}

int Engine::GetLocalPlayer()
{
    if (!g_Offsets->ClientState)
        return -1;
    return process->Read<int>(g_Offsets->ClientState + 0x180);
}

Vector Engine::GetViewAngles()
{
    if (!g_Offsets->ClientState)
        return Vector();
    return process->Read<Vector>(g_Offsets->ClientState + 0x4CE0);
}

void Engine::SetViewAngles(const Vector& viewangles)
{
    if (!g_Offsets->ClientState)
        return;
    process->Write<Vector>(g_Offsets->ClientState + 0x4CE0, viewangles);
}
итак теперь идем в globals.hpp и добавляем
Код:
extern uintptr_t    clientstate;
в globals.cpp то же самое:
Код:
uintptr_t    clientstate        = NULL;
итак теперь все что нужно мы добавили, идем в main.cpp и добавляем две строки
Код:
globals::engineModule    = Mem->GetModule(globals::processID, L"engine.dll");
globals::clientstate    = Mem->Read<uintptr_t>(globals::engineModule + Offsets::dwClientState);
За что отвечают эти две функции(GetModule и Read) мы уже разобрали, так что не будем на них останавливаться идем дальше и удаляем строки отвечающие за получение localplayer'a, надеюсь с этим у вас проблем не будет
создадим наконец файл entity.hpp и пихаем следующее:

Код:
#pragma once

#include <Windows.h>
#include <iostream>

class CPlayer
{
public:
    CPlayer();

    void Update(BYTE PlayerIndex); // Обновляем данные об игроке
    uintptr_t GetPointer(); // Получаем указатель на персонажа
    int GetTeam(); // Получаем команду персонажа
    int GetHealth(); // Получаем здоровье персонажа
    int GetGlowIndex(); // Получаем GlowIndex персонажа
    int GetFlags(); // Получаем флаги игрока

    bool IsValid(); // Проверка на валидность игрока
private:
    uintptr_t pointer; // Здесь хранится указатель на персонажа
    int health; // Здесь хранится здоровье
    int team; // Здесь хранится команда
    int glowIndex; // Здесь хранится GlowIndex
    int flags; // Здесь хранятся флаги игрока
};

extern CPlayer PlayerList[64]; // Список всех энтити
extern CPlayer LocalPlayer;
после этого создаем entity.cpp и заполняем следующим:

Код:
#include "entity.hpp"

CPlayer PlayerList[65];
CPlayer LocalPlayer;

CPlayer::CPlayer()
{
    // Обнуляем все переменные
    pointer = NULL;
    health = NULL;
    team = NULL;
    glowIndex = NULL;
    flags = NULL;
}

void CPlayer::Update(BYTE PlayerIndex)
{
    // Обновляем данные об игроке
    pointer = Mem->Read<uintptr_t>(globals::clientModule + Offsets::dwEntityList + PlayerIndex * 0x10);

    if (!pointer)
        return;

    team = Mem->Read<int>(pointer + Netvars::m_iTeamNum); // Получаем команду игрока
    health = Mem->Read<int>(pointer + Netvars::m_iHealth); // Получаем здоровье игрока
    glowIndex = Mem->Read<int>(pointer + Netvars::m_iGlowIndex); // Получаем GlowIndex игрока
    flags = Mem->Read<int>(pointer + Netvars::m_fFlags); // Получаем флаги игрока
}

uintptr_t CPlayer::GetPointer()
{
    return pointer; // Возвращаем указатель
}

int CPlayer::GetTeam()
{
    return team; // Возвращаем команду
}

int CPlayer::GetHealth()
{
    return health; // Возвращаем здоровье
}

int CPlayer::GetGlowIndex()
{
    return glowIndex; // Возвращаем GlowIndex
}

int CPlayer::GetFlags()
{
    return flags; // Возвращаем флаги
}

bool CPlayer::IsValid()
{
    return pointer != NULL; // Проверка на валидность игрока
}
теперь у нас есть нормальный класс для энтити и мы можем отказаться от многой бесполезнейшей херни ибо у нас теперь класс.
Помните бесконечный цикл в функции main? Давайте видоизменим его и добавим обновление информации об игроках:
Код:
    while (!GetAsyncKeyState(VK_DELETE))
    {
        LocalPlayer.Update(g_pEngine->GetLocalPlayer());
        for (BYTE PlayerIndex = 0; PlayerIndex < 64; PlayerIndex++)
        {
            PlayerList[PlayerIndex].Update(PlayerIndex);
        }
        std::this_thread::sleep_for(1ms);
    }
идем в функцию GlowThread и добавляем в самый верх бесконечного цикла
Код:
if (!g_pEngine->IsInGame())
    continue;
в цикле на каждого игрока убираем все нахуй и пишем код заного(а хули вы хотите я только так и делаю)
Код:
if (!PlayerList[i].IsValid()) // Проверяем игрока на валидность
    continue;

if (PlayerList[i].GetPointer() == LocalPlayer.GetPointer()) // Не применяем Glow на себя
    continue;

int glowIndex = PlayerList[i].GetGlowIndex(); // Получаем glowIndex

GlowStruct Glow;
Glow = Mem->Read<GlowStruct>(glowObject + (glowIndex * 0x38));

if (LocalPlayer.GetTeam() != PlayerList[i].GetTeam()) // Сравниваем команды
{
    Glow.red = 1.f;
    Glow.green = 0.f;
    Glow.blue = 0.f;
    Glow.alpha = 1.f;
}
else
{
    Glow.red = 0.f;
    Glow.green = 0.f;
    Glow.blue = 1.f;
    Glow.alpha = 1.f;
}
// Ну и здесь все как было так и остается!(стабильность залог успеха111!!1)

Glow.renderWhenOccluded = true;
Glow.renderWhenUnoccluded = false;
Mem->Write<GlowStruct>(glowObject + (glowIndex * 0x38), Glow);
Теперь создадим enums.hpp где будут храниться все перечисления и отправляем туда следующее:
Код:
enum SIGNONSTATE // Перечисление всех состояний, нужно для проверки в игре мы или нет
{

    SIGNONSTATE_NONE = 0,
    SIGNONSTATE_CHALLENGE = 1,
    SIGNONSTATE_CONNECTED = 2,
    SIGNONSTATE_NEW = 3,
    SIGNONSTATE_PRESPAWN = 4,
    SIGNONSTATE_SPAWN = 5,
    SIGNONSTATE_FULL = 6,
    SIGNONSTATE_CHANGELEVEL = 7
};

enum FLAGS // Флаги ентити, нужно нам для проверки, на земле ли игрок
{
    FL_ONGROUND = (1 << 0),
    FL_DUCKING = (1 << 1),
    FL_WATERJUMP = (1 << 2),
    FL_ONTRAIN = (1 << 3),
    FL_INRAIN = (1 << 4),
    FL_FROZEN = (1 << 5),
    FL_ATCONTROLS = (1 << 6),
    FL_CLIENT = (1 << 7),
    FL_FAKECLIENT = (1 << 8),
    FL_INWATER = (1 << 9)
};
идем в main.cpp и создаем функцию BHopThread
Код:
void BHopThread()
{
    while (!GetAsyncKeyState(VK_DELETE))
    {

        if (!g_pEngine->IsInGame()) // Проверяем в игре ли мы
            continue;

        if (GetAsyncKeyState(VK_SPACE)) // Проверяем нажатие пробела
        {
            if (LocalPlayer.GetFlags() & FL_ONGROUND) // Проверяем на земле ли мы
                Mem->Write<int>(globals::clientModule + Offsets::dwForceJump, 5); // Заставляем персонажа прыгнуть
            else // Если же не на земле
                Mem->Write<int>(globals::clientModule + Offsets::dwForceJump, 4); // Разрешаем персонажу не прыгать
        }
        std::this_thread::sleep_for(1ms); // Ждем 1 мс чтобы продолжить цикл
    }
}
и просто запускаем поток так же как и поток с GlowESP
Код:
std::thread tBHop(BHopThread);
tBHop.detach();
На этом все, по итогу мы получили нормальный entity и clientstate(engine) класс, бхоп, следующий урок скорее всего будет по триггерботу, посмотрим.
Если есть какие-то вопросы - задавайте, постараюсь ответить
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
31 Дек 2018
Сообщения
481
Реакции[?]
140
Поинты[?]
3K
Не лучшая конструкция BHOP'a, но гайд заслуживает уважения. Если в воздухе при прыжке отпустить и обратно зажать пробел, то прыгать не будет) Это не принципиально, но все же.
Продолжай дальше пилить гайды)
 
Эксперт
Статус
Оффлайн
Регистрация
31 Авг 2018
Сообщения
1,791
Реакции[?]
1,073
Поинты[?]
29K
Не лучшая конструкция BHOP'a, но гайд заслуживает уважения. Если в воздухе при прыжке отпустить и обратно зажать пробел, то прыгать не будет) Это не принципиально, но все же.
Продолжай дальше пилить гайды)
Позже проверю, если это так - пофикшу
 
Эксперт
Статус
Оффлайн
Регистрация
8 Авг 2018
Сообщения
2,218
Реакции[?]
631
Поинты[?]
0
Можно например триггер спастить из aaahbase, но он там вроде говно
Cимпу забыл
 
Последнее редактирование:
Эксперт
Статус
Оффлайн
Регистрация
31 Авг 2018
Сообщения
1,791
Реакции[?]
1,073
Поинты[?]
29K
Стоит ли писать продолжение, не вижу никакого актива на теме и не знаю, стоит ли продолжать?
 
Эксперт
Статус
Оффлайн
Регистрация
31 Авг 2018
Сообщения
1,791
Реакции[?]
1,073
Поинты[?]
29K
Не лучшая конструкция BHOP'a, но гайд заслуживает уважения. Если в воздухе при прыжке отпустить и обратно зажать пробел, то прыгать не будет) Это не принципиально, но все же.
Продолжай дальше пилить гайды)
Пофиксил
 
Хуевый CODER
Забаненный
Статус
Оффлайн
Регистрация
19 Янв 2019
Сообщения
57
Реакции[?]
65
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Нихуя. Ща все тупа пиздец кодерами станут удали тему
 
Начинающий
Статус
Оффлайн
Регистрация
9 Фев 2019
Сообщения
4
Реакции[?]
0
Поинты[?]
0
Можно чисто код на бхоп и как за протектить или что то сделать что бы не банило + где искать новые офсеты именно для бхопа P.s хочу п росто как зухн сделать чит ,потому что если его юзают 100 человек то меньше шанс детекта? И для чего нужен Clientstate и что за классы для него. И где это всё вообще вписывать )
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
31 Дек 2018
Сообщения
481
Реакции[?]
140
Поинты[?]
3K
Можно чисто код на бхоп и как за протектить или что то сделать что бы не банило + где искать новые офсеты именно для бхопа P.s хочу п росто как зухн сделать чит ,потому что если его юзают 100 человек то меньше шанс детекта
нельзя, он сделал не для пастеров.
 
Начинающий
Статус
Оффлайн
Регистрация
9 Фев 2019
Сообщения
4
Реакции[?]
0
Поинты[?]
0
///
Пользователь
Статус
Оффлайн
Регистрация
25 Янв 2018
Сообщения
511
Реакции[?]
114
Поинты[?]
0
Стоит ли писать продолжение, не вижу никакого актива на теме и не знаю, стоит ли продолжать?
xnxkzeu я считаю стоит! Так как, ты развиваешь форум, а в отдельности раздел "Создание читов для CS:GO" не спасченными и интересными темами) Делай конечно)))
 
///
Пользователь
Статус
Оффлайн
Регистрация
25 Янв 2018
Сообщения
511
Реакции[?]
114
Поинты[?]
0
так это типо гайд не? и где вообще всё это прописывать + что нужно сделать что бы не детект?
Для вас таких людей, есть 1 часть..... (https://yougame.biz/threads/65692/unread)
А чисто BHop:
Для просмотра содержимого вам необходимо авторизоваться.
 
Участник
Статус
Оффлайн
Регистрация
4 Авг 2017
Сообщения
463
Реакции[?]
212
Поинты[?]
0
Стоит ли писать продолжение, не вижу никакого актива на теме и не знаю, стоит ли продолжать?
Продолжай. Действительно хороший гайд, код понятен, грамотное оформление. Вообщем молодец.
 
Начинающий
Статус
Оффлайн
Регистрация
9 Фев 2019
Сообщения
4
Реакции[?]
0
Поинты[?]
0
Для вас таких людей, есть 1 часть..... (https://yougame.biz/threads/65692/unread)
А чисто BHop:
Скрытое содержимое
ты моришь да? там рил 60 дней или ты просто напаисал так?
 
///
Пользователь
Статус
Оффлайн
Регистрация
25 Янв 2018
Сообщения
511
Реакции[?]
114
Поинты[?]
0
ты моришь да? там рил 60 дней или ты просто напаисал так?
Реально 60 дней и там чисто код бхопа)
А про что там написано и куда это вставлять ссылка на первую часть....
 
Начинающий
Статус
Оффлайн
Регистрация
9 Фев 2019
Сообщения
4
Реакции[?]
0
Поинты[?]
0
Реально 60 дней и там чисто код бхопа)
А про что там написано и куда это вставлять ссылка на первую часть....
Что такое вообще EntityList ClientState и каковы шансы на отлёт?
 
///
Пользователь
Статус
Оффлайн
Регистрация
25 Янв 2018
Сообщения
511
Реакции[?]
114
Поинты[?]
0
у меня вылезает 90 ошибок что мне делать?
Учить Язык... learncpp.com в помощь, но английского ты не знаешь, значит не поможет....
Просто спастив с темы тебе это ничего не даст.. Если ты не понимаешь ничего, какая строчка за что отвечает, тебе рано этим заниматься(Наверное)
А вообще эта тема создана, чтобы люди научились не пастить, а хотябы на минимальном уровне кодить... Понимать на начальных этапах Game Hacking...
А по теме: ОТКУДА МЫ МОЖЕМ УЗНАТЬ КАКИЕ ОШИБКИ У ТЕБЯ И ЧТО ТЕБЕ ДЕЛАТЬ?????
 
Сверху Снизу