Четверг, 25.04.2024, 02:29
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум » Игры серии ГТА » Работа с памятью, exe » Работа с компонентами моделей
Работа с компонентами моделей
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
Какой способ нашёл Дима для того, чтобы сделать невидимым компонент авто скрыто за семью замками личных сообщений smile
Я нашёл такой способ сделать какой-либо компонент (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)
Получается фактически так оно и есть.
Действительно biggrin
Тогда мой вопрос по-прежнему в силе. Ты перезаписываешь 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 и в этом случае пропадали бы сразу все компоненты. Чего не наблюдается. Хотя с другой стороны - я пробовал записывать один байт и два байта. Компоненты не пропадают в этом случае. В общем не понятно. wacko
Quote (Den_spb)
Быстрее и правильнее взять какой-нибудь стандартный опкод (например, 0697) и посмотреть, какие процедуры в нём вызываются после вычисления адреса компонента по его номеру. Далее нужно применить эти процедуры к своему компоненту.
Это для меня сложная задача на данный момент.
 
Den_spbДата: Среда, 02.11.2011, 22:47 | Сообщение # 60
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (kenking)
В основном в иерархии транспорта родителем для всех компонентов является chassis_dummy и в этом случае пропадали бы сразу все компоненты.
Они не должны пропадать, т.к. в смещении указан родитель одного компонента, а не всех компонентов.

Quote (kenking)
Хотя с другой стороны - я пробовал записывать один байт и два байта. Компоненты не пропадают в этом случае.
Можно попробовать запиcать 0 в RwFrame + 4.
 
Форум » Игры серии ГТА » Работа с памятью, exe » Работа с компонентами моделей
Поиск: