#26 11-05-2010 13:09

Sanchez
Registered: 18-08-2006
Posts: 280

Re: [SA] Как свести поезд с рельс?

@~AquaZ~ - только что проверил на gta_sa_compact.exe | stripped.scm все работает.

Так, а как получить оффсет, имея хендл?

0A97: $CarStruct = car $MyCar struct

Offline

#27 11-05-2010 13:14

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: [SA] Как свести поезд с рельс?

Ой, совсем забыл такую простую команду... Спасибо! А что за адрес 0x40?

Offline

#28 11-05-2010 13:17

Sanchez
Registered: 18-08-2006
Posts: 280

Re: [SA] Как свести поезд с рельс?

@~AquaZ~ -

00000040 immunities      dd ?

Offline

#29 11-05-2010 13:25

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: [SA] Как свести поезд с рельс?

Я вот такое написал... Не вылетает и не очень-то работает...

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

#30 11-05-2010 14:04

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: [SA] Как свести поезд с рельс?

0B10 и 0B11 - это битовые операции.

Из какой библиотеки эти опкоды?

флаг нужно было выставлять для всех варонов поезда (0x5D4 - указатель на седующий вагон)
Иначе получалось, что в голове/середине поезда образовался один сошедший с рельсов вагон.

Лично я экспериментировал с поездом, состоящим из одного вагона, так что думаю не в этом дело.
Вообще могу ошибаться, но по-моему можно производить действия и над отдельными вагонами. Однажды я создал поезд, а затем во время движения удалил один вагон из середины состава. Предположение, что игра вылетит, не подтвердилось - вагон удалился, а последующие за ним вагоны отцепились и плавно остановились.

Last edited by Den_spb (11-05-2010 14:18)

Offline

#31 11-05-2010 15:35

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: [SA] Как свести поезд с рельс?

~AquaZ~ wrote:

Я вот такое написал... Не вылетает и не очень-то работает...

Второй 0A97 - лишний (ты и так получил указатель).

Offline

#32 11-05-2010 16:08

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: [SA] Как свести поезд с рельс?

Den_spb wrote:

0B10 и 0B11 - это битовые операции.

Из какой библиотеки эти опкоды?

intOperations.cleo прилагается к CLEO 4


I know everything and nothing...

Offline

#33 23-05-2010 15:32

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: [SA] Как свести поезд с рельс?

Вот часть моего кода

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

#34 23-05-2010 16:26

Sanchez
Registered: 18-08-2006
Posts: 280

Re: [SA] Как свести поезд с рельс?

@~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

#35 23-05-2010 16:29

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: [SA] Как свести поезд с рельс?

Здесь ты просто вдобавок убираешь immunities - то же самое можно сделать через Car.SetImmunities?

Offline

#36 23-05-2010 17:15

Sanchez
Registered: 18-08-2006
Posts: 280

Re: [SA] Как свести поезд с рельс?

@~AquaZ~ - Car.SetImmunities выставляет / убирает 18, 19, 23, 20, 21 биты соответственно.

Offline

#37 23-05-2010 20:42

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: [SA] Как свести поезд с рельс?

Эксперимент показал, что свести с рельсов можно любой вагон поезда (один, несколько или все).

Offline

#38 19-12-2010 16:12

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: [SA] Как свести поезд с рельс?

Всё! Достали!!! Я возвращаюсь в моддинг!!!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

#39 19-12-2010 22:19

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: [SA] Как свести поезд с рельс?

В структуре вагона есть смещение 0x5D0, в котором записан указатель на предыдущий вагон.
Кстати, есть возможность расцеплять вагоны поезда без свода с рельсов. Для этого надо записать нули по смещению 0x5D0 структуры вагона N и по смещению 0x5D4 структуры вагона N-1. Для того, чтобы снова сцепить вагоны, надо заново прописать указатели по смещениям (я делал скрипт на данную тему).

Last edited by Den_spb (19-12-2010 22:21)

Offline

#40 20-12-2010 10:55

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

Re: [SA] Как свести поезд с рельс?

Ссылку в студию! Очень хочется посмотреть smile

Offline

#41 20-12-2010 11:17

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: [SA] Как свести поезд с рельс?

Поезд разделяет, но вагоны остаются позади просто очень медленно падают, а тягач летит вперёд.

: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

#42 20-12-2010 12:23

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: [SA] Как свести поезд с рельс?

Провёл древний эксперимент. Разогнал поезд и дождался отлёта вагонов. Вагоны отлетали сзади и ехали по траве рядом с тягачом, а когда настал и его час, он просто замер.

Last edited by ~AquaZ~ (20-12-2010 12:24)

Offline

#43 20-12-2010 17:44

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: [SA] Как свести поезд с рельс?

Sw[ee]t wrote:

Ссылку в студию! Очень хочется посмотреть smile

ссылка

Offline

Board footer

Powered by FluxBB