Работа с компонентами моделей
|
|
Den_spb | Дата: Вторник, 06.03.2012, 16:02 | Сообщение # 136 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Не оговорился? На всех моделях или на всех машинах одной модели?
|
|
| |
DK22Pac | Дата: Вторник, 06.03.2012, 16:09 | Сообщение # 137 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Да, на всех авто с этой моделью. Кламп беру из структуры авто.
|
|
| |
Den_spb | Дата: Вторник, 06.03.2012, 16:10 | Сообщение # 138 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Отдельно для каждой машины настройки материалов видимо не хранятся. В этом нет смысла - только впустую тратятся ресурсы.
|
|
| |
DK22Pac | Дата: Вторник, 06.03.2012, 16:26 | Сообщение # 139 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Даже атомики общие. Видимо, параметры атомика изменяются перед самим рендером атомиков, а потом восстанавливаются.
|
|
| |
kenking | Дата: Пятница, 16.03.2012, 11:25 | Сообщение # 140 |
Группа: Проверенные
Сообщений: 22
Статус: Offline
| вращение компонента относительно центра модели Code ..... 0A97: 1@ = car 0@ struct 1@ += 0x670 // левая передняя дверь 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 if 1@ > 0 then 1@ += 16 0AA6: call_method 0x59B1E0 struct 1@ num_params 1 pop 0 0.05 // sub_59B1E0 вращение компонента относительно центра модели по оси X //0AA6: call_method 0x59B2C0 struct 1@ num_params 1 pop 0 0.05 // sub_59B2C0 вращение компонента относительно центра модели по оси Y //0AA6: call_method 0x59B390 struct 1@ num_params 1 pop 0 0.05 // sub_59B390 вращение компонента относительно центра модели по оси Z //0AA6: call_method 0x59B460 struct 1@ num_params 3 pop 0 0.05 0.05 0.05 // sub_59B460 вращение компонента относительно центра модели по трём осям end .....
масштабирование компонента с коэффициентами для каждой из осей Code {$CLEO} model.Load(400) 038B: load_requested_models Car.Create(29@ 400 -2029.1, 173.0, 28.7) 0175: set_car 29@ Z_angle_to 270.0 Car.Create(30@ 400 -2029.1, 175.0, 28.7) 0175: set_car 30@ Z_angle_to 270.0 Car.Create(31@ 400 -2029.1, 180.0, 28.7) 0175: set_car 31@ Z_angle_to 270.0 model.Destroy(400) //---масштабирование по оси X (увеличение) компонентов первого авто 28@ = 0x64C 27@ = 2.0 // коэффициент масштабирования for 0@ = 1 to 24 0A97: 1@ = car 31@ struct 005A: 1@ += 28@ 28@ += 0x4 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 if 1@ > 0 then 1@ += 64 0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0 // сохраняем значения эл-тов +48, +52, +56 в памяти т.к. метод масштабирования матрицы их обнуляет 006B: 2@ *= 27@ // (float) 1@ += 4 0A8D: 3@ = read_memory 1@ size 4 virtual_protect 0 1@ += 4 0A8D: 4@ = read_memory 1@ size 4 virtual_protect 0 1@ -= 56 0AA6: call_method 0x59AF00 struct 1@ num_params 3 pop 0 1.0 1.0 27@ // sub_59AF00 масштабирование(Z Y X) 1@ += 48 0A8C: write_memory 1@ size 4 value 2@ virtual_protect 0 // восстанавливаем значение X-position 1@ += 4 0A8C: write_memory 1@ size 4 value 3@ virtual_protect 0 // восстанавливаем значение Y-position 1@ += 4 0A8C: write_memory 1@ size 4 value 4@ virtual_protect 0 // восстанавливаем значение Z-position end end //---масштабирование по оси X (уменьшение) компонентов третьего авто 28@ = 0x64C 27@ = 0.5 // коэффициент масштабирования for 0@ = 1 to 24 0A97: 1@ = car 29@ struct 005A: 1@ += 28@ 28@ += 0x4 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 if 1@ > 0 then 1@ += 64 0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0 // сохраняем значения эл-тов +48, +52, +56 в памяти т.к. метод масштабирования матрицы их обнуляет 006B: 2@ *= 27@ // (float) 1@ += 4 0A8D: 3@ = read_memory 1@ size 4 virtual_protect 0 1@ += 4 0A8D: 4@ = read_memory 1@ size 4 virtual_protect 0 1@ -= 56 0AA6: call_method 0x59AF00 struct 1@ num_params 3 pop 0 1.0 1.0 27@ // sub_59AF00 масштабирование(Z Y X) 1@ += 48 0A8C: write_memory 1@ size 4 value 2@ virtual_protect 0 // восстанавливаем значение X-position 1@ += 4 0A8C: write_memory 1@ size 4 value 3@ virtual_protect 0 // восстанавливаем значение Y-position 1@ += 4 0A8C: write_memory 1@ size 4 value 4@ virtual_protect 0 // восстанавливаем значение Z-position end end 0A93:
Сообщение отредактировал kenking - Пятница, 16.03.2012, 11:26 |
|
| |
DK22Pac | Дата: Суббота, 24.03.2012, 14:30 | Сообщение # 141 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Компоненты CBike http://gtamodding.ru/wiki/Адреса_Памяти_ (SA)#CBike_.28.D0.9C.D0.BE.D1.82.D0.BE.D1.86.D0.B8.D0.BA.D0.BB.D1.8B_.D0.B8_.D0.B2.D0.B5.D0.BB.D0.BE.D1.81.D0.B8.D0.BF.D0.B5.D 0.B4.D1.8B.29
|
|
| |
Den_spb | Дата: Суббота, 24.03.2012, 18:37 | Сообщение # 142 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Компоненты летательных средств тоже можно добавить.
|
|
| |
ILYALION | Дата: Воскресенье, 03.06.2012, 14:11 | Сообщение # 143 |
Группа: Проверенные
Сообщений: 325
Статус: Offline
| Можно ли удалить дамми на транспорте? Пробовал следующим способом:Code 0A97: 0@ = car 0@ struct 0@ += 96// бензобак 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 if 0@ > 0 then 0AA5: call_function 0x7F05A0 num_params 1 pop 1 0@ // _rwFrameDestroy end Не работает.
|
|
| |
Den_spb | Дата: Воскресенье, 03.06.2012, 16:56 | Сообщение # 144 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Смещение 96 это явно не "бензобак" т.к. оно относится не к CVehicle, a к CPhysical ("физический объект" - общий родитель CVehicle, CPed и CObject), а у педов и объектов бензобака нет. Любая дочерняя структура образуется из родительской (первая часть смещений), к которой добавляются дополнительные смещения.
|
|
| |
ILYALION | Дата: Воскресенье, 03.06.2012, 20:57 | Сообщение # 145 |
Группа: Проверенные
Сообщений: 325
Статус: Offline
| Я это смещение взял отсюда, таблица 2.
|
|
| |
Den_spb | Дата: Понедельник, 04.06.2012, 00:01 | Сообщение # 146 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Это смещения не CVehicle, а другой структуры, адрес которой рассчитывается так:Code 0@ *= 4 // в 0@ должен быть записан ИД-номер модели транспорта 0@ += 0xA9B0C8 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 //CModel 0@ += 0x5C 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 Данная структура является общей для всех транспортных средств данной модели. А смещения для CVehicle приведены в таблице 1 (в том же сообщении).
|
|
| |
ILYALION | Дата: Понедельник, 04.06.2012, 06:30 | Сообщение # 147 |
Группа: Проверенные
Сообщений: 325
Статус: Offline
| Но в таблице 1 нет дамми бензобака.
|
|
| |
Den_spb | Дата: Понедельник, 04.06.2012, 12:29 | Сообщение # 148 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Можно сначала получить доступ к одному из "табличных" компонентов, а потом, используя смещения 0x98 и 0x9C, "добраться" от этого компонента к бензобаку - здесь и в соответствующей теме на SB про это рассказано. Также можно использовать функцию, вычисляющую адрес компонента по его имени.
|
|
| |
ILYALION | Дата: Понедельник, 04.06.2012, 13:38 | Сообщение # 149 |
Группа: Проверенные
Сообщений: 325
Статус: Offline
| Quote (Den_spb) Можно сначала получить доступ к одному из "табличных" компонентов, а потом, используя смещения 0x98 и 0x9C, "добраться" от этого компонента к бензобаку Ну я хочу написать универсальный скрипт, дял всех машин. Quote (Den_spb) Также можно использовать функцию, вычисляющую адрес компонента по его имени. А можно поподробнее про эту функцию?
|
|
| |
Den_spb | Дата: Понедельник, 04.06.2012, 15:40 | Сообщение # 150 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (ILYALION) А можно поподробнее про эту функцию? Я не помню её адрес. Дима (DK22Pac) вроде знает.
|
|
| |