[DOC] Документация по адресам gta_sa.exe 1.0US
|
|
DK22Pac | Дата: Четверг, 14.06.2012, 15:26 | Сообщение # 61 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| 0x8A6214 BYTE[4] traflight_colorRedTable 0x8A6218 BYTE[4] traflight_colorGreenTable 0xA9AD94 BYTE[4] traflight_colorBlueTable
Сообщение отредактировал DK22Pac - Четверг, 14.06.2012, 15:26 |
|
| |
Den_spb | Дата: Пятница, 15.06.2012, 03:57 | Сообщение # 62 |
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
| Цвета шестиугольников только не меняются - видимо записаны в другом месте.
|
|
| |
DK22Pac | Дата: Суббота, 15.09.2012, 20:59 | Сообщение # 63 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| 0x6C6520 ; CHeli *__cdecl createHeliToFollowPed(CPed *ped, char bFlagHeliModel) Если не ошибаюсь, то можно только 2 таких верта создать (если больше, то могут возникнуть глюки). Code 0AA5: call 0x6C6520 2 2 bHeliType 0 ped 0@ bHeliType: Code 0 - POLMAV (497) 1 - VCNMAV (488) Модели нужно самостоятельно загрузить.
Добавлено (14.08.2012, 02:15) --------------------------------------------- ox6A45C0 ; void __thiscall CAutomobile::ProcessOnWater(CAutomobile *this) Чё-то типо того. Вызывается в ::preRender, если включен чит CarsOnWater. В самой функции какие-то рассчёты с коллизией (а именно - suspension lines)
Добавлено (19.08.2012, 02:45) --------------------------------------------- Разобрал кое-какие процедуры CVehicle\CAutomobile\CDamageManager, позже выложу.
Добавлено (15.09.2012, 20:59) --------------------------------------------- 0x8D31A4 someGun RwV3D <0.0, 0.5, 0.2> Офсет выстрела для модели RcTiger 0x8D316C gunShotInterval_ms dd 60 Интервал выстрела
Сообщение отредактировал DK22Pac - Суббота, 15.09.2012, 21:01 |
|
| |
muv | Дата: Вторник, 08.01.2013, 07:35 | Сообщение # 64 |
Группа: Пользователи
Сообщений: 6
Статус: Offline
| Как вычислить фпс игры в клео?
|
|
| |
Den_spb | Дата: Вторник, 08.01.2013, 23:16 | Сообщение # 65 |
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
| Можно так:Код {$CLEO} wait 0 while true 32@ = 0 wait 0 0093: 32@ = integer 32@ to_float 0@ = 1000.0 0073: 0@ /= 32@ // (float) 0092: 0@ = float 0@ to_integer 03F0: enable_text_draw 1 045A: draw_text_1number 200.0 200.0 GXT 'NUMBER' number 0@ // ~1~ end
|
|
| |
muv | Дата: Среда, 09.01.2013, 09:36 | Сообщение # 66 |
Группа: Пользователи
Сообщений: 6
Статус: Offline
| а как ещё можно? хотя не надо, так всё хорошо работает и спасибо большое!
Сообщение отредактировал muv - Среда, 09.01.2013, 09:55 |
|
| |
DK22Pac | Дата: Пятница, 03.01.2014, 15:12 | Сообщение # 67 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| 0x432B10 CCarCtrl::PickNextNodeAccordingStrategy(CVehicle *car) Фактически, в этой функции происходит выбор следующей точки маршрута для автомобиля. Для разных видов т.н. "Стратегии" (преследование, движения к пункту назначения, рандомная езда) - разный метод выбора. Код switch ( car->m_autoPilot.m_nCarMission ) { case MISSION_RAMPLAYER_FARAWAY: case MISSION_BLOCKPLAYER_FARAWAY: case MISSION_2B: result = CCarCtrl::PickNextNodeToChaseCar(car, *v3, v6->y, v5, v4); break; case MISSION_RAMCAR_FARAWAY: case MISSION_BLOCKCAR_FARAWAY: case MISSION_34: case MISSION_36: case MISSION_3D: case MISSION_41: case MISSION_42: case MISSION_43: case MISSION_44: result = CCarCtrl::PickNextNodeToChaseCar(car, v14->x, v12->y, v10->z, car->m_autoPilot.m_pTargetCar); break; case MISSION_GOTOCOORDS: case MISSION_GOTOCOORDS_ACCURATE: result = CCarCtrl::PickNextNodeToFollowPath(car); break; default: CCarCtrl::PickNextNodeRandomly(car); 0x436540 CCarCtrl::UpdateCarOnRails(CVehicle *car) Это функция, которая обновляет положение автомобиля на дороге. Код CCurves::CalcCurvePoint(&v31, &v30, &in, &v28, v26, speedScaleFactor, &outPoint, &moveForce); LODWORD(outPoint.z) = 0x41700000u; CCarCtrl::DragCarToPoint(v1, &outPoint);
|
|
| |
Den_spb | Дата: Пятница, 03.01.2014, 20:18 | Сообщение # 68 |
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
| Цитата DK22Pac ( ) 0x432B10 CCarCtrl::PickNextNodeAccordingStrategy(CVehicle *car) Спасибо за информацию. Цитата DK22Pac ( ) 0x436540 CCarCtrl::UpdateCarOnRails(CVehicle *car) Про эту функцию я знаю, у меня в базе она отмечена как "MovingCarsAndBikesByRoutes_cdecl proc near". Если обратить внимание на начало функции, то там есть проверка текущей анимации автомобиля: Код .text:00436560 06C movsx eax, byte ptr [esi+3BBh] ; AutomobileEvent При записи по адресу CCarCtrl+0x3BB значения 24 (это значение игра записывает в структуру в тот момент, когда автомобиль или мотоцикл соприкасается с препятствием), перемещение транспортного средства бота по пути мгновенно прекращается. Так работает скрипт AutoTrafFix, опубликованный на данном сайте. Недостаток данного метода в том, что транспортное средство бота резко останавливается перед препятствием. Тема на форуме, посвященная траффику автомобилей: http://modsforgta.ucoz.ru/forum/10-75-1
|
|
| |
Den_spb | Дата: Воскресенье, 05.01.2014, 18:23 | Сообщение # 69 |
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
| Существует опкод, предназначенный для включения и отключения стандартного траффика поездов (в т.ч. и трамваев) Код 06D7: enable_train_traffic 0 Однако в некоторых условиях отключенный данным способом траффик может быть снова включен игрой. Есть другой, радикальный способ отключения траффика - через игровую память: Код {$CLEO} 0A8C: write_memory 0x6F7AE8 size 2 value 0x01B0 virtual_protect 1 // mov al, 1 0A8C: write_memory 0x6F7AEA size 1 value 0x90 virtual_protect 1 // NOP 0A8C: write_memory 0x6F7AEB size 2 value 0x9090 virtual_protect 1 // NOP 0A93: Эта информация может быть полезна разработчикам, создающим модификации на тему ж/д транспорта.
|
|
| |
Recoil | Дата: Среда, 29.09.2021, 18:43 | Сообщение # 70 |
Группа: Проверенные
Сообщений: 12
Статус: Offline
| Привет Денис! Может помнишь меня еще с GTT. Иногда вне сезона вожусь с IDA, нашел много чего, хотел сделать два скрипта: -по всем вращениям и перемещениям компонентов транспортных средств и дальности стельбы (найдено много, почти все) -все оффсеты транспорта (найдено много чего) Чем глубже я копал тем труднее становилось, помочь некому, Дмитрию ты помогал, а он не очень спешит помочь, пишут занят, я тоже между прочим занят. Застрял на таких моментах Скорость вращения пикапа .text:00455CD0 038 D8 0D 0C 9B 85 00 fmul ds:flt_859B0C
при попытке изменения скорости, пикап начинает вращаться с периодическими остановками и скачками. Пытаюсь изменить расположение реактивных струй у джетпака, с помощью Lua MemoryEditor https://u.to/bMWiGw советую всем эту прогу для редактирования памяти в игре! и это получается https://u.to/bcWiGw пишу скрипт, он не работает, так и не понял в чем дело {$CLEO} 0A8C: write_memory 0xC195D8 size 4 value 0.0 virtual_protect 1 // X (0) 0A8C: write_memory 0xC195DC size 4 value 1.0 virtual_protect 1 // Y (0) 0A8C: write_memory 0xC195E0 size 4 value 1.0 virtual_protect 1 // Z (-0.15) 0A93:
Все попытки найти оффсет тепловой ловушки Flare для самолета Гидра провалились.
з.ы. Столкнулся с проблемой, хочу для civdens.asi добавить как в BongHitTrafficIII.asi дальность для припаркованных авто, нашел эти адреса .text:006F30BB 02C fmul ds:flt_858970 // этот адрес отвечает за максимальную дальность припаркованного транспорта .rdata:00858970 flt_858970 dd 160.0 ; DATA XREF: sub_404690+1Cr .text:006F2FB9 02C fcomp ds:flt_858B40 ; 50.0 // этот за минимальную дальность ?? .rdata:00858B40 flt_858B40 dd 50.0 ; DATA XREF: sub_409760+131r Максимальную дальность удается увеличить в два раза, а больше никак, а в 4, 6 раз? Как обойти лимит?
Сообщение отредактировал Recoil - Суббота, 16.10.2021, 20:31 |
|
| |
Den_spb | Дата: Среда, 29.09.2021, 21:39 | Сообщение # 71 |
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
| Привет, Юра! Приятно вновь видеть участников GTT спустя такое долгое время!
Давно не занимался скриптингом и, в частности, работой с памятью, поэтому сложно сходу вникать в такие вопросы, но попробуем. Начнем с джетпака - у меня есть предположение, что в 0xC195D8 записывается не значение, а адрес переменной, в которую уже надо записать значение. На этот вывод толкает то, что игра по-разному реагирует на этот код:Код {$CLEO} wait 1000 model.Load(#JETPACK)
07A7: put_jetpack_on_actor $PLAYER_ACTOR 038B: load_requested_models
0AC6: 0@ = label @VECTOR pointer
0A8C: write_memory 0xC195D8 size 4 value 0@ virtual_protect 1 // X (0)
0A8C: write_memory 0@ size 4 value 10.0 virtual_protect 0 // X (0)
:VECTOR hex 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 end 0A93:
Если записать в первые четыре байта буфера 0 или целое число, то ничего не происходит. Если записать дробное число - игра вылетает. Пока у меня нет IDA и базы gta_sa.exe, постараюсь завтра установить - тогда смогу посмотреть, что это за адреса.
|
|
| |
Recoil | Дата: Среда, 29.09.2021, 22:00 | Сообщение # 72 |
Группа: Проверенные
Сообщений: 12
Статус: Offline
| Вот что нашел в базе IDA по джетпаку, точнее что сохранил по этой теме Jetpack .data:00C195D8 ; RwV3d gJetBallOffset .data:00C195D8 ?? ?? ?? ?? ?? ?? ?? ??+ gJetBallOffset RwV3d <?>
0xC195D8 x (0.0) 0xC195DC y (0.0) 0xC195E0 z (-0.15)
.data:008D2F68 ; RwV3d JETPACK_POS_OFFSET .data:008D2F68 CD CC CC 3D 0A D7 A3 3D+ JETPACK_POS_OFFSET RwV3d <0.1, 0.079999998, 0.0> .data:008D2F68 00 00 00 00 ; DATA XREF: CTaskSimpleJetpack__Process+4Ao .data:008D2F74 ; RwV3d JETPACK_ROT_AXIS .data:008D2F74 00 00 00 00 00 00 80 3F+ JETPACK_ROT_AXIS RwV3d <0.0, 1.0, 0.0> ; DATA XREF: CTaskSimpleJetpack__Process+65o
база https://u.to/jtqiGw IDA pro игра https://u.to/j9qiGw
Сообщение отредактировал Recoil - Суббота, 13.11.2021, 11:15 |
|
| |
Den_spb | Дата: Среда, 29.09.2021, 22:21 | Сообщение # 73 |
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
| Ты правильно всё делал, значения записываются по адресам напрямую. У меня сейчас всё тоже заработало) Значения и пишутся, и читаются - эффект в игре появился!Код {$CLEO}
0A8C: write_memory 0xC195D8 size 4 value 2.0 virtual_protect 1 // X (0) 0A8C: write_memory 0xC195DC size 4 value 1.0 virtual_protect 1 // Y (0) 0A8C: write_memory 0xC195E0 size 4 value 0.5 virtual_protect 1 // Z (-0.15)
wait 1000 model.Load(#JETPACK)
038B: load_requested_models 07A7: put_jetpack_on_actor $PLAYER_ACTOR
0A8D: 0@ = read_memory 0xC195D8 size 4 virtual_protect 1 0A8D: 1@ = read_memory 0xC195DC size 4 virtual_protect 1 0A8D: 2@ = read_memory 0xC195E0 size 4 virtual_protect 1
0@ *= 1000.0 1@ *= 1000.0 2@ *= 1000.0
0092: 0@ = float 0@ to_integer 0092: 1@ = float 1@ to_integer 0092: 2@ = float 2@ to_integer
while true wait 0
03F0: enable_text_draw 1 045A: draw_text_1number 200.0 200.0 GXT 'NUMBER' number 0@ // ~1~ 045A: draw_text_1number 200.0 250.0 GXT 'NUMBER' number 1@ // ~1~ 045A: draw_text_1number 200.0 300.0 GXT 'NUMBER' number 2@ // ~1~
end
0A93:
|
|
| |
Recoil | Дата: Среда, 29.09.2021, 23:18 | Сообщение # 74 |
Группа: Проверенные
Сообщений: 12
Статус: Offline
| Спасибо. Но у меня скрипт не работает, может конфликт, надо разбираться https://u.to/mOKiGw Тестировал один плагин [SA]ObjectDatLoader у меня не работает, хотелось сборку эффектов сделать из множества модов, что творится не пойму
Сообщение отредактировал Recoil - Среда, 29.09.2021, 23:22 |
|
| |
Den_spb | Дата: Пятница, 01.10.2021, 21:11 | Сообщение # 75 |
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
| Попробуй этот код. Здесь значения адресов читаются и выводятся на экран постоянно. Поэтому если скрипт не изменил их, или игра поставила стандартные значения обратно - это будет видно. Код {$CLEO}
0A8C: write_memory 0xC195D8 size 4 value 2.0 virtual_protect 1 // X (0) 0A8C: write_memory 0xC195DC size 4 value 1.0 virtual_protect 1 // Y (0) 0A8C: write_memory 0xC195E0 size 4 value 3.5 virtual_protect 1 // Z (-0.15)
wait 1000 model.Load(#JETPACK)
038B: load_requested_models 07A7: put_jetpack_on_actor $PLAYER_ACTOR
while true wait 0 0A8D: 0@ = read_memory 0xC195D8 size 4 virtual_protect 1 0A8D: 1@ = read_memory 0xC195DC size 4 virtual_protect 1 0A8D: 2@ = read_memory 0xC195E0 size 4 virtual_protect 1 0@ *= 1000.0 1@ *= 1000.0 2@ *= 1000.0 0092: 0@ = float 0@ to_integer 0092: 1@ = float 1@ to_integer 0092: 2@ = float 2@ to_integer 03F0: enable_text_draw 1 045A: draw_text_1number 200.0 200.0 GXT 'NUMBER' number 0@ // ~1~ 045A: draw_text_1number 200.0 250.0 GXT 'NUMBER' number 1@ // ~1~ 045A: draw_text_1number 200.0 300.0 GXT 'NUMBER' number 2@ // ~1~ end
0A93:
Попробовал сейчас снова. С первого раза не работает и значения в адресах не записались. Перезагрузил сохранение - со второй попытки заработало.
|
|
| |