Четверг, 28.03.2024, 19:15
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум » Игры серии ГТА » Работа с памятью, exe » Работа с компонентами моделей
Работа с компонентами моделей
DK22PacДата: Вторник, 18.10.2011, 02:04 | Сообщение # 16
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Я нашёл какую-то таблицу смещений на SB, но там приведены имена дамми.
Например, windscreen_dummy.
А о windscreen_ok и windscreen_dam там не написано.
 
Den_spbДата: Вторник, 18.10.2011, 02:05 | Сообщение # 17
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Code
0A97: 0@ = car 0@ struct
0@ += 0x690  //   windscreen_dummy       
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
if
     0@ > 0 // component defined
then
     0@ += 0x98 // child
     0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 // windscreen_ok
     if
         0@ > 0 // component defined
     then
         0@ += 0x9C // next
         0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 // windscreen_dam
         if
             0@ > 0 // component defined
         then

         ...
              
         end     
     end     
end
Соответствующий кусок иерархии изображён в приложении.
Прикрепления: 3418050.gif (9.7 Kb)
 
kenkingДата: Вторник, 18.10.2011, 07:49 | Сообщение # 18
Группа: Проверенные
Сообщений: 22
Статус: Offline
Денис, таким образом нельзя получить доступ к компонентам находящимся внутри дамми. Я об этом писал в теме на SB.
 
izerliДата: Вторник, 18.10.2011, 22:32 | Сообщение # 19
Группа: Проверенные
Сообщений: 90
Статус: Offline
Quote (kenking)
Денис, таким образом нельзя получить доступ к компонентам находящимся внутри дамми

разве? а у меня получал

по крайней мере к первому ребенку дамми точно


Сообщение отредактировал izerli - Вторник, 18.10.2011, 22:33
 
Den_spbДата: Вторник, 18.10.2011, 23:07 | Сообщение # 20
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (izerli)
по крайней мере к первому ребенку дамми точно

К windscreen_ok и windscreen_dam действительно не удаётся получить доступ (по смещению windscreen_dummy+0x98 записан 0). Но причина не в том, что эти компоненты являются детьми dummy (пример dummy, дети которого доступны - chassis_dummy). Возможно, windscreen_ok и windscreen_dam вообще не являются объектами типа RwFrame.
 
DK22PacДата: Среда, 19.10.2011, 01:12 | Сообщение # 21
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Верно. Материальные компоненты - это RpAtomic, а дамми - RwFrame.
Мне удалось получить доступ к этому материальному компоненту (атомику) из дамми (тестировал по смещению 0х668) и обнулить для него флаги (RpAtomic -> RwObject -> flags). Результат: не видно двери у всех авто в игре.

Добавлено (19.10.2011, 01:12)
---------------------------------------------
И ещё. В структуре RpAtomic есть указатель на RpClump. А связи
RpAtomic - RwFrame нет (хотя обратная связь существует).

 
kenkingДата: Среда, 19.10.2011, 07:51 | Сообщение # 22
Группа: Проверенные
Сообщений: 22
Статус: Offline
Дело не в том к какому типу относятся компоненты. Для произвольно добавленных компонентов, как материальных, так и дамми всё работает. А вот для стандартных компонентов (двери, капот, багажник, бампера, стекло) это не срабатывает. Даже, если поместить в дамми, например, какой-либо двери стандартный другой компонент (не важно материальный или дамми), то по адресу этого компонента будет ноль. Т.е. он не определяется.
Нашёл еще одно смещение: 0xA0 от любого компонента (стандартного или произвольного) выход по этому смещению на старейшину (не путать с родителем) иерархии. Вот здесь, к примеру, это будет bus.
 
DK22PacДата: Среда, 19.10.2011, 16:00 | Сообщение # 23
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
RwFrame + 0xA0 -> root *RwFrame
 
Den_spbДата: Среда, 19.10.2011, 16:18 | Сообщение # 24
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (kenking)
Дело не в том к какому типу относятся компоненты.
+1. RwFrame - это не обязательно дамми.

Quote (DK22Pac)
Результат: не видно двери у всех авто в игре.
Есть простой, хотя и не совсем правильный способ сделать дверь невидимой на одном автомобиле - просто передвинуть её на большое расстояние от машины.

Quote (DK22Pac)
А связи RpAtomic - RwFrame нет
В структуре RpAtomic проверил все смещения?

Quote (kenking)
Нашёл еще одно смещение: 0xA0 от любого компонента (стандартного или произвольного) выход по этому смещению на старейшину
Молодец, хоть и изобрёл велосипед. В базе это смещение есть, обозначено как "root" (корень) - см. приложение.
Прикрепления: 0184115.gif (17.8 Kb)
 
kenkingДата: Четверг, 20.10.2011, 08:08 | Сообщение # 25
Группа: Проверенные
Сообщений: 22
Статус: Offline
Точно, есть такое смещение. У меня с базой пока туговато отношения складываются angry , отсюда и изобретение велосипеда - чисто практическим путём.

@DK22Pac
можно посмотреть, как работают опкоды 0689: 0697: и им обратные для того, чтобы сделать невидимым тот или иной компонент только на одном конкретном транспорте.
 
Den_spbДата: Четверг, 20.10.2011, 18:53 | Сообщение # 26
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (kenking)
У меня с базой пока туговато отношения складываются
Если будешь периодически заглядывать в базу, то постепенно научишься с ней работать. Это похоже на изучение main.scm в Sanny Builder.

Quote (kenking)
изобретение велосипеда
У меня иногда тоже такое случается. Бывает, что проще провести эксперимент, чем копаться в коде.
 
DK22PacДата: Суббота, 29.10.2011, 00:27 | Сообщение # 27
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
@kenking
За статус компонентов отвечает DamageManager, надо разбирать, как он работает...

В общем, если я добавлю материальный компоент в иерархию авто, то к нему можно будет обратиться как к RwFrame?


Сообщение отредактировал DK22Pac - Суббота, 29.10.2011, 00:36
 
Den_spbДата: Суббота, 29.10.2011, 00:50 | Сообщение # 28
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (DK22Pac)
В общем, если я добавлю материальный компоент в иерархию авто, то к нему можно будет обратиться как к RwFrame?
Да.

Quote (DK22Pac)
За статус компонентов отвечает DamageManager, надо разбирать, как он работает...
Посмотрел опкоды 0697 и 0689, вроде ничего сложного. Ключевая процедура там 6D2700.
 
DK22PacДата: Суббота, 29.10.2011, 00:56 | Сообщение # 29
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Den_spb, угу, тоже её нашёл. Сначала как бы устанавливаются занчения для DamageManager, а потом происходит непосредственно "убирание".
sub_6D2700 -> _RwFrameForAllObjects -> sub_6D2690
Дальше происходит изменение флагов.

Не могу только понять, что за параметр data...


Сообщение отредактировал DK22Pac - Суббота, 29.10.2011, 00:57
 
Den_spbДата: Суббота, 29.10.2011, 01:13 | Сообщение # 30
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Значение флагов, видимо.
 
Форум » Игры серии ГТА » Работа с памятью, exe » Работа с компонентами моделей
Поиск: