Начинающий
- Статус
- Оффлайн
- Регистрация
- 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 девблог чит то оффсеты как раз от него в пример взяты
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 девблог чит то оффсеты как раз от него в пример взяты