-
Автор темы
- #1
Привет!
Не могу получить указатель на сущность локального игрока из списка. Делаю следующим образом (тестирую в игре с ботами, OS Windows x64):
1) Посредством вызова EngineClient::GetLocalPlayer() получаю индекс сущности. Всегда возвращает индекс 0.
2) Пробую получить по этому индексу указатель на сущность используя алгоритм из
3) CEntityIdentity найти удается но CEntityIdentity::pEntity у неё равно NULL, следовательно и функция приведенная выше возвращает NULL.
Если посмотрим в отладчик на GameEntitySystem видим следующее:
Указатели на сущности начинаются со смещения 0x18. По алгоритму: 0 (LocalPlayerIndex) / MAX_ENTITIES_IN_LIST = 0, т.е. берем первый указатель в массиве. Смотрим, что там находится:
Очевидно что это CEntityIdentity, т.к. по смещению 0x14 у нас -1 и по смещения 0x50 и 0x58 у на валидные указатели на соседние элементы списка (m_pPrev и m_pNext). По алгоритму: 0 (LocalPlayerIndex) % MAX_ENTITIES_IN_LIST = 0, т.е. берем именно этот элемент. Но как видим на скрине, указатель по смещению 0x0 у нас NULL. Там должен быть указатель на сущность, а его нет. Собственно вот в чем загвоздка.
Не могу понять почему так. Как мне получить локального игрока по индексу?
Спасибо.
Не могу получить указатель на сущность локального игрока из списка. Делаю следующим образом (тестирую в игре с ботами, OS Windows x64):
1) Посредством вызова EngineClient::GetLocalPlayer() получаю индекс сущности. Всегда возвращает индекс 0.
2) Пробую получить по этому индексу указатель на сущность используя алгоритм из
Пожалуйста, авторизуйтесь для просмотра ссылки.
. Код функции:
C++:
CBaseEntity* GetBaseEntity(int index)
{
if (index <= -1 || index >= MAX_TOTAL_ENTITIES)
return nullptr;
int listToUse = (index / MAX_ENTITIES_IN_LIST);
if (!m_pEntityList[listToUse]) {
printf("Tried to Use an EntityList does that not exist yet! List #%d", listToUse);
return nullptr;
}
if (m_pEntityList[listToUse]->m_pIdentities[index % MAX_ENTITIES_IN_LIST].entity) {
return m_pEntityList[listToUse]->m_pIdentities[index % MAX_ENTITIES_IN_LIST].entity;
}
else {
return nullptr;
}
}
Если посмотрим в отладчик на GameEntitySystem видим следующее:
Указатели на сущности начинаются со смещения 0x18. По алгоритму: 0 (LocalPlayerIndex) / MAX_ENTITIES_IN_LIST = 0, т.е. берем первый указатель в массиве. Смотрим, что там находится:
Очевидно что это CEntityIdentity, т.к. по смещению 0x14 у нас -1 и по смещения 0x50 и 0x58 у на валидные указатели на соседние элементы списка (m_pPrev и m_pNext). По алгоритму: 0 (LocalPlayerIndex) % MAX_ENTITIES_IN_LIST = 0, т.е. берем именно этот элемент. Но как видим на скрине, указатель по смещению 0x0 у нас NULL. Там должен быть указатель на сущность, а его нет. Собственно вот в чем загвоздка.
Не могу понять почему так. Как мне получить локального игрока по индексу?
Спасибо.
Последнее редактирование: