Модератор форума: Slon |
Форум РЕДАКТОР - ArmA 2 Скрипты Вопросы по скриптописанию (Тонкости написания скриптов) |
Вопросы по скриптописанию |
› Понедельник
› 11.06.2012
› 10:43
› Сообщение #
|
› Понедельник
› 11.06.2012
› 15:01
› Сообщение #
Quote (DICS) {(alive _x) && (player distance _x < 15) && (side _x == west)} count allUnits > 0 Вставил эту строчку в условие к триггеру, в активацию: objNull = createVehicle ["Sh_125_HE", getPosATL h1, [], 0, "CAN_COLLIDE"] Взрывается через пару секунд на старте миссии. Что я не так делаю? Спасибо! |
› Понедельник
› 11.06.2012
› 15:32
› Сообщение #
|
› Понедельник
› 11.06.2012
› 15:59
› Сообщение #
Quote (DICS) Что тебе вообще нужно? Я делаю миссию с обороной города Заргабада, где кроме групп вооруженных талибов (сторона "GUER"), которые могут управляться любым игроком (респаун SIDE), есть группа шахидок (неуправляемые CIV) с командиром-шахидом (управляемый CIV). У них есть машина Волга (взрывается по активации радио Альфа). Мне нужно чтобы шахидки, подойдя к американцам "WEST" на указанное количество метров через задержку 1-3 секунды самостоятельно подрывались, то есть активировались на "синих". Естественно шахидками управляет (ставит метки маршрута, куда идти) игрок зашедший в слот командира-шахида. Также хотелось бы узнать, что можно прописать в активацию триггера, чтобы триггер по радио Альфа мог быть активирован только конкретным юнитом? Как то так... Также возникают затруднение по "чистке карты" от тел: Quote All_mas = allUnits; While {true} do { { if !(alive _x) then { _x Spawn {sleep 600; deleteVehicle _this}}; sleep 0.1; } forEach All_mas; sleep 1; if (ObjNull in All_mas) then {All_mas = All_mas - [ObjNull]}; }; Этот скрипт с этой темы. Он хорошо работает, но только на юнитах созданных в редакторе. А вот на динамически созданных скриптами - не работает. Хотелось бы скрипт работающий на всех. Это также может пригодится для миссий по "зачистке"селений от террористов, где не знаешь мирный житель он или террорист смертник. Я недавно начал изучать возможности скриптов, пытаюсь кое что понять, но без вашей помощи мне этого не добиться. Помогите (я уже неделю читаю три форума, не могу разобраться)??? Спасибо! Сообщение отредактировал Deni3 - Понедельник, 11.06.2012, 16:26
|
› Понедельник
› 11.06.2012
› 18:10
› Сообщение #
Синие тоже боты (не управляемые игроком) - это кооп. Да и то, делаю просто чтобы по сети со знакомым поиграть.
Если убили, просто заходишь за другого играбельного бота и продолжаешь, пока они (управляемые) не кончаться. У меня стоит Арма 2 СО - я кажется не в тот раздел обратился? Сообщение отредактировал Deni3 - Понедельник, 11.06.2012, 18:38
|
› Понедельник
› 11.06.2012
› 22:09
› Сообщение #
Quote (Deni3) Также возникают затруднение по "чистке карты" от тел: потому что в начале игры сохранил текущий состав и не коректируеш его. All_mas = allUnits; - это не надо делать. Вместо переменной используй allUnits тогда каждый раз будет проверяться текущий состав. для того чтобы радио тригире был виден только одному или некоторым, для них нужно дать текст тригеру а остальным вместо текста "NULL" http://community.bistudio.com/wiki/setRadioMsg |
› Понедельник
› 11.06.2012
› 23:52
› Сообщение #
Quote (Slon) потому что в начале игры сохранил текущий состав и не коректируеш его. All_mas = allUnits; - это не надо делать. Вместо переменной используй allUnits тогда каждый раз будет проверяться текущий состав. То что мне нужно!!! Quote While {true} do { { if !(alive _x) then { _x Spawn {sleep 300; deleteVehicle _this}}; sleep 0.1; } forEach allDead; sleep 1; if (ObjNull in allUnits) then {allUnits = allUnits - [ObjNull]}; }; Насколько это правильно грамматически не знаю, но ошибок скрипта не показывает. И работает! Удаляет убитых и уничтоженную технику в любых ее формах появления в миссии. Удаляет считая время смерти каждой единицы индивидуально. Мне как раз это было нужно. Знаю, что в карман не положишь, но огромное СПАСИБО! Quote (Slon) для того чтобы радио тригире был виден только одному или некоторым, для них нужно дать текст тригеру а остальным вместо текста "NULL" http://community.bistudio.com/wiki/setRadioMsg СПАСИБО! Сообщение отредактировал Deni3 - Вторник, 12.06.2012, 00:07
|
› Вторник
› 12.06.2012
› 00:16
› Сообщение #
эта строка не нужна
if (ObjNull in allUnits) then {allUnits = allUnits - [ObjNull]}; allUnits - не даёт пустых объектов. это не ошибка, просто бесполезное действо. в ОА патч 1.57 появилась команда которая сразу даёт список трупов allDead тут уже не нужно проверять, живой или нет. |
› Вторник
› 12.06.2012
› 00:26
› Сообщение #
Нужен скрипт, что бы лазерным маркером помечать цели, для наведения ракеты. Что то подобное в первой миссии операции красная жатва есть. Сам в скриптах особо не разбираюсь поэтому и обращаюсь за помощью. Отдельное спасибо, если миссия с примером будит.
|
› Вторник
› 12.06.2012
› 00:29
› Сообщение #
Quote (Slon) эта строка не нужна if (ObjNull in allUnits) then {allUnits = allUnits - [ObjNull]}; allUnits - не даёт пустых объектов. это не ошибка, просто бесполезное действо. в ОА патч 1.57 появилась команда которая сразу даёт список трупов allDead тут уже не нужно проверять, живой или нет. То есть скрипт такой получается: Quote While {true} do { { if !(alive _x) then { _x Spawn {sleep 300; deleteVehicle _this}}; sleep 0.1; } forEach allDead; В общем я пришел к выводу, что технику нужно удалять отдельным скриптом - время удаления ставить больше. Slon , подскажи пожалуйста, какой параметр подойдет в этот скрипт отдельно для юнитов и отдельно для техники? П.С. Для техники это параметр Vehicles: Quote While {true} do { { if !(alive _x) then { _x Spawn {sleep 300; deleteVehicle _this}}; sleep 0.1; } forEach Vehicles; Теперь нужен параметр для юнитов? П.С. Сам себе начал отвечать на вопросы. Это хороший знак! Для юнитов (не техники) это параметр AllUnits: Quote While {true} do { { if !(alive _x) then { _x Spawn {sleep 300; deleteVehicle _this}}; sleep 0.1; } forEach AllUnits; Сообщение отредактировал Deni3 - Вторник, 12.06.2012, 01:52
|
› Вторник
› 12.06.2012
› 02:57
› Сообщение #
В общем, как теперь два эти скрипта заставить работать?
Писать в инит: script = [] execVM "Delete_unit.sqf"; script = [] execVM "Delete_tehnika.sqf"; где в "Delete_unit.sqf": Quote While {true} do { { if !(alive _x) then { _x Spawn {sleep 300; deleteVehicle _this}}; sleep 0.1; } forEach AllUnits; }; и в "Delete_tehnika.sqf": Quote While {true} do { { if !(alive _x) then { _x Spawn {sleep 600; deleteVehicle _this}}; sleep 0.1; } forEach Vehicles; }; или можно все это в один файл? П.С. Два эти срипта вместе плохо работают, - то удаляют то нет. Наверное я где то ошибаюсь в инит начиная инициализацию двух скриптов в одинаковых названий script = [] execVM...? И еще может влияет время sleep на нормальную работу скрипта. В смысле, для теста, я использовал малое время, и может движок не успевал обрабатывать эту информацию? Ставил от 3 - 5 секунд. На карте во время проверки было около 80 юнитов. Наверное проще все таки, в плане производительности, обойтись одним скриптом, который удаляет все? Quote While {true} do { { if !(alive _x) then { _x Spawn {sleep 600; deleteVehicle _this}}; sleep 0.1; } forEach allDead; Сообщение отредактировал Deni3 - Вторник, 12.06.2012, 06:04
|
› Вторник
› 12.06.2012
› 11:56
› Сообщение #
|
› Вторник
› 12.06.2012
› 18:40
› Сообщение #
Эту запись можно как-то сократить через массивы, улучшить?
Quote // Первый МРАП _car = createvehicle ["MaxxM2", getMarkerPos"MaxxM2_1", [], 0, "None"]; _car setDir 270; // Экипаж _gr = createGroup West; _un = _gr createunit ["US_Soldier_Crew_EP1", getPos _car, [], 0, "None"]; _un moveInDriver _car; _un1= _gr createunit ["US_Soldier_Crew_EP1", getPos _car, [], 0, "None"]; _un1 moveingunner _car; // Пассажиры _un2= _gr createunit ["US_Soldier_SL_EP1", getPos _car, [], 0, "None"]; _un2 moveInCargo _car; _un3= _gr createunit ["US_Soldier_TL_EP1", getPos _car, [], 0, "None"]; _un3 moveInCargo _car; _un4= _gr createunit ["US_Soldier_GL_EP1", getPos _car, [], 0, "None"]; _un4 moveInCargo _car; _un5= _gr createunit ["US_Soldier_AR_EP1", getPos _car, [], 0, "None"]; _un5 moveInCargo _car; _un6= _gr createunit ["US_Soldier_AT_EP1", getPos _car, [], 0, "None"]; _un6 moveInCargo _car; _un7= _gr createunit ["US_Soldier_TL_EP1", getPos _car, [], 0, "None"]; _un7 moveInCargo _car; _un8= _gr createunit ["US_Soldier_GL_EP1", getPos _car, [], 0, "None"]; _un8 moveInCargo _car; _un9= _gr createunit ["US_Soldier_AR_EP1", getPos _car, [], 0, "None"]; _un9 moveInCargo _car; _un10= _gr createunit ["US_Soldier_AAR_EP1", getPos _car, [], 0, "None"]; _un10 moveInCargo _car; // Второй МРАП _car1 = createvehicle ["MaxxM2", getMarkerPos"MaxxM2_1", [], 0, "None"]; _car1 setDir 270; // Экипаж _un11 = _gr createunit ["US_Soldier_Crew_EP1", getPos _car1, [], 0, "None"]; _un11 moveInDriver _car1; _un12= _gr createunit ["US_Soldier_Crew_EP1", getPos _car1, [], 0, "None"]; _un12 moveingunner _car1; sleep 5; hint "MaxxM2_1"; _un1 move getMarkerPos"marker_1"; Если команда getPos _car это размещение юнита внутрь машины, то какая команда будет на перемещение наружу (около) нее? Как мне заставить юнитов вылезть из машины и следовать пешком? Спасибо! Кстати, совсем не понятно чем автор модели "MaxxM2" руководствовался, когда сделал невозможным пересадку со стрелка на пассажира. Или только через выход из машины. Это можно как то изменить? Сообщение отредактировал Deni3 - Вторник, 12.06.2012, 19:59
|
› Среда
› 13.06.2012
› 01:55
› Сообщение #
Здравствуйте. Сам я не очень силен в скриптах(вообще ноль) и мне требуется помощь. Как заспавнить технику рядом с плеером в мультиплеере? Я использовал скрипт
Code _abox = createVehicle ["GRAD_RU", position player, [], 0, "NONE"]; if (false) exitWith {}; Как мне сделать так, чтоб при посадке в машину взрыва не происходило? |
| |||
Чат сайта |