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

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

SumJest

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

SumJest

Известный
Автор темы
31
12
C++:
DWORD *numOfPed = (DWORD *)(0xB74490 + 0xC);
12 в десятичной и 12 в шестнадцатеричной это разные числа
Думал там уже в шестнадцатеричной написано :-)
C++:
            DWORD* start = (DWORD*)0xB74490;
            DWORD *numOfPed = (DWORD *)(*start + 0xC);
            char outstring[10];
            sprintf(outstring, "%d", numOfPed);
Что-то не то. И если как у тебя тоже не то.
 

SumJest

Известный
Автор темы
31
12
Думал там уже в шестнадцатеричной написано :)
C++:
            DWORD* start = (DWORD*)0xB74490;
            DWORD *numOfPed = (DWORD *)(*start + 0xC);
            char outstring[10];
            sprintf(outstring, "%d", numOfPed);
Что-то не то. И если как у тебя тоже не то.
Я затупил, вывожу адрес :D. Спасибо
 

Сэнд

Известный
Проверенный
436
212
Как теперь перебрать всех игроков?
C++:
CPed* pedsList = (CPed*)(*start + 0x4);
Получил указатель на массив, что делать дальше без понятия...
ну теоретически можно в цикле брать из массива элементы по индексу для дальнейших операций с ними
 

SumJest

Известный
Автор темы
31
12
ну теоретически можно в цикле брать из массива элементы по индексу для дальнейших операций с ними
Это я понял, а как из CPed(в случае если это пэд игрока) получить его id?
 

SumJest

Известный
Автор темы
31
12
Никак. Id - это чисто самповская тема, и в гташных структурах ты его не найдешь
Ясен пень, как тогда поступать? В клео это делается через хэндл, там тоже по памяти проходятся циклом.
 

memir

🇷🇺
Всефорумный модератор
332
594
Ясен пень, как тогда поступать? В клео это делается через хэндл, там тоже по памяти проходятся циклом.
Циклом по пулу игроков бегай, и у каждого игрока сверяй указатель на CPed со своим. Если совпало, то из структуры игрока забираешь id
 

SumJest

Известный
Автор темы
31
12
Циклом по пулу игроков бегай, и у каждого игрока сверяй указатель на CPed со своим. Если совпало, то из структуры игрока забираешь id
По всем игрокам? Не понял немного, можешь на примере показать?
 
Статус
В этой теме нельзя размещать новые ответы.