Работа с компонентами моделей
|
|
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 Соответствующий кусок иерархии изображён в приложении.
|
|
| |
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" (корень) - см. приложение.
|
|
| |
kenking | Дата: Четверг, 20.10.2011, 08:08 | Сообщение # 25 |
Группа: Проверенные
Сообщений: 22
Статус: Offline
| Точно, есть такое смещение. У меня с базой пока туговато отношения складываются , отсюда и изобретение велосипеда - чисто практическим путём.
@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
| Значение флагов, видимо.
|
|
| |