Получить все Ped'ы в радиусе видимости

Статус
В этой теме нельзя размещать новые ответы.

SumJest

Известный
Автор темы
31
12
В полезной статье на вики нашёл адреса некоторых переменных в гта. Интересуют эти:
0xB74490 - Содержит указатель на указатель. Этот указатель:
  • +0 = Содержит указатель на первый элемент в пуле CPed
  • +4 = Содержит указатель на карту байтов, которая обозначает, какие элементы используются в пуле CPed
  • +8 = [dword] Максимальное число элементов в пуле CPed
  • +12 = [dword] Текущее число элементов в пуле CPed
Смущается указатель на указатель, никак не могу понять что с этим делать. Интуитивно уже не получается. Пытаюсь взять, а получается совсем не то, что мне нужно (Текущее число элементов в пуле). Пытался найти гайды, сорсы некоторых скриптов, нашёл только клео, но там опкодом берётся значение из памяти. Интересует конкретно на языке C++.
 

memir

🇷🇺
Всефорумный модератор
333
599
По всем игрокам? Не понял немного, можешь на примере показать?
C++:
int getSAMPPlayerIDFromGTAPed(struct actor_info *pGTAPed)
{
    if (g_Players == NULL)
        return 0;
    if (actor_info_get(ACTOR_SELF, 0) == pGTAPed)
        return g_Players->sLocalPlayerID;

    int i;
    for (i = 0; i < SAMP_MAX_PLAYERS; i++)
    {
        if (g_Players->iIsListed[i] != 1)
            continue;
        if (g_Players->pRemotePlayer[i] == NULL)
            continue;
        if (g_Players->pRemotePlayer[i]->pPlayerData == NULL)
            continue;
        if (g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor == NULL)
            continue;
        if (g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped == NULL)
            continue;
        if (g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped == pGTAPed)
            return i;
    }

    return ACTOR_SELF;
}
Из собейта
 

SumJest

Известный
Автор темы
31
12
C++:
int getSAMPPlayerIDFromGTAPed(struct actor_info *pGTAPed)
{
    if (g_Players == NULL)
        return 0;
    if (actor_info_get(ACTOR_SELF, 0) == pGTAPed)
        return g_Players->sLocalPlayerID;

    int i;
    for (i = 0; i < SAMP_MAX_PLAYERS; i++)
    {
        if (g_Players->iIsListed[i] != 1)
            continue;
        if (g_Players->pRemotePlayer[i] == NULL)
            continue;
        if (g_Players->pRemotePlayer[i]->pPlayerData == NULL)
            continue;
        if (g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor == NULL)
            continue;
        if (g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped == NULL)
            continue;
        if (g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped == pGTAPed)
            return i;
    }

    return ACTOR_SELF;
}
Из собейта
g_Players что это за переменная? Может библиотеку надо какую подключать?
 
Статус
В этой теме нельзя размещать новые ответы.