Работа с компонентами моделей
|
|
kenking | Дата: Вторник, 01.11.2011, 12:42 | Сообщение # 46 |
Группа: Проверенные
Сообщений: 22
Статус: Offline
| Quote (DK22Pac) Доступ можно получить, используя RwFrameGetFirstObject. Только это будет уже не RwFrame, а RpAtomic. Если, не затруднит, то простой пример доступа, например, к тому же компоненту windscreen_ok (или любому другому _ok или _dam), можно привести в виде клео-кода?
|
|
| |
DK22Pac | Дата: Вторник, 01.11.2011, 13:01 | Сообщение # 47 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Примерно так: Получаешь адресс RwFrame, и вызываешь 0x7348C0 (через 0AA7). Получишь адресс RpAtomic. 0AA7: 0x7348C0 1 1 *RwFrame 0@ if 0@ <> 0 ... Но, как я уже писал, изменение этого атомика повлияет на все авто, где наявен этот компонент.
|
|
| |
kenking | Дата: Вторник, 01.11.2011, 14:16 | Сообщение # 48 |
Группа: Проверенные
Сообщений: 22
Статус: Offline
| Спасибо. Как я понял, перемещать/вращать такой компонент не получится или я ошибаюсь?
|
|
| |
Den_spb | Дата: Вторник, 01.11.2011, 17:08 | Сообщение # 49 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Скорее всего перемещение и вращение не предусмотрено, т.к. в структуре RpAtomic нет матриц позиции.
|
|
| |
kenking | Дата: Среда, 02.11.2011, 16:02 | Сообщение # 50 |
Группа: Проверенные
Сообщений: 22
Статус: Offline
| Какой способ нашёл Дима для того, чтобы сделать невидимым компонент авто скрыто за семью замками личных сообщений Я нашёл такой способ сделать какой-либо компонент (RwFrame) транспорта невидимым/видимым. Правда при условии, что к моменту сокрытия этот компонент не был удалён с транспорта. Способ работает и для произвольно добавленных компонентов. В этом случае даже лучше, так как произвольный компонент нельзя удалить стандартными опкодами. Доступно только для пользователей
Сообщение отредактировал kenking - Среда, 02.11.2011, 16:04 |
|
| |
DK22Pac | Дата: Среда, 02.11.2011, 17:30 | Сообщение # 51 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Стандартные и добавленные компоненты ничем не отличаются. А насчёт "скрытности" - я сейчас разрабатываю некий проект, и поиск компонентов и управление ними - его главная "фишка").
|
|
| |
Den_spb | Дата: Среда, 02.11.2011, 17:57 | Сообщение # 52 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (kenking) 30@ += 0x2 0A8C: write_memory 30@ size 4 value 2@[0@] virtual_protect 0 Было сказано, что по смещению +4 [size 4] записан адрес родителя компонента. Получается, что ты меняешь половину числа, записанного по смещению +4, что не совсем правильно. Думаю надо либо поменять размер записи/чтения, либо смещение, по которому производится запись/чтение.
Quote (DK22Pac) А насчёт "скрытности" - я сейчас разрабатываю некий проект, и поиск компонентов и управление ними - его главная "фишка"). Код, делающий компонент с известным адресом структуры невидимым, скрывать особого смысла нет, т.к. эта задача решается и другими способами, пусть и менее правильными. Да и адреса соответствующих процедур в базе всем известны.
|
|
| |
kenking | Дата: Среда, 02.11.2011, 19:39 | Сообщение # 53 |
Группа: Проверенные
Сообщений: 22
Статус: Offline
| Quote (DK22Pac) Стандартные и добавленные компоненты ничем не отличаются. Если, не считать того, что стандартными опкодами добавленные компоненты нельзя удалить, повредить и т.д.
Quote (Den_spb) Думаю надо либо поменять размер записи/чтения, либо смещение, по которому производится запись/чтение. Я меняю значение флага RwFrame ->RwObject-> flags. По базе там размер записи/чтения байт, но работает только с 4-мя байтами. По другому не работает. А так всё отлично работает, чему наглядный пример. Возможно в базе ошибка?
|
|
| |
Den_spb | Дата: Среда, 02.11.2011, 20:00 | Сообщение # 54 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (kenking) Если, не считать того, что стандартными опкодами добавленные компоненты нельзя удалить, повредить и т.д. Опкоды и со стандартными компонентами работают не со всеми, а только с теми, адреса которых записаны в структуре машины по смещениям X*4+0x648. Таково устройство опкодов.
Quote (kenking) Я меняю значение флага RwFrame ->RwObject-> flags Прошу прощения - невнимательно посмотрел код. Предполагал, что запись ведётся в RwFrame + 2.
|
|
| |
kenking | Дата: Среда, 02.11.2011, 20:11 | Сообщение # 55 |
Группа: Проверенные
Сообщений: 22
Статус: Offline
| А перезапись всё же есть. Сейчас проверил так: в середине кода после удаления всех компонентов попробовал прочитать родителя одного из компонентов и далее его название. В результате получилась какая-та хрень. После же восстановления всех компонентов всё становится на свои места. Эксперимент зашёл в тупик?
|
|
| |
Den_spb | Дата: Среда, 02.11.2011, 20:19 | Сообщение # 56 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Не понял, в чём конкретно вопрос?
|
|
| |
kenking | Дата: Среда, 02.11.2011, 20:26 | Сообщение # 57 |
Группа: Проверенные
Сообщений: 22
Статус: Offline
| Quote (Den_spb) Предполагал, что запись ведётся в RwFrame + 2 Получается фактически так оно и есть.
Quote (Den_spb) Не понял, в чём конкретно вопрос? Да вопрос простой, точнее сложный - как правильно решить задачу с удалением/восстановлением компонентов.
|
|
| |
Den_spb | Дата: Среда, 02.11.2011, 20:40 | Сообщение # 58 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (kenking) Получается фактически так оно и есть. Действительно Тогда мой вопрос по-прежнему в силе. Ты перезаписываешь 4 байта: RwFrame+2 (назначение неизвестно), RwFrame+3 (назначение неизвестно), RwFrame+4 и RwFrame+5 - половина числа, являющегося адресом родителя. Из-за чего пропадают компоненты? Из-за изменения родителя или из-за записи нуля в байты RwFrame+2 и RwFrame+3 ?
Quote (kenking) а вопрос простой, точнее сложный - как правильно решить задачу с удалением/восстановлением компонентов. Быстрее и правильнее взять какой-нибудь стандартный опкод (например, 0697) и посмотреть, какие процедуры в нём вызываются после вычисления адреса компонента по его номеру. Далее нужно применить эти процедуры к своему компоненту.
|
|
| |
kenking | Дата: Среда, 02.11.2011, 21:03 | Сообщение # 59 |
Группа: Проверенные
Сообщений: 22
Статус: Offline
| Quote (Den_spb) Из-за чего пропадают компоненты? Из-за изменения родителя или из-за записи нуля в байты RwFrame+2 и RwFrame+3 ? Скорее всего из-за записи нуля в RwFrame+2 и RwFrame+3. В основном в иерархии транспорта родителем для всех компонентов является chassis_dummy и в этом случае пропадали бы сразу все компоненты. Чего не наблюдается. Хотя с другой стороны - я пробовал записывать один байт и два байта. Компоненты не пропадают в этом случае. В общем не понятно. Quote (Den_spb) Быстрее и правильнее взять какой-нибудь стандартный опкод (например, 0697) и посмотреть, какие процедуры в нём вызываются после вычисления адреса компонента по его номеру. Далее нужно применить эти процедуры к своему компоненту. Это для меня сложная задача на данный момент.
|
|
| |
Den_spb | Дата: Среда, 02.11.2011, 22:47 | Сообщение # 60 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (kenking) В основном в иерархии транспорта родителем для всех компонентов является chassis_dummy и в этом случае пропадали бы сразу все компоненты. Они не должны пропадать, т.к. в смещении указан родитель одного компонента, а не всех компонентов.
Quote (kenking) Хотя с другой стороны - я пробовал записывать один байт и два байта. Компоненты не пропадают в этом случае. Можно попробовать запиcать 0 в RwFrame + 4.
|
|
| |