-
Автор темы
- #1
Пожалуйста, авторизуйтесь для просмотра ссылки.
Сегодня мы создадим свой external Glow ESP на основе навыков из прошлых уроков.
Возьмем код из наших прошлых уроков и оставим только:
Создадим структуру glow обводки:
C++:
typedef struct GlowObjectDefinition_t {
float r;
float g;
float b;
float a;
uint8_t unk1[16];
bool m_bRenderWhenOccluded;
bool m_bRenderWhenUnoccluded;
bool m_bFullBloom;
int GlowStyle;
uint8_t unk2[10];
} GlowObjectDefinition_t;
Добавим новые адреса типа int:
C++:
int glowArray = mem.Read<int>(clientAddr.dwBase + dwGlowObjectManager);
int glowCount = mem.Read<int>(clientAddr.dwBase + dwGlowObjectManager + 0x4);
Создадим цикл for, который будет просчитывать количество объектов glow:
C++:
for (int i = 0; i < glowCount; i++) {
///код будем вставлять сюда...
}
C++:
DWORD gEntity = mem.Read<DWORD>(glowArray + 0x38 * i);
if (!gEntity)
continue;
C++:
int entHp = mem.Read<int>(gEntity + m_iHealth);
if (!entHp)
continue;
int enTeam = mem.Read<int>(gEntity + m_iTeamNum);
if (enTeam == LocalTeam)
continue;
C++:
static GlowObjectDefinition_t Glow = mem.Read<GlowObjectDefinition_t>(glowArray + (i * 0x38) + 0x4);
if (enTeam == 3)
{
Glow.r = 0.447058827f;
Glow.g = 0.607843161f;
Glow.b = 0.8666667f;
Glow.a = 0.5f;
Glow.m_bRenderWhenOccluded = true;
Glow.m_bRenderWhenUnoccluded = false;
}
if (enTeam == 2)
{
Glow.r = 0.8784314f;
Glow.g = 0.6862745f;
Glow.b = 0.3372549f;
Glow.a = 0.5f;
Glow.m_bRenderWhenOccluded = true;
Glow.m_bRenderWhenUnoccluded = false;
}
Мы задаем им цвет в формате RGB, Glow.m_bRenderWhenOccluded рендерит нашу обводку с окклюзией.
Запишем в память наши значения из структуры glow:
C++:
mem.Write<GlowObjectDefinition_t>(glowArray + (i * 0x38) + 0x4, Glow);
C++:
#include <iostream>
#include "Memory.h"
#include "offsets.hpp"
using namespace hazedumper;
using namespace netvars;
using namespace signatures;
PModule clientAddr;
memory mem;
typedef struct GlowObjectDefinition_t {
float r;
float g;
float b;
float a;
uint8_t unk1[16];
bool m_bRenderWhenOccluded;
bool m_bRenderWhenUnoccluded;
bool m_bFullBloom;
int GlowStyle;
uint8_t unk2[10];
} GlowObjectDefinition_t;
int main()
{
while (!mem.Attach("csgo.exe", PROCESS_ALL_ACCESS)) {}
clientAddr = mem.GetModule("client.dll");
std::cout << "Initialized";
while (true) {
system("cls");
DWORD LocalPlayer = mem.Read<DWORD>(clientAddr.dwBase + dwLocalPlayer);
DWORD LocalTeam = mem.Read<DWORD>(LocalPlayer + m_iTeamNum);
DWORD LocalHealth = mem.Read<DWORD>(LocalPlayer + m_iHealth);
int glowArray = mem.Read<int>(clientAddr.dwBase + dwGlowObjectManager);
int glowCount = mem.Read<int>(clientAddr.dwBase + dwGlowObjectManager + 0x4);
for (int i = 0; i < glowCount; i++) {
DWORD gEntity = mem.Read<DWORD>(glowArray + 0x38 * i);
if (!gEntity)
continue;
int entHp = mem.Read<int>(gEntity + m_iHealth);
if (!entHp)
continue;
int enTeam = mem.Read<int>(gEntity + m_iTeamNum);
if (enTeam == LocalTeam)
continue;
static GlowObjectDefinition_t Glow = mem.Read<GlowObjectDefinition_t>(glowArray + (i * 0x38) + 0x4);
if (enTeam == 3)
{
Glow.r = 0.447058827f;
Glow.g = 0.607843161f;
Glow.b = 0.8666667f;
Glow.a = 0.5f;
Glow.m_bRenderWhenOccluded = true;
Glow.m_bRenderWhenUnoccluded = false;
}
if (enTeam == 2)
{
Glow.r = 0.8784314f;
Glow.g = 0.6862745f;
Glow.b = 0.3372549f;
Glow.a = 0.5f;
Glow.m_bRenderWhenOccluded = true;
Glow.m_bRenderWhenUnoccluded = false;
}
mem.Write<GlowObjectDefinition_t>(glowArray + (i * 0x38) + 0x4, Glow);
}
}
return 0;
}