|
|
Модератор форума: СМЕРШ, Slon |
Форум РЕДАКТОР - ArmA 1 Вопрос-Ответ Скрипт десантирования - проблема. (Выпрыгивает только первый человек, остальные не хотят.) |
Скрипт десантирования - проблема. |
› Воскресенье
› 03.01.2010
› 03:59
› Сообщение #
Когда вертолет с 4-мя солдатами и 1 пилотом подлетает к определенной зоне, срабатывает следующий скрипт: (pl - игроки, para - парашюты)
moveOut pl1; vertik setDammage 1; para1 = "Parachute" createVehicle getPos vertik; para2 = "Parachute" createVehicle getPos vertik; para3="Parachute" createVehicle getPos vertik; para4 = "Parachute" createVehicle getPos vertik; pl1 setDammage 0; Принцип работы: Проблема: Выпрыгивает только первый юнит или игрок, играющий за первого юнита (командира), остальные остаются в вертолете, падают и разбиваются. Как исправить, чтобы выпрыгивали все и спускались на парашютах? |
› Воскресенье
› 03.01.2010
› 11:20
› Сообщение #
выпрыгнут все, ненужно торопиться взрывать вертолёт.
_cr = crew vertik; Сообщение отредактировал Slon - Воскресенье, 03.01.2010, 14:18
|
› Понедельник
› 04.01.2010
› 01:51
› Сообщение #
Quote {_x action ["eject", vertik]} forEach _cr; Можно поподробней, как работает эта строка? Что такое "_x"? |
› Понедельник
› 04.01.2010
› 03:05
› Сообщение #
В языке армы можно просто переводить команды и читать как обычный текст.
А если ещё не прогуливать математику и знать что такое переменная, то программа читается с лёгкостью. _cr = экипаж vertik; а вобщето всё тут описано Сообщение отредактировал Slon - Понедельник, 04.01.2010, 03:06
|
› Понедельник
› 04.01.2010
› 15:33
› Сообщение #
Quote (Slon) В языке армы можно просто переводить команды и читать как обычный текст. А если ещё не прогуливать математику и знать что такое переменная, то программа читается с лёгкостью. Я математику не прогуливал. К тому же я учусь на программиста на 3-м курсе. (С++) Т.е. переменная _х это идентификатор функции action ["eject", vertik] которая вызывается в цикле {_x setDamage 0} forEach _cr; для каждого элемента массива _cr? |
› Понедельник
› 04.01.2010
› 16:37
› Сообщение #
Вот наконецто видно грамотного человека.
_х это идентификатор функции {_x} forEach [] ; для каждого элемента массива []. Присутствие _х необязательно, размер кода неограничен, допустимы вложения. { _val = _x; { _x command _val; } forEach []; } forEach []; |
› Понедельник
› 04.01.2010
› 23:42
› Сообщение #
Все понятно. С этим разобрался. Это все работает при открытом вертолете. Но В моей миссии нужно так, чтобы он был закрыт, чтобы раньше времени никто не вздумал выпрыгнуть из живых игроков. Я использовал следующий скрипт:
Code vertik lockCargo false; unassignvehicle pl1; unassignvehicle pl2; unassignvehicle pl3; unassignvehicle pl4; moveOut pl1; moveOut pl2; moveOut pl3; moveOut pl4; vertik setDammage 1; vertik setDammage 0.95; pilot setDammage 1; ~0.5 para1 = "Parachute" createVehicle getPos vertik; ~0.01 para1 setpos getpos vertik; pl1 moveInDriver para1; ~0.5 para2 = "Parachute" createVehicle getPos vertik; ~0.01 para2 setpos getpos vertik; pl2 moveInDriver para2; ~0.5 para3="Parachute" createVehicle getPos vertik; ~0.01 para3 setpos getpos vertik; pl3 moveInDriver para3; ~0.5 para4 = "Parachute" createVehicle getPos vertik; ~0.01 para4 setpos getpos vertik; pl4 moveInDriver para4; pl1 setDammage 0; pl2 setDammage 0; pl3 setDammage 0; pl4 setDammage 0; Вроде бы все правильно, перед взрывом все выпрыгивают, вертолет взрывается и всем тут же восстанавливается здоровье. Но на деле в лучшем случае до земли долетают все или почти все раненые или даже некоторые убитые, даже не смотря на последние 4 строки кода. Вот тут мне решительно непонятно. Это наверное баг движка? |
› Понедельник
› 04.01.2010
› 23:58
› Сообщение #
Наверно стоит перед прыжком и взрывом сделать всех вессмертными.
pl1 allowDamage false; pl2 allowDamage false; pl3 allowDamage false; pl4 allowDamage false; а в конце вернуть смертность |
› Суббота
› 09.01.2010
› 02:11
› Сообщение #
Пытался сделать скрипт как ты сказал, но только немного изменил.
Code _cr = crew vertik; { _x action ["eject",vertik]; allowDamage false; } forEach _cr; sleep 2; pilot setDammage 1; vertik setDamage 1; { _x action ["eject",vertik]; allowDamage true; } forEach _cr; {_x setDamage 0} forEach _cr; А он не работает. Может его как-то надо вызвать особым образом? Как вообще его правильно вызывать в триггере? |
› Суббота
› 09.01.2010
› 07:29
› Сообщение #
{ _x action ["eject",vertik]; _x allowDamage false; } forEach _cr;
Надо указать кому безсмертие назначается. Отсутствие параметра считается ошибкой и скрипт прекращает работу. Поэтому дублировать строку совершенно безсмысленно. Если несработало сразу ищи ошибку, загляни в справочник. Проверяй последовательность действий. sleep 2; ещё проверь какой строкой запускаеш фаил. Сообщение отредактировал Slon - Суббота, 09.01.2010, 07:37
|
| |||
| |||
Чат сайта |