You are not logged in.
Такого вроде бы нет. Может быть это подойдет?
0470: 1@ = actor $PLAYER_ACTOR current_weapon - в переменную закидывается ID текущего оружия.
0491: actor $PLAYER_ACTOR has_weapon ID - проверка. Имеет ли игрок такое оружие.
Нажми Ctrl + Alt + 2 в проге и напиши там weapon. Все команды, связанные с оружием, там будут.
Offline
Смотри. Сделал для теста.
wait 0 :NONAME_4 wait 10 :NONAME_8 wait 0 Player.Defined($PLAYER_CHAR) else_jump @NONAME_8 :NONAME_18 wait 0 if and 00E1: player 0 pressed_key 10 //если нажаты клавиши 00E1: player 0 pressed_key 11 //Y+N else_jump @NONAME_3A jump @NONAME_41 :NONAME_3A jump @NONAME_18 :NONAME_41 wait 10 0470: 0@ = actor $PLAYER_ACTOR current_weapon //пробить ид оружия (по идее) 03FE: set_actor $PLAYER_CHAR money 0@ //установить значение денег на значение переменной, в которой хранился ид пушки jump @NONAME_4
Вылетает из игры)
Offline
Смотри. Сделал для теста.
wait 0 :NONAME_4 wait 10 :NONAME_8 wait 0 Player.Defined($PLAYER_CHAR) else_jump @NONAME_8 :NONAME_18 wait 0 if and 00E1: player 0 pressed_key 10 //если нажаты клавиши 00E1: player 0 pressed_key 11 //Y+N else_jump @NONAME_3A jump @NONAME_41 :NONAME_3A jump @NONAME_18 :NONAME_41 wait 10 0470: 0@ = actor $PLAYER_ACTOR current_weapon //пробить ид оружия (по идее) 03FE: set_actor $PLAYER_CHAR money 0@ //установить значение денег на значение переменной, в которой хранился ид пушки jump @NONAME_4Вылетает из игры)
Разумеется.
В 0@ вроде, храниться название модели, и вообще, это не очень хороший способ.
Offline
dragonforce, если при тестировании хочешь вывести параметр на ден. счет, то я бы предложил свой вариант:
{$CLEO} wait 0 while true wait 0 repeat wait 0 until Player.Defined($PLAYER_CHAR) repeat wait 0 until 00E1: player 0 pressed_key 11 // "Yes" button 010B: 0@ = player $PLAYER_CHAR money 0085: 1@ = 0@ // (int) 1@ *= -1 0109: player $PLAYER_CHAR money += 1@ 0470: 1@ = actor $PLAYER_ACTOR current_weapon 0109: player $PLAYER_CHAR money += 1@ end
В обычной игре "денежный" способ неудобен, поэтому можно просто выводить числа на экран циклом:
{$CLEO} wait 0 while true wait 10 repeat wait 0 until Player.Defined($PLAYER_CHAR) repeat wait 0 until 00E1: player 0 pressed_key 10 // No - показать номер оружия 0470: 0@ = actor $PLAYER_ACTOR current_weapon repeat wait 0 03F0: enable_text_draw 1 045A: draw_text_1number 10.0 10.0 GXT 'NUMBER' number 0@ until 00E1: player 0 pressed_key 11 // Yes - убрать номер оружия end
Last edited by Den_spb (03-10-2009 22:39)
Offline
Как можно определить транспорт другого игрока? Нужно, чтобы было "выделение цели". Можно как-нибудь отметить цель? Игрока. Маркером или лучше прицелом (как на гидре/Heat Seeker).
Думаю сделать, как в игре Blazing Angels. Будучи на самолёте, приметил себе цель, выделил цель (какой-нибудь кнопкой), нажал Shift, камера держится на цели (пока нажата клавиша Shift), в то же время игрок летит дальше, отпустил Shift - камеру кидает обратно на свой самолёт.
Знаю, есть такая тема:
00D9: 68@ = actor $PLAYER_ACTOR car
Запишет в переменную 68@ тачку игрока. А технику другого игрока можно залить в переменную?
Offline
Хм. Мне для мультиплеера.
Как это можно сделать? Опкод есть?
Offline
Хм. Ну хоть намекни. Мне нужен транспорт, находящийся рядом, на виду. Значит должен быть какой-то опкод определения ближнего транспорта? Проверка на наличие водителя? Есть что-то такое?
Просто в поиске берётся тачка и только по ней определяется водитель.
0205: actor $PLAYER_ACTOR near_car 73@ radius 25.0 25.0 25.0 flag 0
Я так понимаю, проверка на нахождение рядом с игроком машины 73@ (рядом = radius 25.0 25.0 25.0). flag 0 - без понятия, что это)
Можно заменить 73@ на переменную "любая машина"? Типа $ANY_CAR (как пример).
Offline
-1 работает как любая машина, но данный опкод только сигнализирует то, что твой игрок рядом с машиной))
тебе надо искать машины в некотором радиусе от игрока и получать их хендл, для этого свои опкоды(сказать не могу)
GIMS developer
Offline
@3Doomer - Не издевайся над новичком!
@dragonforce - Есть клео опкод ( в саннике есть такая замечательная вещь, как справка) 0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@. В данном случае в переменную 0@ записывается ближайшая машина, а в 1@ - ближайший пед(прохожий).
Так же можешь воспользоваться скриптом The Interceptor
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
{$CLEO} :TEST wait 100 :EXISTS wait 10 Player.Defined($PLAYER_CHAR) jf @EXISTS :PRESS wait 10 0AB0: key_pressed 220 jf @PRESS 0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@
Игра по нажатию клавиши вылетает. SA:MP 0.2x
Проверил и в сингле. Там то же самое.
Last edited by dragonforce (25-10-2009 11:09)
Offline
Он хотел сделать поиск актера, как видно из скрипта. xD
А еще вылетает от того, что перед 0AB0 не написали if
Last edited by GTASA (25-10-2009 12:05)
Offline
Вы меня за идиота принимаете?!
Ясное дело, скрипт так заканчиваться не будет. Это как бы для теста. Был у меня скрипт, игра от него вылетала.
Переписал заново поэтапно и понял, что вылетает именно здесь.
Он хотел сделать поиск актера, как видно из скрипта. xD
А еще вылетает от того, что перед 0AB0 не написали if
Никогда не ставлю if в таких случаях, и всё прекрасно пашет:
:метка действие jf @метка то, что выполняется после действия, если оно всё же выполнилось
Уже много раз замечаю, что вылетает именно из-за store closest ped to 0@ closest vehicle to 1@.
Offline
Уже много раз замечаю, что вылетает именно из-за store closest ped to 0@ closest vehicle to 1@.
Всё правильно. Использовав этот опкод, надо поставить проверку, существует ли пед под именем 1@ (аналогично для тачки)
056D: actor 1@ defined
056E: car 0@ defined
Приблизительно скрипт будет выглядеть так:
:1 wait 0 if player.Defined($PLAYER_CHAR) jf @1 0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@ jump @2 :2 wait 0 if 056D: actor 1@ defined jf @3 // здесь проводятся действия над педом :3 wait 0 if 056E: car 0@ defined jf @1 // здесь проводятся действия над тачкой
Last edited by Gyr (25-10-2009 17:13)
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
Ну я точно знаю, что на сервере машины и игроки есть.
Зачем делать проверку? Для правильности? Пусть. НО:
скрипт определяет тачку/педа не в определённой области рядом с игроком, а вообще по всей карте. Как такой тачки/педа может не быть?
Повторюсь, вылетает сразу после 0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@, а не при попытке сделать с переменными что-либо.
Offline
Вот. Что-то типа такого было, только цвет маркера менялся во время игры по нажатию клавиши (там я садился в тачку и появлялся маркер, а тут надо просто на ближайшую тачку).
{$CLEO} :TEST wait 100 :EXISTS wait 10 Player.Defined($PLAYER_CHAR) jf @EXISTS :PRESS wait 10 0AB0: key_pressed 220 jf @PRESS 0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@ if 056E: car 0@ defined then 0186: 2@ = create_marker_above_car 0@ 0165: set_marker 2@ color_to 14 0168: set_marker 2@ size 3 end
Эффекта нету (точнее игра вылетает).
P.S. Подумал, что могут как-то влиять другие скрипты (их у меня до фига).
Удалил всё, кроме этого. Всё равно вылетает.
Last edited by dragonforce (25-10-2009 18:44)
Offline
Зачем делать проверку?
Надо дождаться, пока актер (или машина, или и то и другое - в зависимости от задачи) будет занесен в переменную, т.к. обращение к несуществующему актеру (машине, объекту...) 100 % влечет вылет.
Эффекта нету (точнее игра вылетает).
Скрипт (если он не зациклен)всегда должен иметь команду завершения 0A93:
А вот исправленный вариант
{$CLEO} :TEST wait 100 :EXISTS wait 10 Player.Defined($PLAYER_CHAR) jf @EXISTS repeat wait 0 until 0AB0: key_pressed 220 0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@ repeat wait 0 until 056E: car 0@ defined // ждем, пока машина не будет записана в переменную 0186: 2@ = create_marker_above_car 0@ 0165: set_marker 2@ color_to 14 0168: set_marker 2@ size 3 0a93:
Last edited by Den_spb (25-10-2009 18:51)
Offline
Отлично, Den_spb. Большое спасибо.
Вопрос. Раз маркер использует одну переменную (0186: 2@ = create_marker_above_car 0@) 2@, то почему создаются новые маркеры, а старые не удаляются?
Вопрос2. Как убрать маркер?) 0164: disable_marker 2@?
Вопрос3. Что такое 018B: set_marker 2@ radar_mode 2? Что ещё за мод радара? Сколько их? Какие? Где б надыбать подобную инфу? Часто возникают эти вопросы.
Offline
1) не удаляются, ибо не удалил опкодом(из вопроса 2).
а то, что лишил их референса - фигня
3) опытным путём. результаты наблюдений лучше выложи на форум(чтобы облегчить задачу другим)
Last edited by 3Doomer (25-10-2009 19:19)
GIMS developer
Offline
Вопрос3. Что такое 018B: set_marker 2@ radar_mode 2? Что ещё за мод радара? Сколько их? Какие? Где б надыбать подобную инфу? Часто возникают эти вопросы.
Радар_мод - это режим маркера: отображается и в игре (светящийся конус), и на карте; только на карте; только в игре и т.п. Соответствие режимов с их номерами можно легко установить тестированием. Я помню только, что режим 2 - отображение только на радаре (конуса нет).
Offline