You are not logged in.
@~AquaZ~ - только что проверил на gta_sa_compact.exe | stripped.scm все работает.
Так, а как получить оффсет, имея хендл?
0A97: $CarStruct = car $MyCar struct
Offline
Ой, совсем забыл такую простую команду... Спасибо! А что за адрес 0x40?
Offline
@~AquaZ~ -
00000040 immunities dd ?
Offline
Я вот такое написал... Не вылетает и не очень-то работает...
0A97: 1@ = car 0@ struct while 1@ <> 0 1@ += 0x5B9 0A8D: 2@ = read_memory 1@ size 1 virtual_protect 0 // *(byte*)(CVehicle + 0x5B9) 08BA: set 2@ bit 0 0A8C: write_memory 1@ size 1 value 2@ virtual_protect 0 // *(byte*)(CVehicle + 0x5B9) |= 0x01 1@ += 0x1B 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 0A97: 1@ = car 1@ struct end
Offline
0B10 и 0B11 - это битовые операции.
Из какой библиотеки эти опкоды?
флаг нужно было выставлять для всех варонов поезда (0x5D4 - указатель на седующий вагон)
Иначе получалось, что в голове/середине поезда образовался один сошедший с рельсов вагон.
Лично я экспериментировал с поездом, состоящим из одного вагона, так что думаю не в этом дело.
Вообще могу ошибаться, но по-моему можно производить действия и над отдельными вагонами. Однажды я создал поезд, а затем во время движения удалил один вагон из середины состава. Предположение, что игра вылетит, не подтвердилось - вагон удалился, а последующие за ним вагоны отцепились и плавно остановились.
Last edited by Den_spb (11-05-2010 14:18)
Offline
Вот часть моего кода
0407: store_coords_to 2@ 3@ 4@ from_car 1@ with_offset 0 0 5.0 Actor.PutAt($PLAYER_ACTOR, 2@, 3@, 4@) wait 1000 06DC: set_train 1@ accel 33.0 06DD: set_train 1@ speed 33.0 wait 5000 0AB1: @derail 1 params train 1@ :derail { 0AB1: @derail 1 params train 0@ } 0A97: 1@ = car 0@ struct while 1@ <> 0 1@ += 0x5B9 0A8D: 2@ = read_memory 1@ size 1 virtual_protect 0 // *(byte*)(CVehicle + 0x5B9) 08BA: set 2@ bit 0 0A8C: write_memory 1@ size 1 value 2@ virtual_protect 0 // *(byte*)(CVehicle + 0x5B9) |= 0x01 1@ += 0x1B 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 end 0AB2: ret 0
Результат - поезд мгновенно замирает. На грузовую платформу заскочить невозможно, будто он едет. Стоя на платформе меня медленно сносит в сторону тягача... 1.0 US Light, Stripped
Offline
@~AquaZ~ -
:derail 0A97: 1@ = car 0@ struct while 1@ <> 0 0A8E: 2@ = 1@ + 0x40 // int 0A8E: 3@ = 1@ + 0x5B9 // int 0A8D: 4@ = read_memory 2@ size 4 virtual_protect 0 0A8D: 5@ = read_memory 3@ size 1 virtual_protect 0 08C3: clear 4@ bit 2 08C3: clear 4@ bit 17 08BD: set 5@ bit 0 0A8C: write_memory 2@ size 4 value 4@ virtual_protect 0 0A8C: write_memory 3@ size 1 value 5@ virtual_protect 0 1@ += 0x5D4 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 end 0AB2: ret 0
Offline
Здесь ты просто вдобавок убираешь immunities - то же самое можно сделать через Car.SetImmunities?
Offline
@~AquaZ~ - Car.SetImmunities выставляет / убирает 18, 19, 23, 20, 21 биты соответственно.
Offline
Всё! Достали!!! Я возвращаюсь в моддинг!!!11 Буду тестировать скрипт...
:derail 0A97: 1@ = car 0@ struct while 1@ <> 0 0A8E: 2@ = 1@ + 0x40 // int 0A8E: 3@ = 1@ + 0x5B9 // int 0A8D: 4@ = read_memory 2@ size 4 virtual_protect 0 0A8D: 5@ = read_memory 3@ size 1 virtual_protect 0 08C3: clear 4@ bit 2 08C3: clear 4@ bit 17 08BD: set 5@ bit 0 0A8C: write_memory 2@ size 4 value 4@ virtual_protect 0 0A8C: write_memory 3@ size 1 value 5@ virtual_protect 0 1@ += 0x5D4 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 end 0AB2: ret 0
Вагоны после первого не особо летят... Просто сходят. Как бы их так отцеплять в обратном порядке? Есть флаг предыдущего вагона?
Last edited by ~AquaZ~ (19-12-2010 17:51)
Offline
В структуре вагона есть смещение 0x5D0, в котором записан указатель на предыдущий вагон.
Кстати, есть возможность расцеплять вагоны поезда без свода с рельсов. Для этого надо записать нули по смещению 0x5D0 структуры вагона N и по смещению 0x5D4 структуры вагона N-1. Для того, чтобы снова сцепить вагоны, надо заново прописать указатели по смещениям (я делал скрипт на данную тему).
Last edited by Den_spb (19-12-2010 22:21)
Offline
Offline
Поезд разделяет, но вагоны остаются позади просто очень медленно падают, а тягач летит вперёд.
:derail 06DE: 0@ = get_train 0@ last_carriage_handle 0A97: 1@ = car 0@ struct while 1@ <> 0 0A8E: 2@ = 1@ + 0x40 // int 0A8E: 3@ = 1@ + 0x5B9 // int 0A8D: 4@ = read_memory 2@ size 4 virtual_protect 0 0A8D: 5@ = read_memory 3@ size 1 virtual_protect 0 08C3: clear 4@ bit 2 08C3: clear 4@ bit 17 08BD: set 5@ bit 0 0A8C: write_memory 2@ size 4 value 4@ virtual_protect 0 0A8C: write_memory 3@ size 1 value 5@ virtual_protect 0 1@ += 0x5D0 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 end 0AB2: ret 0
Offline
Провёл древний эксперимент. Разогнал поезд и дождался отлёта вагонов. Вагоны отлетали сзади и ехали по траве рядом с тягачом, а когда настал и его час, он просто замер.
Last edited by ~AquaZ~ (20-12-2010 12:24)
Offline