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

Исходник [Сурс] Apex Legends — Рабочий Spectator Check (Observer List)

Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
395
Реакции
8
Здарова, народ. Заметил, что у многих в последнее время посыпались списки спектаторов. В Apex это вечная тема после обновлений, когда структуры немного едут.

Решил поделиться рабочим методом через observerList. Фишка этого кода в том, что он адекватно считает не только врагов, но и палит, когда за вами присматривает ваш же тиммейт. Оффсеты в коде ниже актуальные, но если что-то отвалится — вы знаете, где искать базу.

Логика реализации:
  1. Проверяем валидность локал плеера.
  2. Цепляем observerList (база + оффсет).
  3. Итерируемся по списку игроков (max 61 для Apex).
  4. Сверяем индекс сущности, на которую смотрит наблюдатель, с нашим localPlayer.

Код:
Expand Collapse Copy
int CountSpectators(uintptr_t localPlayer)
{
    if (!localPlayer)
        return 0;

    int spectators = 0;
    const int maxPlayers = 61;

    // Актуальный оффсет observerList
    auto observerList = read<uintptr_t>(YOUR_BASE_ADDRESS + 0x6284DB8);
    if (!observerList)
        return 0;

    for (int i = 0; i < maxPlayers; ++i)
    {
        auto entity = GetEntityBase(i);
        if (!entity)
            continue;

        int playerIndex = read<int>(entity + 0x38);
        int specIndex   = read<int>(observerList + playerIndex * 8 + 0x954);

        // Получаем сущность спектатора через EntityList
        auto specEntity = read<uintptr_t>(YOUR_BASE_ADDRESS + dwEntityList + ((specIndex & 0xFFFF) << 5));

        if (specEntity == localPlayer)
            spectators++;
    }

    return spectators;
}

Важное по оффсетам:
Если юзаете какой-то специфический SDK, не забудьте поправить dwEntityList и YOUR_BASE_ADDRESS под свои переменные. По моим тестам, метод стабильный, ложных срабатываний минимум.

Кто уже вшивал подобное в свои internal или external проекты, отпишитесь — как оно по производительности, если чекать каждый кадр?
 
Здарова, народ. Заметил, что у многих в последнее время посыпались списки спектаторов. В Apex это вечная тема после обновлений, когда структуры немного едут.

Решил поделиться рабочим методом через observerList. Фишка этого кода в том, что он адекватно считает не только врагов, но и палит, когда за вами присматривает ваш же тиммейт. Оффсеты в коде ниже актуальные, но если что-то отвалится — вы знаете, где искать базу.

Логика реализации:
  1. Проверяем валидность локал плеера.
  2. Цепляем observerList (база + оффсет).
  3. Итерируемся по списку игроков (max 61 для Apex).
  4. Сверяем индекс сущности, на которую смотрит наблюдатель, с нашим localPlayer.

Код:
Expand Collapse Copy
int CountSpectators(uintptr_t localPlayer)
{
    if (!localPlayer)
        return 0;

    int spectators = 0;
    const int maxPlayers = 61;

    // Актуальный оффсет observerList
    auto observerList = read<uintptr_t>(YOUR_BASE_ADDRESS + 0x6284DB8);
    if (!observerList)
        return 0;

    for (int i = 0; i < maxPlayers; ++i)
    {
        auto entity = GetEntityBase(i);
        if (!entity)
            continue;

        int playerIndex = read<int>(entity + 0x38);
        int specIndex   = read<int>(observerList + playerIndex * 8 + 0x954);

        // Получаем сущность спектатора через EntityList
        auto specEntity = read<uintptr_t>(YOUR_BASE_ADDRESS + dwEntityList + ((specIndex & 0xFFFF) << 5));

        if (specEntity == localPlayer)
            spectators++;
    }

    return spectators;
}

Важное по оффсетам:
Если юзаете какой-то специфический SDK, не забудьте поправить dwEntityList и YOUR_BASE_ADDRESS под свои переменные. По моим тестам, метод стабильный, ложных срабатываний минимум.

Кто уже вшивал подобное в свои internal или external проекты, отпишитесь — как оно по производительности, если чекать каждый кадр?
когда пастишь с юц, не забудь актуальные оффсеты поставить, что OFF_ObserverList что 0x954 устаревшие оффсеты
 
Назад
Сверху Снизу