Модератор форума: Slon |
Форум » РЕДАКТОР - ArmA 2 » Скрипты » Вопросы по скриптописанию (Тонкости написания скриптов) |
Вопросы по скриптописанию |
› Суббота
› 24.08.2013
› 09:25
› Сообщение #
перехвати снаряд и пока он жив фиксируй координаты.
|
› Суббота
› 24.08.2013
› 16:08
› Сообщение #
Снаряд перехватывал:
_snaryad = nearestObject [ _Gb, ["Sh_122_HE"]]; Пробовал: while {alive _snaryad} do {_ps = getPosASL _snaryad}; - не выходит; if (isNull _snaryad) then {_ps = getPosASL _snaryad}; - не выходит. Пробовал в момент смерти снаряда создать новый объект и определить уже его координаты: _snaryad addEventHandler ["Killed", {_sn = "AH1Z" CreateVehicle (position _snaryad)}]; _ps = get PosASL _sn; - не выходит (в данном случае какой объект создавать - не принципиально). |
› Суббота
› 24.08.2013
› 16:33
› Сообщение #
|
› Суббота
› 24.08.2013
› 20:45
› Сообщение #
Простите, уважаемый Slon, а вот этот "playerKilled.sqs" это чиво такое? Порылся в интернете - объяснений не нашел. Есть мысль что это какой-то встроенный разработчиками скрипт, но что он делает - непонятно. В любом случае, у меня не сработало.
P.S. Добавлю, что стреляет не player, а бот. P.P.S. Есть ли список скриптов, работающих с addEventHandler, с описанием их работы? |
› Суббота
› 24.08.2013
› 21:08
› Сообщение #
Цитата (Индеец) "playerKilled.sqs" ид = объект AddEventHandler [тип, {команды}] встроены тут разные события которые контролируются обработчиком. тип "Fired" назначается технике, в момент выстрела выполняется блок команд, в который в переменной _this передаётся инфа [unit, weapon, muzzle, mode, ammo, magazine, projectile] [единица, оружие, морда, режиме, патроны, журнал, снаряд] _this select 6 - это снаряд |
› Суббота
› 24.08.2013
› 22:22
› Сообщение #
Я настойчивый.
То есть, как я понял, неважно какой скрипт или команду я укажу переменной _this, главное, что я намалевал ее? Но какой скрипт писать в моей миссии, в котором участвуют те шесть аргументов, и который активируется при выполнении объектом действия типа "Fired"? Или у меня ум за разум зашел??? |
› Суббота
› 24.08.2013
› 22:59
› Сообщение #
система намёков не сработала. жаль. получай скрипт полностью.
//ставиш Д-30. ей в инит //id = this addEventHandler ["fired", {_as = _this execVM "file.sqf"}] //текст для файла file.sqf _ob = _this select 6; _ps = []; WaitUntil {if (alive _ob) then { _ps = getPos _ob}; !alive _ob}; hint str _ps; |
› Вторник
› 27.08.2013
› 19:33
› Сообщение #
|
› Вторник
› 27.08.2013
› 21:21
› Сообщение #
//триггер крепить ненадо, его заменяет команда сканер территории nearestObjects.
//итак. //каждый попавший в сканер проверяется командой knowsAbout , они записываются в список и на них ставится маркер, //потом сравнивается со старым списком и у отсутствущих маркер снимается. _un = Player;// Разведчик или пилот; _ms = []; _old = []; _n = 0; While {alive _un} do { - - - - - - - - - - - - - - - - - - - цикл работает пока разведчик жив _ms = nearestObjects [_un, ["Man"], 200] - [_un]; - сканер 200м { if !(_x in _old) then { - - - - - - - - - - - - проверка наличия в списке if (_un knowsAbout _x > 1) then { - - - -мечен ли разведкой _n = _old find objNull; if (_n == -1) then {_n = count _old}; - - подготовка имени маркера _mk = createMarker [ format ["mkc_%1", _n] , getPos _x]; _mk setMarkerShape "ICON"; _mk setMarkerType "mil_objective"; _old set [_n, _x]; - - - - - - - - - - - маркер поставлен, бота записываем в список }}} forEach _ms; { _n = _old find _x; _mkc = format ["mkc_%1", _n]; deleteMarker _mkc; _old set [_n, objNull]; } forEach (_old - _ms); - стираем маркеры тех кто выпал из зоны sleep 1; }; если разведчик погиб, запускается эта часть for "_a" from 0 to (count _old) - 1 do { - - - - по окончании стираем маркеры if !(isNull (_old select _a)) then { deleteMarker format ["mkc_%1", _a]; }; }; |
› Среда
› 28.08.2013
› 16:59
› Сообщение #
Спасибо! работает сразу, можно даже ботом использовать, поменяв
_un = Player;// Разведчик или пилот; на любое другое имя _un = dyatel;// дятел; правда реагирует на всё живое, даже на кроликов ( на них даже более успешно ). а вот самолет с высоты 500 метров не фиксирует ни чего на карте даже при обстреле. расширял зону действия до 5000 ms = nearestObjects [_un, ["Man"], 200] - [_un]; |
› Среда
› 28.08.2013
› 17:10
› Сообщение #
дело в фильтре сканера
http://community.bistudio.com/wiki/nearestObjects ms = nearestObjects [_un, ["фильтр"], 200] - [_un] поставь искомые классы и будет тебе счастье. тут главное иерархия если написать "Tank" - то будет сканить Все танки, а если "T90" - то только Т90 если SoldierWB - то все классы W солдат. итд С самолёта пилот наверно никого не видит, поэтому значение knowsAbout меньше 1 да и летит он быстро, маркеры не успевают ставиться. |
› Среда
› 28.08.2013
› 17:37
› Сообщение #
а фильтр можно сделать из нескольких параметров? Вроде этого
ms = nearestObjects [_un, ["фильтр","фильтр2","фильтр"], 200] - [_un] ? и какой параметр существует для техники? Man - для ботов, а для техники vehicle ? if (_un knowsAbout _x > 1) мне нужно поменять на 3 но как указать реакцию на вражескую сторону? Что бы на карте только врага помечать? ----- Модератор, дублирую свои сообщения не я. Я это вообще не приветствую. Но так получается.... |
› Среда
› 28.08.2013
› 18:11
› Сообщение #
фильтр можно из нескольких, то что он в скобках [ ] - означает что это массив - т.биш. много
если маркеры надо ставить на всех кто попал в зону - убери эту строку совсем (и парую скобку) if (_un knowsAbout _x > 1) then { ..... } чтобы точка сканера не зависела от высоты, небольшое изменение While {alive _un} do { _ps = (getPos _un); _ps resize 2; _ms = nearestObjects [_ps, ["Man"], 200] - [_un]; пример иерархии классов можно глянуть тут. Но это АА верхушка с АА2 и ОА совпадает http://community.bistudio.com/wiki/ArmA:_CfgVehicles |
› Понедельник
› 09.09.2013
› 22:53
› Сообщение #
Подскажите по скрипту..
Ситуация: в процессе выполнения скрипта игрок обращается к боту если тот жив, с фразой. Если бот убит, то фраза не произносится, а скрипт выполняется дальше. Пишу if (alive bot1) then {player groupChat "бла-бла";}; далее следующий код. Только на этом месте происходит затык, и следующий код не исполняется. Подозреваю, что-то неправильно написал. Но что? Пробовал null=if (alive............ Эффекта нет. Скрипт SQF. И еще некий риторический вопрос. Скажем, бота убивают, а мне нужно, чтобы он по ходу дела произнес фразу, ну или сделал чтонить (взрывчатку заложил). Я пишу bot1 groupChat "...." а если именно он убит? Причем неважно, кто из ботов произнесет/сделает. Проверять "живость" многоэтажным if? if (alive bot1) then {bot1 groupchat "....."} else {if (alive bot2) then {bot2 groupchat "...."} else и тд. Или существует более изящное решение? |
› Понедельник
› 09.09.2013
› 23:24
› Сообщение #
andrucio, Для начала было бы хорошо увидеть код, дабы понять, что не так.
А со вторым все просто - обработчик на смерть. http://community.bistudio.com/wiki/addEventHandler http://community.bistudio.com/wiki/Arma_3:_Event_Handlers#Killed
Arma 3
Студент МТУСИ |
| |||
Чат сайта |