Крепление эффектов освещения к автомобилю - Страница 3 - Форум
Вторник, 06.12.2016, 11:10
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 3 из 6«123456»
Форум » Игры серии ГТА » Работа с памятью, exe » Крепление эффектов освещения к автомобилю
Крепление эффектов освещения к автомобилю
DK22PacДата: Понедельник, 02.05.2011, 02:47 | Сообщение # 31
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Вот облом=/
Может оно как-то потом аттачится...
Впрочем, так и быть...
Может получиться прицепить обьект к машине с эффектом... (те же светофоры оставляют проекцию на земле), хотя не уверен, что получится что-то хорошее...

Ещё я заметил, что проекция, созданная опкодом или через ту функцию, пропадает, когда повернуть камеру (напрмер, если смотреть на машину спереди), а свет от передних фар - никогда не пропадает.

И ещё. Если делать таким способом (твой метод #1)

Code
{$CLEO}  
wait 0  
while true  
      wait 0  
      if  
          not player.defined($player_char)  
      then  
          continue  
      end  
      if  
          actor.Driving($player_actor)  
      then  
          03C0: 0@ $player_actor  
          0A97: 0@ = car 0@ struct  
          0A8E: 1@ = 0@ + 0x14 // int  
          0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0  
          0AA6: call_method 0x6E1A60 struct 0@ num_params 2 pop 0 3 1@ // 1)vehicle struct 2) 0-îäíà ôàðà, 3 - äâå ôàðû 3) [VehStruct+20]  
      end  
end

То проекция распологается правильно относительно автомобиля (не даром там матрица передается).
А в способе #2, проекция имеет всегда угол 0.0.

Добавлено (02.05.2011, 02:47)
---------------------------------------------
Den_spb, Эврика!
Наверное...
Если у меня нет лагов с игрой, то я могу констатировать тот факт, что проекция света фар НЕ цепляется* ко всем автмомбилям, а только к авто мгрока. Или к самому игроку.
Под цеплянием здесь подразумевается такое цепляние, при котором проекция не отстаёт от авто.

Сообщение отредактировал DK22Pac - Воскресенье, 06.02.2011, 18:24
 
Den_spbДата: Понедельник, 02.05.2011, 03:10 | Сообщение # 32
Создатель сайта
Группа: Администраторы
Сообщений: 1536
Статус: Offline
Quote (DK22Pac)
что проекция света фар НЕ цепляется* ко всем автмомбилям, а только к авто мгрока. Или к самому игроку.
Не понял, что ты имеешь ввиду: к авто игрока не цепляются любые проекции света или только созданные искусственным путём? По идее автомобиль игрока не должен ничем отличаться от других машин.
 
DK22PacДата: Среда, 08.06.2011, 14:41 | Сообщение # 33
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Den_spb, я подумал, что проекция цепляется именно к ГГ. То есть, у других тачек проекции "отстают".
Хотя только что опять посмотрел эти процедуры, и ничего мне это не дало...

Добавлено (08.06.2011, 14:41)
---------------------------------------------
Где-то среди параметров должно быть расстояние отрисовки проекции, по оси Z. Неужели его нет?

 
Den_spbДата: Среда, 08.06.2011, 16:27 | Сообщение # 34
Создатель сайта
Группа: Администраторы
Сообщений: 1536
Статус: Offline
Quote
.text:0070799F 000 push 0
.text:007079A1 004 push 0
.text:007079A3 008 push 3F800000h
.text:007079A8 00C push 0
.text:007079AA 010 push 41700000h ; 15.0
.text:007079AF 014 push ecx
.text:007079B0 018 mov ecx, [esp+18h+arg_18]
.text:007079B4 018 push edx
.text:007079B5 01C mov edx, [esp+1Ch+arg_14]
.text:007079B9 01C push eax
.text:007079BA 020 mov eax, [esp+20h+arg_10]
.text:007079BE 020 push ecx
.text:007079BF 024 mov ecx, [esp+24h+arg_C]
.text:007079C3 024 push edx
.text:007079C4 028 mov edx, [esp+28h+arg_8]
.text:007079C8 028 push eax
.text:007079C9 02C mov eax, [esp+2Ch+arg_4]
.text:007079CD 02C push ecx
.text:007079CE 030 mov ecx, _texShadPed
.text:007079D4 030 push edx
.text:007079D5 034 push eax
.text:007079D6 038 push ecx
.text:007079D7 03C push 1
.text:007079D9 040 call Create_Shadow
Если расстояние до земли больше, чем значение параметра, то проекция не рисуется.
 
DK22PacДата: Суббота, 11.06.2011, 21:47 | Сообщение # 35
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Спасибо, то, что надо.
Ато проекции рисовались и на мосту, и на дороге под мостом.

Добавлено (11.06.2011, 21:29)
---------------------------------------------
Денис, у меня с этой фигней осталась только одна проблема - когда я поворачиваю мышкой и смотрю на автомобиль спереди, проекция пропадает. То есть, её нету, когда между точкой позиции камеры и точкой, в которой создана проекция, находится автомобиль.

Добавлено (11.06.2011, 21:47)
---------------------------------------------
Блин... Всё из-за этой проверки...

Code
0A97: 10@ = car 3@ struct
0A8E: 30@ = 10@ + 0x584
0A8D: 30@ = read_memory 30@ size 4 virtual_protect false                 
if
     08B7: test 30@ bit 2

Когда поворачиваешь мышу и фр не видно, игра ставит им статус "выключены". Как по-другому проверить?
Нужна проверка, должны ли работать фары, а не работают ли они в данный момент.
 
Den_spbДата: Понедельник, 13.06.2011, 03:24 | Сообщение # 36
Создатель сайта
Группа: Администраторы
Сообщений: 1536
Статус: Offline
Quote (DK22Pac)
Нужна проверка, должны ли работать фары, а не работают ли они в данный момент.
Можно просто проверить текущее время.
 
DK22PacДата: Воскресенье, 31.07.2011, 00:23 | Сообщение # 37
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Quote (Den_spb)
CAutomobile__preRender -> 0x6E1A60 -> 0x6E1720 -> 0x6E1600 -> 0x70C500 -> 0x707390

Эта цепочка используется только при создании проекции для авто игрока. Для автомобилей NPC используются что-то иное.

Добавлено (29.07.2011, 00:30)
---------------------------------------------
Для тачек педов последний адресс в этой цепочке - 0x70BA00 (вместо 0x707390)

Добавлено (31.07.2011, 00:20)
---------------------------------------------
При создании проекции для авто игрока, первым параметором передаётся какой-то адресс... Самое странное, что этот адресс - находится перед адрессом старта структуры авто... У меня было примерно так:
Param=CarStruct-100
Но эти значения постоянно менялись... (например - было CarStruct-30)

Добавлено (31.07.2011, 00:23)
---------------------------------------------
Второй параметр, как я понял, используется только когда создаётся текстура тени педа. Это [CPed+0x134]. Это последнее поле CPhysical, listener говорит, что это указатель на соприкасающийся обьект (но на самом деле это не так). Жаль, у меня слишком мало знаний, чтобы "копнуть" дальше.
Если вместо [CPed+0x134] передать 0 то тень не будет падать на стены (а только на землю - поверхность, которая имеет угол поворота по X <90 градусов).

 
Den_spbДата: Воскресенье, 31.07.2011, 00:24 | Сообщение # 38
Создатель сайта
Группа: Администраторы
Сообщений: 1536
Статус: Offline
Странно. Я считал, что созданием проекций (любого типа и назначения) занимается 0x707390.
 
DK22PacДата: Воскресенье, 31.07.2011, 00:27 | Сообщение # 39
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Также, если передать [CPed+0x134], то игра будет использовать "свои" параметры размеров и поворота для тени.

Добавлено (31.07.2011, 00:27)
---------------------------------------------
Денис, я в ексе находил очень много процедур, которые подобны 0x707390. В той что я привёл, например, есть ещё один параметр (передаётся последним, не константа).
Также я пытался занопить все вызовы 0x707390. Тени от обьектов и авто не пропали. Но пропали тени от педов. Как я выяснил позже, там тоже передаётся как параметр RwTexture*, - видимо, игра "рисует" текстуру, исходя от позиций костей педа (такие тени можно увидеть при включенном уровне высокой графики в настройках).

 
Den_spbДата: Воскресенье, 31.07.2011, 00:44 | Сообщение # 40
Создатель сайта
Группа: Администраторы
Сообщений: 1536
Статус: Offline
Насчёт параметра "начало структуры + бессмысленное смещение" - в функции, создающей корону, есть подобный параметр - там он является "уникальным номером" короны.
Вообще отслеживание параметров при их передаче из одной функции в другую - дело не сложное, надо только не забывать, что в Stack Frame вызываемой функции первый переданный параметр находится в самом низу (максимальное положительное смещение), а последний - наверху (минимальное положит. смещение). Результат вызова процедуры чаще всего записан в eax.
 
DK22PacДата: Пятница, 12.08.2011, 03:44 | Сообщение # 41
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
sub_70C500 --> CShadows_StoreCarLightShadow
Из исходников МТА. smile
sub_6E1A60 --> CVehicle_DoVehicleLights
0x6E0D01 call CCoronas_AddCorona
0x6E0DF7 call CCoronas_AddCorona
Создание корон передних фар.
Короче, сейчас буду танцевать с бубном вокруг CVehicle_DoVehicleLights
Отключение эффектов освещения для мотоциклов. делал чисто для теста:
0a8c: 0x6BD654 16 0x90 1
То же самое, для автомобилей:
0a8c: 0x6ABC91 45 0x90 1
Обновление
1 ?
2 Для теней педов - уазатель на какой-то массив.

3 0x3F800000 1.0 какой-то геометрический коэффициент? (при увеличении значения текстура уменьшается)
4 ?
5 Радиус действия по оси Z
6 Blue (100%)
7 Green (100%)
8 Red (100%)
9 Intensity
10 float положение текстуры : X1
11 float положение текстуры : Y1
12 float положение текстуры : X2
13 float положение текстуры : Y2
14 RwV3D, центр текстуры (100%)
15 RwTexture* (100%)
16 Тип эффекта. 1 - тень (применяется с текстурами теней) 2 - свет (применяется с текстурами света) 3 - ещё что-то.


Скорей всего,
0xC40430 --> старт пула структур теней
Размер: 0x34
Элементов: 0x30

Стек CShadows__AddPermanentShadow
arg_0 = byte Тип эффекта
arg_4 = dword RwTexture*
arg_8 = dword RwV3D, центр текстуры
arg_C = dword положение текстуры : X2
arg_10 = dword положение текстуры : Y2
arg_14 = dword положение текстуры : X1
arg_18 = dword положение текстуры : Y1
arg_1C = word Intensity
arg_20 = byte Red
arg_24 = byte Green
arg_28 = byte Blue
arg_2C = dword Радиус действия по оси Z
arg_30 = byte ?
arg_34 = dword какой-то геометрический коэффициент?
arg_38 = dword Для теней педов - уазатель на какой-то массив.
arg_3C = byte ?
Собственно, это только для того, чтобы легче было ориентироваться)

Ну и структура)) Самое аппетитное)
+0x00 float X
+0x04 float Y
+0x08 float Z
+0x0C float положение текстуры : X1
+0x10 float положение текстуры : Y1
+0x14 float положение текстуры : X2
+0x18 float положение текстуры : Y2
+0x1C float Радиус действия по оси Z
+0x20 float какой-то геометрический коэффициент?
+0x24 dword RwTexture*
+0x28 dword Для теней педов - уазатель на какой-то массив.
+0x2C word Intensity
+0x2E byte тип эффекта
+0x2F byte Red
+0x30 byte Green
+0x31 byte Blue
+0x32 word то ли набор флагов, то ли ещё что-то... Выщитывается на осное arg_30 и arg_3С.

Блин... Не могу поверить, что сам всё это исследовал...

sub_6E1780 --> CVehilce__DoBacklights
sub_6E0A50 --> CVehicle_DoHeadlightCoronas

Quote
16 Тип эффекта. 1 - тень (применяется с текстурами теней) 2 - свет (применяется с текстурами света) 3 - ещё что-то.

Параметр 3 - инверсия RGB?

Код для поочерёдного вывода X,Y,Z теней на экран. Локальных смещений там нету. Только глобальные координаты.
Code
{$CLEO .cs}
2@ = 0x30
2@ *= 0x34
0A8E: 1@ = 0xC40430 + 2@
while true
       003D:
       for 0@ = 0xC40430 to 1@ step 0x34
           0A8E: 3@ = 0@ + 0x0
           0A8D: 4@ 3@ 4 0
           inc(3@, 4)
           0A8D: 5@ 3@ 4 0
           inc(3@, 4)
           0A8D: 6@ 3@ 4 0
           0AD1: show_formatted_text_highpriority "%.4f %.4f %.4f" time 500 4@ 5@ 6@
           wait 500
       end
end


Блин... Всё было очень хорошо.
Существует ещё один пул теней...


Сообщение отредактировал DK22Pac - Вторник, 16.08.2011, 00:58
 
444andrei444Дата: Суббота, 15.10.2011, 18:40 | Сообщение # 42
Группа: Проверенные
Сообщений: 15
Статус: Offline
я так и не понял как мне изменить дальность света фар, желательно на моей машине, ну или на всех.
 
Den_spbДата: Суббота, 15.10.2011, 19:37 | Сообщение # 43
Создатель сайта
Группа: Администраторы
Сообщений: 1536
Статус: Offline
Надо патчить вышеописанные процедуры. Конкретно - менять значения параметров, передаваемые в 0x707390.
 
444andrei444Дата: Суббота, 15.10.2011, 21:59 | Сообщение # 44
Группа: Проверенные
Сообщений: 15
Статус: Offline
я что то не понял

while true
wait 0
0AA5: 0x707390 16 pop 16 0 0 0x3F800000 0 0x447A0000 255 255 255 255 0xC1400000 0 0 0x41400000 100 100 2
end
что тут не так
 
Den_spbДата: Суббота, 15.10.2011, 22:44 | Сообщение # 45
Создатель сайта
Группа: Администраторы
Сообщений: 1536
Статус: Offline
Пример вызова 0x707390:
Code
{$CLEO}   
0@ = -2024.2429
1@ = 170.1045
2@ = 28.8359
0AC7: 3@ = var 0@ offset
0A8D: 4@ = read_memory 0xC403F8 size 4 virtual_protect 0
while true
     wait 0  
     0AA5: 0x707390 16 pop 16 0 0 1.0 0 1000.0 255 255 255 255 1.0 0.0 0.0 1.0 3@ 4@ 2
end
Проекция создаётся у гаража СФ.
 
Форум » Игры серии ГТА » Работа с памятью, exe » Крепление эффектов освещения к автомобилю
Страница 3 из 6«123456»
Поиск: