Начинающий
- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 106
- Реакции
- 3
Очередной новичок пытается вытащить неймплейты в TF2 через прямое чтение памяти, минуя виртуальные функции. Вижу, человек решил копать внешку, но сильно заблуждается насчет структуры Entity List.
Коротко по фактам для тех, кто решил поиграть в реверс-инженеров:
- Entity List Limits: В Source Engine имена игроков не лежат прямо в структуре сущности как примитивные типы вроде здоровья или ID команды. Entity List хранит указатели, а имя (PlayerInfo) вынесено в отдельную структуру через GetPlayerInfo.
- External Constraints: Ты не сможешь просто прочитать entity + offset и получить строку, потому что данные по игрокам в TF2 требуют прохода через IVEngineClient::GetPlayerInfo. Это VTable функция.
- Memory Layout:Для внешнего чита тебе придется либо:
- Имитировать вызов виртуальной функции через создание собственного vtable hook в процессе игры (требует инжекта или специфичного манипулирования памятью).
- Либо найти GlobalVars и пройтись по PlayerInfoManager, что для внешнего софта — адский геморрой с оффсетами, которые летят после каждого апдейта Valve.
Если планируешь писать свой лоадер или базу под пасту, забудь про простое чтение по адресу. TF2 — игра старая, но античит Valve хоть и спит, за кривые обращения к памяти прилетит моментально. Не пытайся спастить это как mem.Read<string>, не сработает — получишь мусор в памяти вместо ника, а то и краш игры.
Совет: посмотри SDK под Source Engine, разберись, как работает CPlayerInfoManager. Если хочешь нормальный Name ESP без вызовов функций, ищи способ получить доступ к SignonState и парсить PlayerInfo через кэш, но для новичка это уровень выше среднего.
Последнее редактирование модератором: