Работа с компонентами моделей
|
|
Den_spb | Дата: Вторник, 18.10.2011, 02:02 | Сообщение # 1 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Сообщения перенесены в отдельную тему.
|
|
| |
izerli | Дата: Вторник, 18.10.2011, 02:02 | Сообщение # 2 |
Группа: Проверенные
Сообщений: 90
Статус: Offline
| Денис, снова есть вопросик.. Подскажи, как можно получить необходимое смещение для работы с новым добавленным компонентом в авто?
|
|
| |
Den_spb | Дата: Вторник, 18.10.2011, 02:02 | Сообщение # 3 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Сначала надо получить адрес одного из стандартных компонентов, который хранится в структуре транспорта по известному смещению (для каждого компонента - своё смещение). Затем, пользуясь смещениями в структуре компонентов +0x4 (указатель на родителя компонента), +0x98 (указатель на первого ребёнка данного компонента) и +0x9C (указатель на следующий компонент с таким же рангом), постепенно добираемся до нового добавленного компонента. Данная тема подробно рассмотрена здесь: http://sannybuilder.com/forums/viewtopic.php?id=304 В частности, пост с таблицей смещений стандартных компонентов: http://sannybuilder.com/forums/viewtopic.php?pid=14815#p14815 (таблица 1)
|
|
| |
izerli | Дата: Вторник, 18.10.2011, 02:02 | Сообщение # 4 |
Группа: Проверенные
Сообщений: 90
Статус: Offline
| Den_spb, большое спасибо, буду экспериментировать
|
|
| |
DK22Pac | Дата: Вторник, 18.10.2011, 02:03 | Сообщение # 5 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| По-моему, дамми ещё можно найти по его имени (так делается в коде вращения ствола минигана).
|
|
| |
Den_spb | Дата: Вторник, 18.10.2011, 02:03 | Сообщение # 6 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Имя компонента записано в его структуре по смещению +172 (size 8) - в теме на SB эта информация тоже есть.
|
|
| |
izerli | Дата: Вторник, 18.10.2011, 02:03 | Сообщение # 7 |
Группа: Проверенные
Сообщений: 90
Статус: Offline
| DK22Pac, Den_spb, спасибо за помощь!
|
|
| |
DK22Pac | Дата: Вторник, 18.10.2011, 02:03 | Сообщение # 8 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| 0x4C5400 _findObjectByNodeName (RpClump, name*) Результат будет записан в eax. Теперь я понял, как стекло авто делается прозрачным Code push 0 push esi call _atomicSetAlphaForAllMaterials
Сообщение отредактировал DK22Pac - Воскресенье, 16.10.2011, 01:12 |
|
| |
Den_spb | Дата: Вторник, 18.10.2011, 02:03 | Сообщение # 9 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Ну и как это применить на практике?
|
|
| |
DK22Pac | Дата: Вторник, 18.10.2011, 02:03 | Сообщение # 10 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Похоже, что никак... Точнее, я пока что не знаю как. В конечном итоге, я получаю адресс структуры RwFrame, и могу делать с ней всё, что захочу (например, сделать фрейм прозрачным). Но такие изменения действуют на все модели, которые используют этот фрейм (т.е., когда я "убрал" дверь у лимузина, то все лимузины ездили без дверей)...
|
|
| |
Den_spb | Дата: Вторник, 18.10.2011, 02:04 | Сообщение # 11 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Так надо получить адрес RwFrame на нужном автомобиле через его иерархию (тема "Работа с компонентами машины"). Тогда изменения в этой структуре не будут распространяться на аналогичные компоненты, установленные на других автомобилях.
|
|
| |
DK22Pac | Дата: Вторник, 18.10.2011, 02:04 | Сообщение # 12 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Адресс фрейма я нахожу так: CAutomobile+0x18 -> RpClump -> RpAtomic -> RwFrame
|
|
| |
Den_spb | Дата: Вторник, 18.10.2011, 02:04 | Сообщение # 13 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Попробуй способ, который предлагаю я.
|
|
| |
DK22Pac | Дата: Вторник, 18.10.2011, 02:04 | Сообщение # 14 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Т.е., искать фрейм в структуре авто? Сколько места выделено для этих фреймов?
|
|
| |
Den_spb | Дата: Вторник, 18.10.2011, 02:04 | Сообщение # 15 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (DK22Pac) Т.е., искать фрейм в структуре авто? Да. Посмотреть иерархию можно не только с помощью 3ds max, но и даже через ggmm (gta garage mod manager).
Quote (DK22Pac) Сколько места выделено для этих фреймов? Размер выделяемой памяти зависит от количества компонентов иерархии. В иерархию можно добавлять свои компоненты, и к каждому из них в процессе игры можно получить доступ. Возможно, есть какой-то лимит, но я его пока не наблюдал.
|
|
| |