Четверг, 25.04.2024, 21:49
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум » Игры серии ГТА » Работа с памятью, exe » Работа с компонентами моделей
Работа с компонентами моделей
DK22PacДата: Воскресенье, 26.02.2012, 17:47 | Сообщение # 121
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Всё-таки открыл окна biggrin
 
izerliДата: Воскресенье, 26.02.2012, 19:09 | Сообщение # 122
Группа: Проверенные
Сообщений: 90
Статус: Offline
DK22Pac, интересно)
 
Den_spbДата: Воскресенье, 26.02.2012, 19:26 | Сообщение # 123
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (DK22Pac)
Всё-таки открыл окна

Действует на всех машинах одной модели или на одной машине?
 
DK22PacДата: Воскресенье, 26.02.2012, 23:36 | Сообщение # 124
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Отдельно для каждой tongue

Добавлено (26.02.2012, 23:36)
---------------------------------------------
Изменение яркости компонента

 
Den_spbДата: Воскресенье, 26.02.2012, 23:53 | Сообщение # 125
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Изменение прелайта что ли?
 
DK22PacДата: Понедельник, 27.02.2012, 00:08 | Сообщение # 126
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Диффузия материала.

Добавлено (27.02.2012, 00:08)
---------------------------------------------
Не, ошибаюсь. Это параметр ambient.

 
izerliДата: Понедельник, 27.02.2012, 14:28 | Сообщение # 127
Группа: Проверенные
Сообщений: 90
Статус: Offline
DK22Pac, шикарно)
 
kenkingДата: Среда, 29.02.2012, 13:25 | Сообщение # 128
Группа: Проверенные
Сообщений: 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@ += 64
          0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0 // сохраняем значения эл-тов +48, +52, +56 в памяти т.к. метод масштабирования матрицы их обнуляет
          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 0x59AED0 struct 1@ num_params 1 pop 0 0.5 // метод масштабирования матрицы
          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
....


Вращение компонента по одной из осей
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 0x59AFA0 struct 1@ num_params 1 pop 0  -1.0 // _sub_59AFA0 надо бы переименовать в CMatrix__rotateAroundX
          //0AA6: call_method 0x59AFE0 struct 1@ num_params 1 pop 0  -1.0 // _sub_59AFE0 надо бы переименовать в CMatrix__rotateAroundY
          //0AA6: call_method 0x59B020 struct 1@ num_params 1 pop 0  -1.0 // CMatrix__rotateAroundZ
    end
....


Перемещение компонента
Code
.....
0A97: 1@ = car 0@ struct   
1@ += 0x670 // левая передняя дверь                             
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   
          2@ -= 1.0 // изменяем координату X
          1@ += 4
          0A8D: 3@ = read_memory 1@ size 4 virtual_protect 0
          3@ -= 1.0 // изменяем координату Y
          1@ += 4
          0A8D: 4@ = read_memory 1@ size 4 virtual_protect 0
          4@ += 1.0 // изменяем координату Z
          1@ -= 56
          0AA6: call_method 0x59AF80 struct 1@ num_params 3 pop 0 4@ 3@ 2@ // CMatrix__setPos (Z Y X)
    end
....


Удаление компонента
Code
.....
0A97: 1@ = car 0@ struct   
1@ += 0x670 // левая передняя дверь                             
0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0   
if  1@ > 0   
    then
          0AA5: call_function 0x7F05A0 num_params 1 pop 1 1@ //  _rwFrameDestroy
    end
....


Удаление всех вложенных компонентов (child)
Code
.....
0A97: 1@ = car 0@ struct   
1@ += 0x64C // chassis                            
0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0   
if  1@ > 0   
    then
         0AA5: call_function 0x7F0CD0 num_params 1 pop 1 1@ // _RwFrameRemoveChild
    end
....


Получение корня иерархии (root)
Code
.....
0A97: 1@ = car 0@ struct   
1@ += 0x670 // левая передняя дверь                             
0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0   
if  1@ > 0   
    then
          0AA7: call_function 0x7F09B0 num_params 1 pop 1 1@ 2@ // _RwFrameGetRoot
    end
....


Сообщение отредактировал kenking - Пятница, 13.04.2012, 13:42
 
Den_spbДата: Среда, 29.02.2012, 20:28 | Сообщение # 129
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Информация полезная, молодец.
 
DK22PacДата: Понедельник, 05.03.2012, 03:50 | Сообщение # 130
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Жаль, что в СА не предусмотрена езда авто с 4-ма, разными по размеру, колёсами biggrin
Можно было бы сделать лопающиеся покрышки...
 
Den_spbДата: Понедельник, 05.03.2012, 16:50 | Сообщение # 131
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Так в игре и так лопаются покрышки.
А вообще можно поискать процедуру рендера колёс и сделать asm-inject, если есть желание.
 
izerliДата: Понедельник, 05.03.2012, 19:07 | Сообщение # 132
Группа: Проверенные
Сообщений: 90
Статус: Offline
DK22Pac, приведи, пожалуйста, пример, как изменять яркость компонента?
 
DK22PacДата: Вторник, 06.03.2012, 00:01 | Сообщение # 133
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Примера в scm у меня нету, я писал инжектор в процедуру, которая перебирает материалы модели.
Вот часть кода ImVehLights, скрины здесь

Добавлено (05.03.2012, 22:05)
---------------------------------------------
Это будет выглядеть примерно так:
clump>atomic>geometry>material
Но тут есть одна деталь. Перед изменением параметров материала, надо сделать "бэкап" этих параметров в отведенный для этого буфер. После рендера клампа, специальная процедура "восстанавливает" параметры из этого буфера.
Code
struct MaterialRestoreData{
      long pMaterialField
      long oldData
} a


Code
8B 19                // mov     ebx, [ecx]
89 03                // mov     [ebx], eax
83 C3 04             // add     ebx, 4
8B 30                // mov     esi, [eax]
89 33                // mov     [ebx], esi
83 01 08             // add     dword ptr [ecx], 8

>>
Code
a[currentIndex].pMaterialField = &material[matIndex].texture
a[currentIndex].oldDaata = material[matIndex].texture
currentIndex++

Как-то так, программер из меня фиговый biggrin

Добавлено (06.03.2012, 00:01)
---------------------------------------------

Code
0x6A32B0     CAutomobile__deflateTire

Дальше всё теряется, она вызывается через virtual table.
Прикрепления: imvehlm_dk22.txt (16.1 Kb)


Сообщение отредактировал DK22Pac - Понедельник, 05.03.2012, 22:12
 
izerliДата: Вторник, 06.03.2012, 12:21 | Сообщение # 134
Группа: Проверенные
Сообщений: 90
Статус: Offline
DK22Pac, спасибо, буду пытаться понять)
 
DK22PacДата: Вторник, 06.03.2012, 15:10 | Сообщение # 135
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Написал код для изменения параметров материала, маты изменяются на всех моделях (фейл...)
Пытался через clumpForAllAtomics, и через frameForAllAtomics, одно и то же...
Прикол в том, что игра использует эти же процедуры...
 
Форум » Игры серии ГТА » Работа с памятью, exe » Работа с компонентами моделей
Поиск: