Автор Тема: Как перебрать все обьекты в игре?  (Прочитано 7363 раз)

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Как перебрать все обьекты в игре?
« Ответ #15 : Сентябрь 12, 2016, 08:31:41 pm »
Если я увеличу размер выделенной памяти в ручную в CPool<CVehicle> *&ms_VehiclesPool; в игре появится возможность рождать больше транспорта или нет?
Рождать через опкод например.

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


-----------------------------------------------------------------

Где можно узнать номер и секвенцию анимации и главное изменить?

В аттаче добавил способ проигрывания через CLEO всех игровых анимаций с моим списком её номеров. Он неполный, также есть лист под авторством другого чувака: он более подробный, в нем что-то указано так же, а что-то - по-другому(например - IDLE_ROCKET и т.п.).

Оффлайн Jak łaska za praca

  • Прохожий
  • *
  • Сообщений: 58
  • Репутация: +1/-0
  • Как украшение на торт
    • aktel999
    • Просмотр профиля
Re: Как перебрать все обьекты в игре?
« Ответ #16 : Сентябрь 13, 2016, 01:05:24 am »
Там отсутствует vcversion.dll
Украшаю торты на своих вечеринках, классных вечеринках.

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Как перебрать все обьекты в игре?
« Ответ #17 : Сентябрь 13, 2016, 02:08:25 pm »
Там отсутствует vcversion.dll

В других модах этого автора есть эта dll, например - GTA:Martial Arts

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Как перебрать все обьекты в игре?
« Ответ #18 : Март 15, 2019, 07:02:28 am »
Дошло дело до перебора объектов в игре (поиск ближайшей заправочной колонки). Использованы строки кода:
Код: C++
  1. static CPool<CObject> *& pObjectPool;
Код: C++
  1. CPool<CObject> *& CPools::pObjectPool = *(CPool<CObject> **)0x094DBE0;
Код: C++
  1. CObject * pObject;
  2. for (int i = 0; i < CPools::pObjectPool->size; i++) {
  3.      pObject = &CPools::pObjectPool->objects[i];
  4.      if (!CPools::pObjectPool->flags[i].bIsFreeSlot) {
  5.           if (pObject->id == OBJECT_PETROLPUMP) {
  6.                 // Нашли объект, но не тут-то было
  7.           }
  8.      }
  9. }

Первый объект находится правильно, а дальше происходит сдвиг на 12 байт с каждым новым объектом. Возникает вопрос, либо шаблон пула не подходит для CObject, либо в основе не класс CObject с размером 0x194. То есть если создать расширенный класс CObject с размером 0x1A0, то все становится правильно. Хочется понять, почему так, если кому-то еще это интересно.

Оффлайн kenking

  • Новичок
  • **
  • Сообщений: 237
  • Репутация: +16/-0
    • Просмотр профиля
Re: Как перебрать все обьекты в игре?
« Ответ #19 : Март 15, 2019, 08:35:26 am »
Этот пул CPool<CObject, CCutsceneObject> *&ms_pObjectPool; не только для CObject, но и для CCutsceneObject.

Цитировать
То есть если создать расширенный класс CObject с размером 0x1A0, то все становится правильно.
Это класс CCutsceneObject, размер как раз 0x1A0
https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_vc/game_vc/CCutsceneObject.h


UPD:
Да у меня тоже не получилось перебрать объекты. Странно...
DK же делал пример для объектов SA и там это работает.


UPD2:
Действительно, всё работает, я оказывается не тот ID объекта в свой проверочный код написал.  :)
« Последнее редактирование: Март 15, 2019, 01:07:10 pm от kenking »

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Как перебрать все обьекты в игре?
« Ответ #20 : Март 15, 2019, 11:26:06 am »
Спасибо, все встало на свои места. Для приведенного примера тогда надо указать так:

Код: C++
  1. static CPool<CObject, CCutsceneObject> *& pObjectPool;
Код: C++
  1. CPool<CObject, CCutsceneObject> *& CPools::pObjectPool = *(CPool<CObject, CCutsceneObject> **)0x094DBE0;
« Последнее редактирование: Март 15, 2019, 11:32:18 am от xanser »

Оффлайн Saint

  • Прохожий
  • *
  • Сообщений: 83
  • Репутация: +1/-0
  • Saint Games
    • saint36rus
    • Просмотр профиля
Re: Как перебрать все обьекты в игре?
« Ответ #21 : Март 16, 2019, 01:45:46 pm »
Спасибо, все встало на свои места. Для приведенного примера тогда надо указать так:

Код: C++
  1. static CPool<CObject, CCutsceneObject> *& pObjectPool;
Код: C++
  1. CPool<CObject, CCutsceneObject> *& CPools::pObjectPool = *(CPool<CObject, CCutsceneObject> **)0x094DBE0;

это позволит удалять любые объекты (постоянные) карты? такие как дома, пальмы и т.д.

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Как перебрать все обьекты в игре?
« Ответ #22 : Март 16, 2019, 05:25:33 pm »
Пул рассчитан на 460 объектов, вряд ли это карта. Это пикапы и всякие объекты из object.dat
Для "удаления" можно использовать функцию CEntity::PreRender и там каждому нужному объекту установить масштаб в ноль или нулевую прозрачность.
« Последнее редактирование: Март 16, 2019, 05:28:52 pm от xanser »