Среда, 04.12.2024, 21:54
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 4 из 6
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
[DOC] Документация по адресам gta_sa.exe 1.0US
DK22PacДата: Суббота, 28.01.2012, 21:54 | Сообщение # 46
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Последний параметр - тип источника. Я всё рассписал на гтамоддинге.

Сообщение отредактировал DK22Pac - Суббота, 28.01.2012, 21:55
 
Den_spbДата: Воскресенье, 18.03.2012, 19:43 | Сообщение # 47
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
Немного информации о поездах и точках путей:
Code
Смещения CTrain:

0x5A0 [word] - текущий номер точки маршрута (номер строчки в tracks, нумерация от нуля)
       За данной точкой находится задний габарит модели, если поезд направлен по порядку точек.
       Если поезд направлен в обратную сторону, то номер точки фиксируется относительно переднего габарита модели.
0x5A4 [float] - текущая скорость движения, м/с
       Независимо от первоначальной ориентации поезда -
       при движении по порядку точек - больше нуля,    
       при движении против порядка точек - меньше нуля
0x5A8 [float] - расстояние, пройденное от начала маршрута в метрах
       при нуле задний габарит модели находится на первой точке маршрута - если поезд направлен по порядку точек
       при нуле передний габарит модели находится на первой точке маршрута - если поезд направлен в обратную сторону
0x5C0 [byte] - номер маршрута поезда
       0 - tracks
       1 - tracks3    
       2 - tracks2    
       3 - tracks4
0x5D0 [dword] - указатель на предыдущий вагон
0x5D4 [dword] - указатель на следующий вагон

Tracks.dat:

0xC38024 + 4 * НомерМаршрута [dword] - указатель на адрес массива точек tracksN.dat
0xC38014 + 4 * НомерМаршрута [dword] - количество точек в tracksN.dat

Структура точки tracks.dat:

Размер - 10 байтов

+0 [word] - координата X (перевести в float и поделить на 8.0)
+2 [word] - координата Y (перевести в float и поделить на 8.0)
+4 [word] - координата Z (перевести в float и поделить на 8.0)
+6 [word] - длина маршрута от первой точки до текущей

Структура точки пути автомобиля:

Размер - 14 байтов

+0 [word] - координата X (перевести в float и поделить на 8.0)
+2 [word] - координата Y (перевести в float и поделить на 8.0)
+4 [word] - координата Z (перевести в float и поделить на 8.0)
+6 [word] - номер точки ?

Пару адресов подсмотрел в скрипте Ryosuke "Train switch"
 
DK22PacДата: Воскресенье, 18.03.2012, 20:19 | Сообщение # 48
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Quote (Den_spb)
Смещения CTrain:

Добавил в вики.
http://gtamodding.ru/wiki/Адреса_Памяти_ (SA)#CTrain_.28.D0.9F.D0.BE.D0.B5.D0.B7.D0.B4.D0.B0.29
 
Den_spbДата: Воскресенье, 18.03.2012, 20:53 | Сообщение # 49
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
Хорошо. Есть ещё указатели на компоненты, правда названий dummy-сов не помню:
Code
0x66C - левая дверь
0x670 - правая дверь
0x674 - правое колесо 1   
0x678 - правое колесо 2   
0x67C - правое колесо 3   
0x680 - правое колесо 4  
0x684 - правое колесо 5  
0x688 - правое колесо 6  
0x68C - левое колесо 1   
0x690 - левое колесо 2   
0x694 - левое колесо 3   
0x698 - левое колесо 4   
0x69С - левое колесо 5
0x6A0 - левое колесо 6
0x6A4 - первая тележка (оси 1-3)  
0x6A8 - вторая тележка (оси 4-6)
 
DK22PacДата: Понедельник, 16.04.2012, 01:59 | Сообщение # 50
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
CTrain+0x5CC
Указатель на какую-то матрицу, используется при создании корон...


Добавлено (15.04.2012, 23:28)
---------------------------------------------
0x41D660 void __cdecl CCarAI::makeWayForCarWithSiren(CVehicle *vehicle)
Только что проверял, всё работает.
Code
{$CLEO}
0000:
while true
       wait 0
       if
           player.Defined(0)
       then
           if
               actor.Driving($3)
           then
               0811: 0@ $3
               0A97: 0@ = car 0@ struct
               0AA5: call 0x41D660 num_params 1 pop 1 0@ // CCarAI__makeWayForCarWithSiren
           end
       end
end

Добавлено (16.04.2012, 00:04)
---------------------------------------------
0x41D3D0 void __cdecl CCarAI__MellowOutChaseSpeed(CVehicle *vehicle)

Чем ближе авто к игроку - тем меньше его скорость. Используется для полицейских авто, когда у игрока есть звёзды розыска.

Добавлено (16.04.2012, 00:45)
---------------------------------------------
0x41C960 unsigned __int64 __cdecl CCarAI__TellCarToRamOtherCar(CVehicle *vehicle1, CVehicle *vehicle2, float radius)

Code
unsigned __int64 __cdecl CCarAI__TellCarToRamOtherCar(CVehicle *vehicle1, CVehicle *vehicle2, float radius)
{
   char vehicleFlags; // al@1
   char v4; // zf@1
   char newVehicleFlags; // al@2
   char vehicleSpeed; // al@4
   unsigned __int64 _radius; // qax@6

   vehicle1->m_pTargetEntity = (int)vehicle2;
   CEntity__registerReference((CObject **)&vehicle1->m_pTargetEntity);
   sub_42F5A0(vehicle1);
   v4 = (vehicle1->field_42D & 2) == 0;
   vehicleFlags = vehicle1->flags;
   vehicle1->driverBehavior = 52;
   if ( v4 )
     newVehicleFlags = vehicleFlags | 0x10;
   else
     newVehicleFlags = vehicleFlags & 0xEF;
   vehicle1->flags = newVehicleFlags;
   vehicleSpeed = vehicle1->??speed;
   if ( (unsigned __int8)vehicleSpeed <= 6u )
     vehicleSpeed = 6;
   vehicle1->??speed = vehicleSpeed;
   _radius = (unsigned __int64)radius;
   vehicle1->followingRadius = _radius;
   return _radius;
}

Добавлено (16.04.2012, 00:45)
---------------------------------------------
А теперь взгляните на эти функции

Code
signed int __cdecl sub_41C8A0(CVehicle *vehicle1, CVehicle *vehicle2)
{
   char vehicleFlags; // al@1
   char v3; // zf@1
   char newVehicleFlags; // al@2
   signed int vehicleSpeed; // eax@4

   vehicle1->m_pTargetEntity = (int)vehicle2;
   CEntity__registerReference((CObject **)&vehicle1->m_pTargetEntity);
   sub_42F5A0(vehicle1);
   v3 = (vehicle1->field_42D & 2) == 0;
   vehicleFlags = vehicle1->flags;
   vehicle1->driverBehavior = 15;
   if ( v3 )
     newVehicleFlags = vehicleFlags | 0x10;
   else
     newVehicleFlags = vehicleFlags & 0xEF;
   vehicle1->flags = newVehicleFlags;
   vehicleSpeed = vehicle1->??speed;
   if ( (_BYTE)vehicleSpeed <= 6u )
     vehicleSpeed = 6;
   vehicle1->??speed = vehicleSpeed;
   return vehicleSpeed;
}

Code
signed int __cdecl sub_41C900(CVehicle *vehicle1, CVehicle *vehicle2)
{
   char vehicleFlags; // al@1
   char v3; // zf@1
   char newVehicleFlags; // al@2
   signed int vehicleSpeed; // eax@4

   vehicle1->m_pTargetEntity = (int)vehicle2;
   CEntity__registerReference((CObject **)&vehicle1->m_pTargetEntity);
   sub_42F5A0(vehicle1);
   v3 = (vehicle1->field_42D & 2) == 0;
   vehicleFlags = vehicle1->flags;
   vehicle1->driverBehavior = 17;
   if ( v3 )
     newVehicleFlags = vehicleFlags | 0x10;
   else
     newVehicleFlags = vehicleFlags & 0xEF;
   vehicle1->flags = newVehicleFlags;
   vehicleSpeed = vehicle1->??speed;
   if ( (_BYTE)vehicleSpeed <= 6u )
     vehicleSpeed = 6;
   vehicle1->??speed = vehicleSpeed;
   return vehicleSpeed;
}

Они в игре не использовались. Видать, R* долго мучались, какой выбрать behaviour, и, возможно, им пришлось создать новый тип поведения biggrin Нк и ещё прикрутили один параметр, радиус преследования (хотя не уверен, что это именно оно, значение из float переводится в int, потом записывается в структуру, в поле с размером в байт...).

Добавлено (16.04.2012, 01:16)
---------------------------------------------
0x4383F0 float __cdecl CGame::setGameSpeed(float newGameSpeed)
0x4383E0 long double __cdecl CGame::getGameSpeed()

0x437C20 CCarCtrl::SteerAICarWithPhysics((CAutomobile *))

Добавлено (16.04.2012, 01:59)
---------------------------------------------
Короче, там дофига полезных функций. Если интересно, то всё оформлю и запостю.

Сообщение отредактировал DK22Pac - Воскресенье, 15.04.2012, 23:29
 
Den_spbДата: Понедельник, 16.04.2012, 07:26 | Сообщение # 51
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
Спасибо за информацию.
Quote (DK22Pac)
значение из float переводится в int, потом записывается в структуру, в поле с размером в байт...).
Максимальная скорость автомобиля тоже хранится в целом виде в поле типа byte - видимо сделано для экономии места.
Quote (DK22Pac)
Они в игре не использовались.
А откуда ты знаешь, что они не использовались? Отсутствие ссылок на данную функцию ещё ни о чём не говорит.
П.С. Всё, что относится к траффику, теперь можно обсуждать тут: http://modsforgta.ucoz.ru/forum/10-75-1 .
 
Den-xДата: Среда, 02.05.2012, 16:26 | Сообщение # 52
Группа: Пользователи
Сообщений: 13
Статус: Offline
Я MTA разбирал, потом надоело happy
 
DK22PacДата: Среда, 02.05.2012, 18:19 | Сообщение # 53
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Quote (Den_spb)
А откуда ты знаешь, что они не использовались? Отсутствие ссылок на данную функцию ещё ни о чём не говорит.

Я сужу по набору фактов. Во первых, нет прямых ссылок на эту процедуру. Во-вторых, есть процедура, имеющая более завершённый вид.
 
Den_spbДата: Четверг, 03.05.2012, 12:25 | Сообщение # 54
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
Если фактов несколько, то тогда действительно можно сделать точный вывод. Просто иногда встречаются функции, прямых ссылок на которые нет, но в игре они вызываются.
 
DK22PacДата: Среда, 23.05.2012, 11:23 | Сообщение # 55
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
0x706F60 ; int __cdecl registerShadowWithTime(char a1, RwTexture *texture, RwV3D *pos, int X1, int Y1, int X2, int Y2, __int16 intensity, char red, char green, char blue, int zDistance, int time, int a14)
Code
0AA7: call 0x706F60 num_params 14 pop 14 0x3F800000 5000 0x41200000 0 0 200 200 0xC0400000 0 0 0x40400000 10@ 14@ 2 20@

Создаёт тень на указанное время (медленно пропадает). Исп. для проекций взрывов, лужи крови.

Добавлено (23.05.2012, 11:22)
---------------------------------------------
0x6AE850 ; char __thiscall CAutomobile__processTankFire(CAutomobile *automobile)

CPhysical +0xBC DWORD[6] collidedEntity
CPhysical +0xB9 BYTE numEntitiesCollided
CVehicle +0x4D4 DWORD timeLastShot


Сообщение отредактировал DK22Pac - Среда, 23.05.2012, 11:39
 
Den_spbДата: Среда, 23.05.2012, 13:06 | Сообщение # 56
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
Quote (DK22Pac)
0x6AE850 ; char __thiscall CAutomobile__processTankFire(CAutomobile *automobile)

Т.е. этой функцией можно заставить танк выстрелить?
 
DK22PacДата: Среда, 23.05.2012, 13:09 | Сообщение # 57
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Нет, проверка на нажатие клавиши происходит в этой функции.
 
Den_spbДата: Среда, 23.05.2012, 13:11 | Сообщение # 58
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
Понятно. А это:
Quote (DK22Pac)
CPhysical +0xBC DWORD[6] collidedEntity

Указатель на объект, с которым столкнулся данный объект?
 
DK22PacДата: Пятница, 01.06.2012, 23:57 | Сообщение # 59
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
6 обьектов.

0x5DEF60 ; int __thiscall CPed__getBodypartIDByPoint(CPed *this, RwV3D *point)
Используется перед выбором анимации ранения для педов.

CPhysical +0x12C float Уровень освещённости поверхности, с которой соприкасается субьект (0.0 - 0.5)

CVehicle +0x51C CStoredCollPoly Поверхность, с которой контактирует передняя часть транспорта?
CVehicle +0x548 CStoredCollPoly Поверхность, с которой контактирует передняя часть транспорта?
CVehicle +0x574 BYTE Освещённость поверхности, с которой контактирует левая передняя часть транспорта
CVehicle +0x575 BYTE Освещённость поверхности, с которой контактирует левая задняя часть транспорта
CVehicle +0x576 BYTE Освещённость поверхности, с которой контактирует правая передняя часть транспорта
CVehicle +0x577 BYTE Освещённость поверхности, с которой контактирует правая задняя часть транспорта
CVehicle +0x588 DWORD Текстура номерного знака (RwTexture)
CVehicle +0x598 WORD ID txd с текстурой покрасочной работы
CVehicle +0x59C DWORD Текстура покрасочной работы (RwTexture)

CStoredCollPoly // sizeof=0x2C
CStoredCollPoly +0x00 RwV3D meshVertexA // Координаты вершин треугольника
CStoredCollPoly +0x0C RwV3D meshVertexB
CStoredCollPoly +0x18 RwV3D meshVertexC
CStoredCollPoly +0x24 BYTE isActual // Что-то в этом роде, устанавливается в 1 при создании
CStoredCollPoly +0x25 BYTE[3] _padding
CStoredCollPoly +0x28 DWORD lighting // Освещённость, при чтении из структуры транспорта используется только первый байт

Добавлено (01.06.2012, 23:57)
---------------------------------------------
Разобрался с

Code
6AF110     ; void __thiscall CAutomobile__BlowUpCarsInPath(CAutomobile *automobile)

Делает из автомобиля танк happy
Дерзайте biggrin


Сообщение отредактировал DK22Pac - Понедельник, 28.05.2012, 20:14
 
Den_spbДата: Воскресенье, 03.06.2012, 02:23 | Сообщение # 60
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
Quote (DK22Pac)
Делает из автомобиля танк
Испытал. Работает, но автомобилю надо иммунитеты включить - иначе сам загорается после первого столкновения.
 
  • Страница 4 из 6
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
Поиск: