You are not logged in.
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
Слушайте господа как записать в переменную хендл актера на которого наставлена пушка игроком или актером
Посмотри эту тему на всякий случай
http://sannybuilder.com/forums/viewtopic.php?id=45
Offline
Слушайте господа как записать в переменную хендл актера на которого наставлена пушка игроком или актером
Посмотри эту тему на всякий случай
http://sannybuilder.com/forums/viewtopic.php?id=45
Да, да, все ясно, но можно оформить получение хендла в виде cleo, к тому же я не очень то силен в правильной интерпретации кода.
I know everything and nothing...
Offline
Я уж измучался, помогите а? Поизучал скрипт Seemann но там нет получения хендла, там сразу здоровье и модель цели. А мне надо именно хендл, а тот способ который описал 3Doomer не дает верный результат т.к. может зациклиться на каком то одном актере, а также переберает толко типы 4 и 5, а копов и актеров, созданных в миссиях не берет.
I know everything and nothing...
Offline
Почему это только типы 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
to 3Doomer
Думаешь, я задаю этот вопрос, потому что так легко получить. Я перепробовал все способы ешё год назад, тут только с памятью можно пошаманить, поэтому и задаю вопрос именно у вас на форуме. Seemann наверно слишком занят, чтоб искать нужный адрес. Эти опкоды я уж во сне вижу. С существующими опкодами далеко не уйдешь, я вообще про опкоды говорю. Писать скрипты с ними фигня, долго но можно. Я с ними провозился с 2005 года когда васька темой была. Не буду же я писать 100 сообщений с просьбой, сделайте полезные опкоды через asi библиотеку типа GTA SA в Vice City, когда всем ясно, что она прошлое к моему огромному сожалению, тем более сейчас, когда четверка на носу. Поэтому хоть с San Andreas-ом реально help-аните.
I know everything and nothing...
Offline
Четвёрка не на носу уже давно)))) Её по 100 раз прошли))
Этих опкодов, которые я перечислил, хватало в любых модах =\
Что же ты такого делаешь, что тебе мало?????7<_<
GIMS developer
Offline
А ты сам можешь проверить эти опкоды с Ped_event 31, что получилось? Уверен что нет, да к тому же после применения этих опкодов актеров необходимо remove_reference делать иначе они память забивают!
I know everything and nothing...
Offline
Попробуй это
// 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
Большое спасибо Seemann.
К сожалению тест этого скрипта показывает, что при загрузке сохранения игра вылетает, при новой нормально. Естественно я добавил проверки 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
I know everything and nothing...
Offline
Попробуй
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
Слушай Seemann ты выручил. Я пишу скрипты но использую только опкоды, раньше еще можно было где то достать asi библиотеки для GTA-шек. Писали какие-то западные программеры. А когда я стал юзать вашу программу (где то с 2007) Sanny Builder, понял что видимо ничего лучше уже нибудет для GTA 3, Vice, San. А там у вас и клео еще в добавок, вы расширили возможности опкодов. Но к сожалению я не опытный программист, так кое чего знаю. Времени нет на изучение тонкостей, немного другая область знаний. Да , хотелось бы писать свои опкоды через плагин.
А вообще спасибо за терпение.
Кстате почему бы вам знатокам не написать отдельные опкоды по этой теме. Я так просмотрел форум, есть ряд интересных функций получения актера, тачки, объекта разными способами. Серьезно игровые опкоды урезаны по возможностям, как я уже писал, например, выбирают не все типы actor, не все тачки, только не созданные опкодами. Очень полезный опкод это 0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@, но этого недостаточно. Например, опкод получения любого актера, тачки, объекта в точке с радиусом с определенным типом, моделью можно написать, или тот же 0AB5: расширить и объект добавить.
И еще раз спасибо
I know everything and nothing...
Offline
Тут созрел еще один вопрос как получить преременную тачки в которую актер или игрок хочет сесть? Т.е например нажал "сесть выйти из тачки" и, если тачка близко, то игрок обычно бежит и пытается в нее сесть. Получается, нужно перехватить тачку, пока он в нее не сел.
Помогите, очень прошу.;-)
I know everything and nothing...
Offline
Тут созрел еще один вопрос как получить преременную тачки в которую актер или игрок хочет сесть? Т.е например нажал "сесть выйти из тачки" и, если тачка близко, то игрок обычно бежит и пытается в нее сесть. Получается, нужно перехватить тачку, пока он в нее не сел.
Помогите, очень прошу.;-)
в общем делаешь поиск с мальньким радиусом 6-7 , поиск найдет ближайшую тачу к игроку (в которую он и сядет если двери открыты...)
PS:можно ли модифицировать код для поиска пикапов?
Last edited by ZEvS (10-05-2009 11:42)
Offline
я тут ничего не понял с интерсептором(((
мне надо чтобы в переменную записался объект, в который целится игрок=( или хотябы через поиск в коордах 1@ 2@ 3@
заняты переменные 0@ и 4@, а в 8@ надо записать объект...памагиите плиииз!!!!!:cry::cry:
Last edited by 3Doomer (24-06-2009 16:38)
GIMS developer
Offline
вообще запись в хендл актеров, тачек и объектов может пригодится для написания скриптов, работающих в samp (телепорт к игроку, сесть в тачку и тд.) все зависит от смекалки скриптера
Offline
я тут ничего не понял с интерсептором(((
мне надо чтобы в переменную записался объект, в который целится игрок=( или хотябы через поиск в коордах 1@ 2@ 3@
заняты переменные 0@ и 4@, а в 8@ надо записать объект...памагиите плиииз!!!!!:cry::cry:
объект?? я искал способы чисто для педов, не нашёл а для объектов это ещё сложнее
100 постов - 27 августа;
Offline
Seemann, мне нужно при поиске актера/тачки использовать некоторые проверки. То есть проверять не после того, как актера/тачку нашли, а прямо в самом поиске, чтобы если условия были неверны, начинался поиск другого актера/тачки. Куда можно вставить собственные условия, или где можно создать свой блок условий?
Я уже ставил их в блоке AIC_TESTACTORHANDLE, но почему-то в игре были всяческие ошибки и вылеты, но не всегда.
Offline
Вот смотри:
: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
Код перебирает всех актеров поочередно и если он находится в радиусе, делает его позицию эталонной. Это для того, чтобы найти именно ближайшего актера. Если нужно найти любого актера в данном радиусе (необязательно ближайшего к игроку), нужно поставить return после AIC_NEWSEARCHRADIUS
Я пытаюсь находить машины в поле зрения. Я поставил return после AIC_NEWSEARCHRADIUS, и после gosub @AIC_GETVEHICLE сделал проверку 02CA: car 9@ bounding_sphere_visible. Машину в поле видения он находит, но находит всегда одну и ту же, пока её не станет в радиусе или просто не станет. Если от этой машины отвернуться, других машин он не находит. Мне надо чтоб скрипт начинал искать другую машину. Самому это сделать не удалось Помогите плз
Offline
Спасиб, теперь работает.
Offline
Скажите, как сделать, чтобы актеры искались вне моей машины? То есть, чтобы если у меня в транспорте имелись пассажиры, они были пропущены при поиске? Я сделал проверку, чтобы если найденный актер был в транспорте, то он стирался и шел поиск заного. Но тогда у меня вообще перестает искать кого-либо. Пожалуйста, помогите! Записывать пассажира(ов) в переменные, в моем случае, никак нельзя. Может подскажите запасной вариант?
Offline
Я сделал проверку, чтобы если найденный актер был в транспорте, то он стирался и шел поиск заного. Но тогда у меня вообще перестает искать кого-либо.
Значит проверку неправильно оформил, либо поставил не в том месте. Если ты используешь Interceptor , то проблема может заключаться в том, что он ищет ближайшего к тебе актера, а он тебе не нужен т.к. сидит в машине. Поэтому
Если нужно найти любого актера в данном радиусе (необязательно ближайшего к игроку), нужно поставить return после AIC_NEWSEARCHRADIUS
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
Так используй interceptor через call_scm, тогда можно будет внутри использовать любые переменные.
И да, насчет вложенности call_scm, если это напрягает сделай внутренние interceptor' ские call_scm через gosub, поверь переменных тебе вполне хватит для этого.
I know everything and nothing...
Offline