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

Вопрос Rust External - лут‑ESP рандомно игнорит ящики и аирдропы

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
19 Окт 2025
Сообщения
102
Реакции
4
Здарова, парни. Столкнулся с довольно тупой, но упоротой проблемой в своём external‑чите под Rust, может кто уже проходил через это.

Проблема: рандомно пропадает ESP по луту/ящикам

Делаю отдельный ESP для лут‑объектов (деревянные ящики, военки, аирдропы и т.д.). Игроки рисуются стабильно, с этим всё ок, а вот лут‑ESP ведёт себя как шизофреник:

- часть ящиков видна нормально;
- часть вообще не попадает в список объектов;
- иногда один и тот же ящик появляется/исчезает в ESP при перезаходе на сервер или после рестарта чита.

Причём это не проблема в `world_to_screen` — если объект попал в цикл, он рисуется ровно. Проблема в том, что сами лут–объекты читаются очень нестабильно.

Как сейчас сделано

Я использую классический проход по `BaseNetworkable` -> `clientEntities` и просто фильтрую сущности по имени класса. Упрощённо код выглядит так:

Код:
Expand Collapse Copy
struct BaseObject {
    uintptr_t object;     // GameObject*
    uintptr_t entity;     // BaseEntity*
    std::string name;     // class name / prefab name
};

std::vector<BaseObject> loot_list;

void update_loot_list()
{
    loot_list.clear();

    uintptr_t client_entities = MemUtils::read<uintptr_t>(g_base + offsets::clientEntities);
    if (!client_entities)
        return;

    uintptr_t entity_list = MemUtils::read<uintptr_t>(client_entities + 0x10);
    int entity_count      = MemUtils::read<int>(client_entities + 0x18);

    for (int i = 0; i < entity_count; ++i)
    {
        uintptr_t entity = MemUtils::read<uintptr_t>(entity_list + 0x20 + i * 0x8);
        if (!entity)
            continue;

        uintptr_t object = MemUtils::read<uintptr_t>(entity + 0x10);
        if (!object)
            continue;

        uintptr_t object_name_ptr = MemUtils::read<uintptr_t>(object + 0x60);
        std::string name = MemUtils::read_unicode(object_name_ptr, 64); // мой helper

        if (name.find("loot_barrel") != std::string::npos ||
            name.find("crate_")      != std::string::npos ||
            name.find("supply_drop") != std::string::npos)
        {
            loot_list.push_back({ object, entity, name });
        }
    }
}

В отрисовке просто бегу по `loot_list`, читаю позицию `Transform` и рисую текст/боксы.

Что не так по факту

На практике происходит следующее:

- На одних серверах список лута получается более‑менее полным.
- На других *часть объектов вообще не попадает в цикл* — будто их нет в `clientEntities`.
- Иногда один и тот же ящик, который был в ESP, после респавна/рестарта сервера перестаёт находиться по старым фильтрам по имени.
- Логи показывают, что `entity_count` и `entity_list` читаются корректно, но часть нужных объектов просто не проходит по строковому фильтру: имя либо другое, либо пустое/обрезанное.

Создаётся ощущение, что:

1. Часть лут‑объектов теперь живёт на других классах/префабах, где имя не совпадает с привычными `crate_`, `loot_barrel` и т.д.
2. Либо некоторые сущности теперь подгружаются через другие коллекции (например, отдельные менеджеры/спавнеры), а не через тот же `clientEntities`.
3. Либо я неправильно читаю/декодирую имя `GameObject` (Unicode‑строка), и периодически ловлю мусор или пустые строки вместо реального имени.

Куда копать дальше

Сейчас думаю в две стороны:

1. Перейти с фильтра по `GameObject`‑имени на фильтр по типу/классу, т.е. искать конкретные `LootContainer`, `SupplyDrop`, `HackableLockedCrate` и т.п. по их компонентам/полям, а не по строковому имени.
2. Либо вообще завести нормальный дамп классов, вытащить актуальный список лут‑типа через Il2CppInspector/Cpp2IL и уже от него плясать, вместо тупого `name.find("crate_")`.

Вопрос к тем, кто недавно обновлял лут–ESP

- Вы сейчас цепляетесь за `GameObject`‑имя, за тип компонента (`LootContainer`, `StorageContainer` и т.п.) или за что‑то ещё?
- Есть ли какие‑то «новые» префабы, которые не лежат в `clientEntities`, и их надо брать из другой коллекции/менеджера?
- Было ли такое, что часть лута стабильно не появляется в списке, хотя визуально он перед глазами?

Понимаю, что проблема отчасти «ручная» (я сам фильтрую по строкам), но сейчас уже не уверен, что вообще смотрю в правильную структуру — ощущение, что Facepunch на луте тихо что‑то подкрутили.
 
Последнее редактирование:
Назад
Сверху Снизу