Модератор форума: Slon |
Форум » РЕДАКТОР - ArmA 2 » Скрипты » Вопросы по скриптописанию (Тонкости написания скриптов) |
Вопросы по скриптописанию |
› Суббота
› 30.11.2013
› 05:04
› Сообщение #
1. запись - units group _un
это масло масленое. достаточно units _un но лучше gr_1 = group _un; units gr_1 http://community.bistudio.com/wiki/units Есть ещё одна конструкция count {alive _x} count (units _un) > 0 или {alive _x} count (units gr) > 0 |
› Суббота
› 30.11.2013
› 13:09
› Сообщение #
IvanCap, прописать в инит технике: player action ["lightOn", this]
|
› Воскресенье
› 08.12.2013
› 18:51
› Сообщение #
Привет всем как сделать чтоб юнит перестал играть animation когда идет бой?
|
› Воскресенье
› 08.12.2013
› 18:53
› Сообщение #
Нужна помощь по логике. Сам скрипт объемный, но по сути:
_target = _un1 nearTargets 800; {_un2 reval [_x, 4]} forEach _target; if (_un distance _target select 0 < 500) then { _i = 0; _j = count _target; while {_i <_j] do { _un2 doTarget _target select _i; sleep 1; _un doFire _target select _i; }; }; Как записать чтобы набор целей и уничтожение целей из этого списка происходили циклично? |
› Воскресенье
› 08.12.2013
› 19:03
› Сообщение #
mi24, если включить анимацию командой
http://community.bistudio.com/wiki/switchMove _unit switchMove "FXStandDip" то выключит её можно _unit switchMove "" Добавлено (08.12.2013, 19:03) |
› Воскресенье
› 08.12.2013
› 20:07
› Сообщение #
спс Slon но есть еще один вопрос допустим юнит бросил свою анимацию когда был бой потом можно сделать так чтоб он опять вернулся и снова включил анимацию на прежнем месте?
|
› Воскресенье
› 08.12.2013
› 23:13
› Сообщение #
mi24, сохрани координаты этого места.
_pos = getPos _unit; потом вернись _unit Move _pos; надо дождаться пока дойдёт WaitUntil {_unit distance _pos < 3}; тут и включай анимацию _unit SwitchMove "Animka"; |
› Понедельник
› 09.12.2013
› 00:03
› Сообщение #
Slon,спасибо конешно но я в скриптах почти темный лес mission example есть?
|
› Понедельник
› 09.12.2013
› 07:32
› Сообщение #
Slon, я поспешил и ошибся. Дело не в nearTargets, таким образом я хотел описать массив целей. Смысл в другом. Если более подробно, то по задумке все видимые солдатами группы цели объединяются в массив, который обновляется каждые несколько секунд. Этот массив передается БМП для уничтожения. Само уничтожение длится, пока живы цели, т.е. больше того отрезка времени, через который обновится массив целей.
Теперь сам вопрос: куда прописывать команды уничтожения - в цикл набора целей или выносить вне его? Понимаю, что запутанно объясняю, но может поможет пример: Прикрепления:
bmp.sqf
(2.1 Kb)
|
› Понедельник
› 09.12.2013
› 12:00
› Сообщение #
1
Сканер лучше использовать - nearEntities - http://community.bistudio.com/wiki/nearEntities даёт список только живых, также на ней можно повесит разбор сторон воставив в фильтр верхние в иерархии роли SoldierWB SoldierEB SoldierGB Civilian для техники будет немого сложней. 2 При сканировании надо проверят видимость цели http://community.bistudio.com/wiki/lineIntersects тех кто спрятался из массива нужно вычесть зы. продолжение следует |
› Четверг
› 12.12.2013
› 01:22
› Сообщение #
Долго думал над этим вариантом, но - не согласен. nearEntities - вернет всех живых вокруг бойца, lineIntersects - определит возможно ли увидеть этих живых. Работа этих команд не определит увидел ли боец цели, а просто покажет возможность увидеть. Я думаю, что для реалистичности действа эти команды не подходят.
Так-же вопрос о расположении команд уничтожения остается открытым. |
› Четверг
› 12.12.2013
› 07:34
› Сообщение #
nearTargets - покажет тех кого боец увидел до 10 минут как они уже удрали.
Цитата вернёт всех живых вокруг бойца в этой зоне если можно кого увидеть, обязательно увидит. _ps = getPosASL Boec; _dr = getDir Boec; _ps_skan = [(_ps select 0)+ 200 * sin _dr, (_ps select 1)+ 200 * cos _dr]; _list = _ps_skan nearEntities ["Man", 50]; { if (lineIntersects [_ps, getPosASL _x]) then {_list = _list - [_x]}; } forEach _list; вот и остались только те кто не спрятался, потом убрать тех кто лежит, и выстроить по порядку опасности. можно провести сканирование несколько раз с Увеличением дистанции и радиуса с особыми проверками каждого скана. например, в ближнем №1 видим всех в №2 не видим лежачих, в №3 пригнувшихся. итд. Теперь о команде на уничтожение. нужно ли. стрелять в кого то пока не добъёт, или делать по 1-2 выстрела в каждого постоянно переводя огонь? Делать ли выстрел только при точном наведении. |
› Четверг
› 12.12.2013
› 11:31
› Сообщение #
Slon, интересно...
А как определить Цитата по порядку опасности И не приведет ли этот вариант расположения команд к усложнению скрипта, ведь этот цикл будет проигран для всех бойцов группы. Тут я хочу объяснить свою позицию: я не критикую предложенный вариант и не защищаю свой. Хотелось бы получить простую и изящную логическую конструкцию, которая бы не сильно нагружала комп. Об уничтожении: В целом этот скрипт нужен для описания обороны отделения. Ситуация: наступает противник. Танки и БМП впереди, пехота - сзади. Любой прорыв хотя бы одного танка - это уничтожение отделения. Armовский "Камыш" не способен быстро уничтожить танк, поэтому я предложил хотя бы танк остановить. Согласен, что пока "Камыш" останавливает один танк, другой может спокойно доехать до позиции отделения. Но какой другой вариант?... И к началу вопроса. Куда располагать команды уничтожения? При тестировании почти нет разницы где расположены команды внутри цикла или вне его. Может просто установить setBehaviour "COMBAT" для "Камыша" и все? |
› Понедельник
› 16.12.2013
› 10:54
› Сообщение #
Добрый день. Помогите пожалуйста разобраться со скриптом удаления техники.Я знаю, что можно сделать так:
vehicle = nearestObjects [player, ["Car","Air"], 100000]; { deletevehicle _x } forEach _vehicle; А как сделать, чтобы уничтожение происходило не в радиусе, а в неком квадрате заданном координатами? То есть [0,03,02,03] где: 0 - Y1 03 - X1 02 - Y2 03 - X2Спасибо! Сообщение отредактировал -=Dark=- - Понедельник, 16.12.2013, 10:55
|
› Понедельник
› 16.12.2013
› 15:12
› Сообщение #
сканируеш также круг, а потом проверяеш выход за габарит
X1 - лево X2 - право Y1 - верх Y2 - низ (_px < X1 or _px > X2) - будет истинно если правей или левей (_py > Y1 or _py < Y2) - будет истинно если выше или ниже Код vehicle = nearestObjects [Центр квадрата, ["Car","Air"], половина гипотенузы]; { _ps = getPos _x; _px = _ps select 0; _py = _ps select 1; if ! ((_px < X1 or _px > X2) AND (_py > Y1 or _py < Y2)) then {deletevehicle _x }; } forEach _vehicle; |
| |||
Чат сайта |