#101 20-12-2009 22:29

GTASA
Registered: 13-09-2008
Posts: 476

Re: Запись случайного актера / машины / объекта в переменную

Gyr, у меня return стоит.
А скрипт у меня последний, тот что Seemann давал.

Может мне пример дадите, как сделать, чтобы искались все ближайшие, кроме тех, кто в моей машине?

Last edited by GTASA (20-12-2009 22:30)

Offline

#102 21-12-2009 07:38

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

Re: Запись случайного актера / машины / объекта в переменную

@GTASA

Вот тебе мой вариант interceptor'а

0AB1: call_scm_func @ANY_GETACTOR 4 1@ 2@ 3@ 10.0 0@ ///Вызываешь это где нужно в скрипте
///Все по аналогии с обычным интерсептором
///1@ 2@ 3@ это центр поиска,
///10.0 это радиус поиска
///0@ это получаемый актер

////////////////////           Добавляешь это в конец куда нибудь скрипта
:ANY_GETACTOR
0006: 16@ = 305868
0006: 6@ = 1988
03C0: 8@ = actor $PLAYER_ACTOR car

:ANY_ACTOR_STARTSEARCH
008B: 16@ = &0(16@,1i) // CPool*
0085: 5@ = 16@ 
17@ = 8
gosub @ANY_ACTOR_READMEMOFFSET
0085: 7@ = 5@ 
0A8D: 11@ = read_memory 16@ size 4 virtual_protect 0        // CPool.pUnits
0006: 10@ = 0
0006: 19@ = -1

:ANY_ACTOR_SEARCHLOOPMAIN
0085: 5@ = 11@ 
17@ = 20
gosub @ANY_ACTOR_READMEMOFFSET
0085: 4@ = 5@ 
8039:   not  4@ == 0 
004D: jump_if_false @ANY_ACTOR_SEARCHLOOPNEXT 
0085: 5@ = 4@ 
17@ = 48
gosub @ANY_ACTOR_READMEMOFFSET
0087: 12@ = 5@ 
0085: 5@ = 4@ 
17@ = 52
gosub @ANY_ACTOR_READMEMOFFSET
0087: 13@ = 5@ 
0085: 5@ = 4@ 
17@ = 56
gosub @ANY_ACTOR_READMEMOFFSET
0087: 14@ = 5@ 
050A: 15@ = distance_between_XYZ 0@ 1@ 2@ and_XYZ 12@ 13@ 14@ 
0025:   3@ > 15@ // (float) 
004D: jump_if_false @ANY_ACTOR_SEARCHLOOPNEXT 
0085: 9@ = 10@ // (int) // counter
0085: 5@ = 16@ 
17@ = 4
gosub @ANY_ACTOR_READMEMOFFSET
0085: 4@ = 5@ 
005A: 4@ += 9@ // (int) 
0A8D: 4@ = read_memory 4@ size 1 virtual_protect 0 
0012: 9@ *= 256 
005A: 9@ += 4@ // (int)

:ANY_ACTOR_TESTACTORHANDLE
056D:   is 9@ valid_actor_handle
004D: jump_if_false @ANY_ACTOR_SEARCHLOOPNEXT 
00D6: if and
803C:   not $PLAYER_ACTOR == 9@ // (int) 
8118:   not actor 9@ dead 
004D: jump_if_false @ANY_ACTOR_SEARCHLOOPNEXT
03C0: 18@ = actor 9@ car 
if and
   not 18@ == -1
803B:   not 18@ == 8@ // (int) 
004D: jump_if_false @ANY_ACTOR_SEARCHLOOPNEXT
0085: 19@ = 9@ 
0085: 3@ = 15@ 

:ANY_ACTOR_SEARCHLOOPNEXT 
005A: 11@ += 6@ // (int) 
000A: 10@ += 1 
002D:   10@ >= 7@ // (int)
004D: jump_if_false @ANY_ACTOR_SEARCHLOOPMAIN
0AB2: ret 1 19@

:ANY_ACTOR_READMEMOFFSET
0A8E: 5@ = 5@ + 17@ // int
0A8D: 5@ = read_memory 5@ size 4 virtual_protect 0
0051: return

Last edited by mfisto (21-12-2009 07:40)


I know everything and nothing...

Offline

#103 24-12-2009 06:06

GTASA
Registered: 13-09-2008
Posts: 476

Re: Запись случайного актера / машины / объекта в переменную

Чем такая версия лучше старой?

Offline

#104 28-12-2009 14:13

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

Re: Запись случайного актера / машины / объекта в переменную

Код оптимизирован, на сколько мои глаза сейчас видят

Offline

#105 06-04-2010 04:42

GTASA
Registered: 13-09-2008
Posts: 476

Re: Запись случайного актера / машины / объекта в переменную

При записи предыдущего найденного актера в переменную, он будет пропущен, но поиск мотается теперь около двух актеров. А как сделать, чтобы этого не было? Чтобы пропускались все те, которые уже были найдены?
И что надо изменить в коде, чтобы можно было искать не только транспорт, объекты и актеров, а, например, маркеры над актерами, пикапы.

Offline

#106 19-12-2011 09:13

Dr_Emmett_Brown_2011
Registered: 28-04-2011
Posts: 80

Re: Запись случайного актера / машины / объекта в переменную

Часто при поиске актёра или педа вылетает, почему?

Offline

#107 19-12-2011 13:05

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

Re: Запись случайного актера / машины / объекта в переменную

Версия игры 1.0 US ?

Offline

#108 19-12-2011 13:19

Dr_Emmett_Brown_2011
Registered: 28-04-2011
Posts: 80

Re: Запись случайного актера / машины / объекта в переменную

Да

Offline

#109 19-12-2011 19:00

444andrei444
Registered: 29-03-2011
Posts: 317
Website

Re: Запись случайного актера / машины / объекта в переменную

а почему бы тебе не использовать опкоды клео 4?

Offline

#110 20-12-2011 04:16

Dr_Emmett_Brown_2011
Registered: 28-04-2011
Posts: 80

Re: Запись случайного актера / машины / объекта в переменную

Я их и использовал.

Offline

#111 20-12-2011 04:44

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

Re: Запись случайного актера / машины / объекта в переменную

1.Вылет точно из-за опкодов поиска (можно посмотреть в scmLog)?
2.Какая версия клео4?

Offline

#112 20-12-2011 06:33

Dr_Emmett_Brown_2011
Registered: 28-04-2011
Posts: 80

Re: Запись случайного актера / машины / объекта в переменную

1) Вылетает при чтении координат найденного актёра/педа.  Если вычисление координат убрать, то вылетает на опкоде 0001.
2) Cleo 4.

Offline

#113 20-12-2011 12:25

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

Re: Запись случайного актера / машины / объекта в переменную

Ты уверен, что актёр был найден?
После поиска надо делать проверку 0@ <> -1 , где 0@ - переменная актёра.

Offline

#114 20-12-2011 13:49

Dr_Emmett_Brown_2011
Registered: 28-04-2011
Posts: 80

Re: Запись случайного актера / машины / объекта в переменную

Я даже проверку поставил, существует ли актёр или нет, но проблема не решилась.

Offline

#115 20-12-2011 14:20

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

Re: Запись случайного актера / машины / объекта в переменную

Приведи код.

Offline

#116 20-12-2011 14:32

Dr_Emmett_Brown_2011
Registered: 28-04-2011
Posts: 80

Re: Запись случайного актера / машины / объекта в переменную

00AA: store_car 0@ position_to 1@ 2@ 3@ 
0AB1: call_scm_func @SEARCH_PED 21 1@ 2@ 3@ 200.0 0 0 0 0 0 0 0 0 0 0 0 0 0 5@ 6@ 7@ 17@ 26@ // 5@, 6@, 7@, 17@ - педы, которых не надо искать
056D:   actor 26@ defined 
004D: jump_if_false @PED_NOT_DEFINED 
................

:SEARCH_PED
0006: 16@ = 305868 
0006: 6@ = 1988 
008B: 16@ = &0(16@,1i) // (int) 
0AB1: call_scm_func @READ_MEMORY 2 16@ 8 7@ 
0A8D: 11@ = read_memory 16@ size 4 virtual_protect 0 
0006: 9@ = -1 
0006: 10@ = 0 

:SEARCH_PED_7831
0AB1: call_scm_func @READ_MEMORY 2 11@ 20 4@ 
8039:   not  4@ == 0 
004D: jump_if_false @KITT_FUNCTIONS_8134 
0085: 9@ = 10@ // (int) 
0AB1: call_scm_func @READ_MEMORY 2 16@ 4 5@ 
005A: 5@ += 9@ // (int) 
0A8D: 5@ = read_memory 5@ size 1 virtual_protect 0 
0012: 9@ *= 256 
005A: 9@ += 5@ // (int) 
056D:   actor 9@ defined 
004D: jump_if_false @SEARCH_PED_8092 
0AB1: call_scm_func @READ_MEMORY 2 4@ 48 12@ // По SCMLog'у вылет происходит, начиная отсюда...
0AB1: call_scm_func @READ_MEMORY 2 4@ 52 13@ 
0AB1: call_scm_func @READ_MEMORY 2 4@ 56 14@ 
050A: 15@ = distance_between_XYZ 0@ 1@ 2@ and_XYZ 12@ 13@ 14@ 
0025:   3@ > 15@ // (float) 
004D: jump_if_false @SEARCH_PED_8134 
00D6: if or
003C:   $PLAYER_ACTOR == 9@ // (int) 
0039:   9@ == 0 
003B:   9@ == 17@ // (int) 
003B:   9@ == 18@ // (int) 
003B:   9@ == 19@ // (int) 
003B:   9@ == 20@ // (int) 
0118:   actor 9@ dead 
004D: jump_if_false @SEARCH_PED_8106 

:SEARCH_PED_8092
0006: 9@ = -1 
0002: jump @SEARCH_PED_8134 

:SEARCH_PED_8106
8449:   not actor 9@ in_a_car 
004D: jump_if_false @SEARCH_PED_8092 
0085: 3@ = 15@ // (int) 
0AB2: ret 1 9@ 

:SEARCH_PED_8134
005A: 11@ += 6@ // (int) 
000A: 10@ += 1 
002D:   10@ >= 7@ // (int) 
004D: jump_if_false @SEARCH_PED_7831 
0AB2: ret 1 9@ 

:READ_MEMORY 
0A8E: 0@ = 0@ + 1@ // int 
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 // ...и заканчивая здесь.
0AB2: ret 1 0@

Извиняюсь за скомплинированный скрипт.

------------------------------------------------------------------------------------------------------------------------------
JAN 08 2012 12:46 GMT+08:00

Путём убирания некоторых частей кода я нашёл причину вылета. Вылетает при использовании следующей части кода:

...
0006: 16@ = 305868 
0006: 6@ = 1988 
008B: 16@ = &0(16@,1i) // (int) 
0AB1: call_scm_func @KITT_FUNCTIONS_8172 2 16@ 8 7@ 
0A8D: 11@ = read_memory 16@ size 4 virtual_protect 0 
...

Что делает эта часть кода и чем её можно заменить?

Last edited by Dr_Emmett_Brown_2011 (08-01-2012 04:51)

Offline

Board footer

Powered by FluxBB