Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Гайд Как создать ESP RUST

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
10 Сен 2025
Сообщения
4
Реакции
0
Получение игроков:

BaseNetworkable → EntityRealm → List<BaseEntity> → BasePlayer

для esp или еще чего нить (external / internal одинаково)

base → clientEntities → entityRealm → entityList → entity loop → фильтр → чтение


Шаг 0 - получить base address

C++uintptr_t gameBase = GetModuleBase("GameAssembly.dll");


Шаг 1 - client entities (статический указатель)

C++uintptr_t clientEntities = gameBase + OFFSET_CLIENT_ENTITIES; // BaseNetworkable::clientEntities


Шаг 2 - EntityRealm

uintptr_t entityRealm = *clientEntities; // BaseNetworkable::clientEntities указывает прямо на EntityRealm*

Шаг 3 - список сущностей

C++uintptr_t entityList = *(entityRealm + 0x10); // EntityRealm::entityList


Шаг 4 - IL2CPP List

C++uintptr_t items = *(entityList + 0x10); // List<BaseEntity>::_items — массив указателей
int size = *(entityList + 0x18); // List<BaseEntity>::_size — количество сущностей


Шаг 5 - перебор

C++for (int i = 0; i < size; i++)
{
uintptr_t entity = *(items + 0x20 + i * 0x8); // items + 0x20 (начало массива) + i * 0x8 (каждый указатель 8 байт)
if (!entity) continue;
}


Шаг 6 - фильтр игроков (самый простой)

C++uintptr_t playerModel = *(entity + 0x4a8); // BasePlayer::playerModel
if (!playerModel) continue; // если playerModel == 0 — это не игрок


Шаг 7 - чтение данных

C++Vector3 pos = *(playerModel + 0x1d8); // PlayerModel::position
float health = *(entity + 0x20c); // BaseCombatEntity::_health
float maxHealth= *(entity + 0x210); // BaseCombatEntity::_maxHealth
bool isLocal = *(playerModel + 0x259); // PlayerModel::isLocalPlayer

шаг 8 - камера и WorldToScreen

Чтобы ESP работал, тебе нужно:

позиция в мире → позиция на экране

Для этого нужна матрица камеры (View/Projection)

Откуда брать матрицу?


Вариант 1 (нормальный) - через Camera

В Unity всегда есть:

Camera.main

В памяти:

Camera → viewMatrix / viewProjectionMatrix

обычно читают что-то вроде:

matrix = *(camera + offset)


Вариант 2 через PlayerEyes

PlayerEyes хранит:

позицию
rotation (углы)

из этого можно собрать матрицу самому:

нужно из PlayerEyes
uintptr_t eyes = *(entity + 0x600);

Дальше обычно:

Vector3 viewOffset = *(eyes + 0x38);


viewOffset — это не матрица
это позиция камеры относительно игрока


Как делается WorldToScreen?

Вариант A - читаешь готовую матрицу

Matrix4x4 viewMatrix;
ReadProcessMemory(hProc, camera + OFFSET_MATRIX, &viewMatrix, sizeof(Matrix4x4), 0);

Вариант B - собираешь сам

(упрощённо)

берёшь:
позицию камеры
rotation (pitch/yaw)
строишь:
view matrix

это сложнее, но работает без поиска Camera

ну короче вот так: entity → позиция → viewMatrix → WorldToScreen → экран

и все заебись у вас есть esp

Где брать оффсеты?

дампером! если вы делаете на 236 девблог чит то оффсеты как раз от него в пример взяты
 
1775334164656.png
 
Получение игроков:

BaseNetworkable → EntityRealm → List<BaseEntity> → BasePlayer

для esp или еще чего нить (external / internal одинаково)

base → clientEntities → entityRealm → entityList → entity loop → фильтр → чтение


Шаг 0 - получить base address

C++uintptr_t gameBase = GetModuleBase("GameAssembly.dll");


Шаг 1 - client entities (статический указатель)

C++uintptr_t clientEntities = gameBase + OFFSET_CLIENT_ENTITIES; // BaseNetworkable::clientEntities


Шаг 2 - EntityRealm

uintptr_t entityRealm = *clientEntities; // BaseNetworkable::clientEntities указывает прямо на EntityRealm*

Шаг 3 - список сущностей

C++uintptr_t entityList = *(entityRealm + 0x10); // EntityRealm::entityList


Шаг 4 - IL2CPP List

C++uintptr_t items = *(entityList + 0x10); // List<BaseEntity>::_items — массив указателей
int size = *(entityList + 0x18); // List<BaseEntity>::_size — количество сущностей


Шаг 5 - перебор

C++for (int i = 0; i < size; i++)
{
uintptr_t entity = *(items + 0x20 + i * 0x8); // items + 0x20 (начало массива) + i * 0x8 (каждый указатель 8 байт)
if (!entity) continue;
}


Шаг 6 - фильтр игроков (самый простой)

C++uintptr_t playerModel = *(entity + 0x4a8); // BasePlayer::playerModel
if (!playerModel) continue; // если playerModel == 0 — это не игрок


Шаг 7 - чтение данных

C++Vector3 pos = *(playerModel + 0x1d8); // PlayerModel::position
float health = *(entity + 0x20c); // BaseCombatEntity::_health
float maxHealth= *(entity + 0x210); // BaseCombatEntity::_maxHealth
bool isLocal = *(playerModel + 0x259); // PlayerModel::isLocalPlayer

шаг 8 - камера и WorldToScreen

Чтобы ESP работал, тебе нужно:

позиция в мире → позиция на экране

Для этого нужна матрица камеры (View/Projection)

Откуда брать матрицу?


Вариант 1 (нормальный) - через Camera

В Unity всегда есть:

Camera.main

В памяти:

Camera → viewMatrix / viewProjectionMatrix

обычно читают что-то вроде:

matrix = *(camera + offset)


Вариант 2 через PlayerEyes

PlayerEyes хранит:

позицию
rotation (углы)

из этого можно собрать матрицу самому:

нужно из PlayerEyes
uintptr_t eyes = *(entity + 0x600);

Дальше обычно:

Vector3 viewOffset = *(eyes + 0x38);


viewOffset — это не матрица
это позиция камеры относительно игрока


Как делается WorldToScreen?

Вариант A - читаешь готовую матрицу

Matrix4x4 viewMatrix;
ReadProcessMemory(hProc, camera + OFFSET_MATRIX, &viewMatrix, sizeof(Matrix4x4), 0);

Вариант B - собираешь сам

(упрощённо)

берёшь:
позицию камеры
rotation (pitch/yaw)
строишь:
view matrix

это сложнее, но работает без поиска Camera

ну короче вот так: entity → позиция → viewMatrix → WorldToScreen → экран

и все заебись у вас есть esp

Где брать оффсеты?

дампером! если вы делаете на 236 девблог чит то оффсеты как раз от него в пример взяты
 
Назад
Сверху Снизу