#76 30-12-2008 15:40

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

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

ped event тебе в помощь)))

:check
wait 0
04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 0.0 0.0 0.0 
089E: get_actor_in_sphere 1@ 2@ 3@ radius 100.0 handle_as 0@ // versionB 
if
074F:   actor 0@ ped_event == 31 
jf @check
//действие

Last edited by 3Doomer (30-12-2008 15:50)


GIMS developer

Offline

#77 30-12-2008 20:05

Seemann
Registered: 07-08-2006
Posts: 2,156

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

Слушайте господа как записать в переменную хендл актера на которого наставлена пушка игроком или актером

Посмотри эту тему на всякий случай
http://sannybuilder.com/forums/viewtopic.php?id=45

Offline

#78 06-01-2009 19:24

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

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

Seemann wrote:

Слушайте господа как записать в переменную хендл актера на которого наставлена пушка игроком или актером

Посмотри эту тему на всякий случай
http://sannybuilder.com/forums/viewtopic.php?id=45

Да, да, все ясно, но можно оформить получение хендла в виде cleo, к тому же я не очень то силен в правильной интерпретации кода.


I know everything and nothing...

Offline

#79 28-01-2009 10:25

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

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

Я уж измучался, помогите а? Поизучал скрипт Seemann но там нет получения хендла, там сразу здоровье и модель цели. А мне надо именно хендл, а тот способ который описал 3Doomer не дает верный результат т.к. может зациклиться на каком то одном актере, а также переберает толко типы 4 и 5, а копов и актеров, созданных в миссиях не берет.


I know everything and nothing...

Offline

#80 28-01-2009 13:41

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

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

Почему это только типы 4 и 5??? опкодов записи актёра в переменную в заданных координатах много, пробуй все:D

073E: get_car_in_sphere 1@ 2@ 3@ radius 5.0 model #FAM1 handle_as 0@ 
0A3E: unknown_get_actor_in_sphere 1@ 2@ 3@ radius 5.0 5.0 5.0 handle_as 0@ 
073F: get_actor_in_sphere 1@ 2@ 3@ radius 5.0 with_pedtype_civilian 1 gang 1 criminal/prostitute 1 handle_as 0@ 
089E: get_actor_in_sphere 1@ 2@ 3@ radius 5.0 handle_as 0@ // versionB 
08E5: get_actor_in_sphere 1@ 2@ 3@ radius 5.0 handle_as 0@ 
0A3E: unknown_get_actor_in_sphere 1@ 2@ 3@ radius 5.0 5.0 5.0 handle_as 0@

GIMS developer

Offline

#81 28-01-2009 18:41

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

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

to 3Doomer

Думаешь, я задаю этот вопрос, потому что так легко получить. Я перепробовал все способы ешё год назад, тут только с памятью можно пошаманить, поэтому и задаю вопрос именно у вас на форуме. Seemann наверно слишком занят, чтоб искать нужный адрес. Эти опкоды я уж во сне вижу. С существующими опкодами далеко не уйдешь, я вообще про опкоды говорю. Писать скрипты с ними фигня, долго но можно. Я с ними провозился с 2005 года когда васька темой была. Не буду же я писать 100 сообщений с просьбой, сделайте полезные опкоды через asi библиотеку типа GTA SA в Vice City, когда всем ясно, что она прошлое к моему огромному сожалению, тем более сейчас, когда четверка на носу. Поэтому хоть с San Andreas-ом реально help-аните. wink


I know everything and nothing...

Offline

#82 28-01-2009 19:08

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

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

Четвёрка не на носу уже давно)))) Её по 100 раз прошли))



Этих опкодов, которые я перечислил, хватало в любых модах =\
Что же ты такого делаешь, что тебе мало?????7<_<


GIMS developer

Offline

#83 28-01-2009 19:55

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

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

А ты сам можешь проверить эти опкоды с Ped_event 31, что получилось? Уверен что нет, да к тому же после применения этих опкодов актеров необходимо remove_reference делать иначе они память забивают!


I know everything and nothing...

Offline

#84 28-01-2009 21:27

Seemann
Registered: 07-08-2006
Posts: 2,156

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

Попробуй это

// get target ped ptr
0A8D: 0@ = read_memory 0xB6F3B8 size 4 virtual_protect 0
inc(0@, 0x79C)
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0        
if
    0@ > 0
then
    // convert ped ptr to handle
    0A8D: 8@ = read_memory 0x00B74490 size 4 virtual_protect 0
    0AA8: call_function_method 0x4442D0 struct 8@ num_params 1 pop 0 0@ 1@
    if
        056D:   actor 1@ defined
    then
        // actor in 1@ now
    end
end

я совместил код этого и этого скрипта. Прицеливаешься правой кнопкой на актера и он у тебя в переменной 1@. Сам не проверял, но должно работать.

Offline

#85 29-01-2009 06:18

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

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

Большое спасибо Seemann. good

К сожалению тест этого скрипта показывает, что при загрузке сохранения игра вылетает, при новой нормально. Естественно я добавил проверки Player.Defined($PLAYER_CHAR) и not Actor.Driving($PLAYER_ACTOR).

После этих опкодов

0A8D: 0@ = read_memory 0xB6F3B8 size 4 virtual_protect 0
inc(0@, 0x79C)

Вот здесь происходит ошибка

0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0

Возможно адрес меняется или inc необходимо другой. Если адрес меняется, получается что при сохранении он каждый раз новый, черт.

Как же быть? Прошу еще раз помочь PLEASE wink


I know everything and nothing...

Offline

#86 29-01-2009 06:22

Seemann
Registered: 07-08-2006
Posts: 2,156

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

Попробуй

0A8D: 0@ = read_memory 0xB6F3B8 size 4 virtual_protect 0
if
  0@ >0
then
inc(0@, 0x79C)
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
end

Offline

#87 29-01-2009 07:11

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

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

Слушай Seemann ты выручил. Я пишу скрипты но использую только опкоды, раньше еще можно было где то достать asi библиотеки для GTA-шек. Писали какие-то западные программеры. А когда я стал юзать вашу программу (где то с 2007) Sanny Builder, понял что видимо ничего лучше уже нибудет для GTA 3, Vice, San. А там у вас и клео еще в добавок, вы расширили возможности опкодов. Но к сожалению я не опытный программист, так кое чего знаю. Времени нет на изучение тонкостей, немного другая область знаний. Да cry , хотелось бы писать свои опкоды через плагин.

А вообще спасибо за терпение. wink

Кстате почему бы вам знатокам не написать отдельные опкоды по этой теме. Я так просмотрел форум, есть ряд интересных функций получения актера, тачки, объекта разными способами. Серьезно игровые опкоды урезаны по возможностям, как я уже писал, например, выбирают не все типы actor, не все тачки, только не созданные опкодами. Очень полезный опкод это 0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@, но этого недостаточно. Например, опкод получения любого актера, тачки, объекта в точке с радиусом с определенным типом, моделью можно написать, или тот же 0AB5: расширить и объект добавить.

И еще раз спасибо good


I know everything and nothing...

Offline

#88 13-02-2009 06:57

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

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

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

Помогите, очень прошу.;-)


I know everything and nothing...

Offline

#89 04-05-2009 15:30

ZEvS
Registered: 18-04-2009
Posts: 9

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

mfisto wrote:

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

Помогите, очень прошу.;-)

в общем делаешь поиск с мальньким радиусом 6-7 , поиск найдет ближайшую тачу к игроку (в которую он и сядет если двери открыты...)


PS:можно ли модифицировать код для поиска пикапов?

Last edited by ZEvS (10-05-2009 11:42)

Offline

#90 24-06-2009 15:57

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

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

я тут ничего не понял с интерсептором(((

мне надо чтобы в переменную записался объект, в который целится игрок=( или хотябы через поиск в коордах 1@ 2@ 3@

заняты переменные 0@ и 4@, а в 8@ надо записать объект...памагиите плиииз!!!!!:cry::cry:

Last edited by 3Doomer (24-06-2009 16:38)


GIMS developer

Offline

#91 07-10-2009 20:39

_Luft_
Registered: 01-06-2009
Posts: 25

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

вообще запись в хендл актеров, тачек и объектов может пригодится для написания скриптов, работающих в samp (телепорт к игроку, сесть в тачку  и тд.) все зависит от смекалки скриптера smile

Offline

#92 08-10-2009 17:32

PIT
Registered: 08-09-2008
Posts: 224

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

3Doomer wrote:

я тут ничего не понял с интерсептором(((

мне надо чтобы в переменную записался объект, в который целится игрок=( или хотябы через поиск в коордах 1@ 2@ 3@

заняты переменные 0@ и 4@, а в 8@ надо записать объект...памагиите плиииз!!!!!:cry::cry:

объект?? я искал способы чисто для педов, не нашёл а для объектов это ещё сложнее smile


100 постов - 27 августа;

Offline

#93 28-11-2009 11:16

GTASA
Registered: 13-09-2008
Posts: 476

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

Seemann, мне нужно при поиске актера/тачки использовать некоторые проверки. То есть проверять не после того, как актера/тачку нашли, а прямо в самом поиске, чтобы если условия были неверны, начинался поиск другого актера/тачки. Куда можно вставить собственные условия, или где можно создать свой блок условий?

Я уже ставил их в блоке AIC_TESTACTORHANDLE, но почему-то в игре были всяческие ошибки и вылеты, но не всегда.

Offline

#94 28-11-2009 12:04

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

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

Вот смотри:


:AIC_GETACTOR
0006: 16@ = 305868
0006: 5@ = @AIC_TESTACTORHANDLE
0006: 6@ = 1988
0002: jump @AIC_STARTSEARCH 

:AIC_GETVEHICLE
0006: 16@ = 305869
0006: 5@ = @AIC_TESTVEHICLEHANDLE
0006: 6@ = 2584
0006: 8@ = -1
0256:   player $PLAYER_CHAR defined
004D: jump_if_false @AIC_STARTSEARCH 
00DF:   actor $PLAYER_ACTOR driving
004D: jump_if_false @AIC_STARTSEARCH
03C0: 8@ = actor $PLAYER_ACTOR car
0002: jump @AIC_STARTSEARCH

:AIC_GETOBJECT
0006: 16@ = 305871
0006: 5@ = @AIC_TESTOBJECTHANDLE
0006: 6@ = 412

:AIC_STARTSEARCH
008B: 16@ = &0(16@,1i) // CPool*
0AB1: call_scm_func @AIC_READMEMOFFSET 2 ( 16@ + 8 )^ = 7@  // CPool.Size
0A8D: 11@ = read_memory 16@ size 4 virtual_protect 0        // CPool.pUnits
0006: 9@ = -1 
0006: 10@ = 0

:AIC_SEARCHLOOPMAIN
0AB1: call_scm_func @AIC_READMEMOFFSET 2 ( 11@ + 20 )^ = 4@  // xyz*
8039:   not  4@ == 0 
004D: jump_if_false @AIC_SEARCHLOOPNEXT 
0AB1: call_scm_func @AIC_READMEMOFFSET 2 ( 4@ + 48 )^ = 12@  // x
0AB1: call_scm_func @AIC_READMEMOFFSET 2 ( 4@ + 52 )^ = 13@  // y
0AB1: call_scm_func @AIC_READMEMOFFSET 2 ( 4@ + 56 )^ = 14@  // z
050A: 15@ = distance_between_XYZ 0@ 1@ 2@ and_XYZ 12@ 13@ 14@ 
0025:   3@ > 15@ // (float) 
004D: jump_if_false @AIC_SEARCHLOOPNEXT 
0085: 9@ = 10@ // (int) // counter
0AB1: call_scm_func @AIC_READMEMOFFSET 2 ( 16@ + 4 )^ = 4@ // CPool.flags
005A: 4@ += 9@ // (int) 
0A8D: 4@ = read_memory 4@ size 1 virtual_protect 0 
0012: 9@ *= 256 
005A: 9@ += 4@ // (int)
0002: jump 5@

:AIC_TESTVEHICLEHANDLE
056E:   is 9@ valid_vehicle_handle
004D: jump_if_false @AIC_NOHANDLE
00D6: if or
003B:   8@ == 9@ // (int) 
0119:   car 9@ wrecked 
004D: jump_if_false @AIC_NEWSEARCHRADIUS
0002: jump @AIC_NOHANDLE

:AIC_TESTACTORHANDLE
056D:   is 9@ valid_actor_handle
004D: jump_if_false @AIC_NOHANDLE 
00D6: if or
003C:   $PLAYER_ACTOR == 9@ // (int) 
0118:   actor 9@ dead 
004D: jump_if_false @AIC_NEWSEARCHRADIUS
0002: jump @AIC_NOHANDLE

:AIC_TESTOBJECTHANDLE
83CA:   not object 9@ exists 
004D: jump_if_false @AIC_NEWSEARCHRADIUS

:AIC_NOHANDLE
0006: 9@ = -1 
0002: jump @AIC_SEARCHLOOPNEXT 

:AIC_NEWSEARCHRADIUS    
//                                             +вот здесь делай проверки дополнительные+
//                                             +если проверки не проходят значит jf @AIC_SEARCHLOOPNEXT +
0085: 3@ = 15@ 

:AIC_SEARCHLOOPNEXT 
005A: 11@ += 6@ // (int) 
000A: 10@ += 1 
002D:   10@ >= 7@ // (int)
004D: jump_if_false @AIC_SEARCHLOOPMAIN
0051: return 

:AIC_READMEMOFFSET
0A8E: 0@ = 0@ + 1@ // int
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
0AB2: ret 1 0@

I know everything and nothing...

Offline

#95 19-12-2009 21:02

FLEXO
Registered: 19-12-2009
Posts: 2

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

Seemann wrote:

Код перебирает всех актеров поочередно и если он находится в радиусе, делает его позицию эталонной. Это для того, чтобы найти именно ближайшего актера. Если нужно найти любого актера в данном радиусе (необязательно ближайшего к игроку), нужно поставить return после AIC_NEWSEARCHRADIUS

Я пытаюсь находить машины в поле зрения. Я поставил return после AIC_NEWSEARCHRADIUS, и после gosub @AIC_GETVEHICLE сделал проверку 02CA:   car 9@ bounding_sphere_visible. Машину в поле видения он находит, но находит всегда одну и ту же, пока её не станет в радиусе или просто не станет. Если от этой машины отвернуться, других машин он не находит. Мне надо чтоб скрипт начинал искать другую машину. Самому это сделать не удалось sad Помогите плз

Offline

#96 19-12-2009 22:14

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

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

@FLEXO

Внимательнее просмотри мой предыдущий пост.


I know everything and nothing...

Offline

#97 19-12-2009 23:28

FLEXO
Registered: 19-12-2009
Posts: 2

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

Спасиб, теперь работает.

Offline

#98 20-12-2009 10:41

GTASA
Registered: 13-09-2008
Posts: 476

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

Скажите, как сделать, чтобы актеры искались вне моей машины? То есть, чтобы если у меня в транспорте имелись пассажиры, они были пропущены при поиске? Я сделал проверку, чтобы если найденный актер был в транспорте, то он стирался и шел поиск заного. Но тогда у меня вообще перестает искать кого-либо. Пожалуйста, помогите! Записывать пассажира(ов) в переменные, в моем случае, никак нельзя. Может подскажите запасной вариант?

Offline

#99 20-12-2009 16:29

Gyr
From: Серпухов
Registered: 03-02-2009
Posts: 246
Website

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

Я сделал проверку, чтобы если найденный актер был в транспорте, то он стирался и шел поиск заного. Но тогда у меня вообще перестает искать кого-либо.

Значит проверку неправильно оформил, либо поставил не в том месте. Если ты используешь Interceptor , то проблема может заключаться в том, что он ищет ближайшего к тебе актера, а он тебе не нужен т.к. сидит в машине. Поэтому

Seemann wrote:

Если нужно найти любого актера в данном радиусе (необязательно ближайшего к игроку), нужно поставить return после AIC_NEWSEARCHRADIUS


Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!

Offline

#100 20-12-2009 19:13

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

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

Так используй interceptor через call_scm, тогда можно будет внутри использовать любые переменные.
И да, насчет вложенности call_scm, если это напрягает сделай внутренние interceptor' ские call_scm через gosub, поверь переменных тебе вполне хватит для этого.


I know everything and nothing...

Offline

Board footer

Powered by FluxBB