Бесконечная битва для ARMA2 (OA)
|
|
вvbdnmjs › Среда
› 18.03.2015
› 23:30
› Сообщение # 31
Рядовой
В увольнительной
- Группа:
- Пользователи
- Сообщений:
- 10
Цитата движок пытается избежать наложений объектов Именно,он пытается! В результате абсурд - любой кустик считается ОБЪЕКТОМ,не говоря уже о том,что построить блокпост или поставить мешки впритык к дому или друг к другу, не реально. Пример:играю как одиночку не в редакторе, а на большой карте типа такистана. Куча групп по одному человеку,что бы сразу не нагружать карту.По мере надобности повожу их по одной к точке респа,где группа пополняется до нужных 10 человек и вперед на боевые. Игра долгая и неторопливая.Постепенно продвигаясь внутрь территории для её контроля нужно строить "контроли" (блокпосты).А с этим засада,так как :Цитата движок пытается избежать наложений объектов :) Или придется совсем от модуля строительства отказаться,но в целом он меня устраивал так как там еще и камера-можно за боем последить и высоты подходящие для опорных пунктов присмотреть, и переходить на какой-то скрипт строительства выдрав его откуда-то,но тогда придется отдельно маркитанить с камерой,но чем больше скриптов тем меньше фпс блин
|
Slon › Среда
› 18.03.2015
› 23:39
› Сообщение # 32
Генералиссимус
В увольнительной
- Группа:
- Модератор
- Сообщений:
- 3709
- Титул:
- Спец по скриптам
|
вvbdnmjs › Воскресенье
› 22.03.2015
› 13:40
› Сообщение # 33
Рядовой
В увольнительной
- Группа:
- Пользователи
- Сообщений:
- 10
Цитата строить скриптом просто Пытаюсь решить еще проще.Ищу сейчас аддоны блокпоста целиком,окопов и т.д. в общем больших укреплений.Добавлено (22.03.2015, 13:27) --------------------------------------------- Блин я его нашел модуль этот и расковырял -толку то. Как, гипотетически, может выглядеть строка которая регулирует ограничение на расстояние между строящимися объектами? Добавлено (22.03.2015, 13:35) --------------------------------------------- КодscriptName "CoIn\data\scripts\coin.sqf";/* File: coin.sqf Author: Karel Moricky Description: Init script - Construction Interface Parameter(s): _this: the Coin logic unit which triggered this script.*/_logic = _this select 0;//[_logic] join grpnull; //--- Logic IDif (isnil "BIS_coin_lastID") then {BIS_coin_lastID = -1};BIS_coin_lastID = BIS_coin_lastID + 1;_varname = ""; debugLog format ["COIN_ BIS_coin_%1 %2",BIS_coin_lastID,[_logic, position _logic]];debugLog format ["COIN_ACTION BIS_coin_%1 %2",BIS_coin_lastID,[_logic, position _logic]]; call compile format ["BIS_coin_%1 = _logic; _logic setvehiclevarname 'BIS_coin_%1'; _varname = 'BIS_coin_%1'; publicvariable 'BIS_coin_%1'",BIS_coin_lastID]; _logic setvariable ["BIS_COIN_ID",BIS_coin_lastID, true];publicvariable (vehiclevarname _logic); //--- First callif (BIS_coin_lastID == 0) then { //--- Execute Functions if (isnil "bis_fnc_init") then { _logicFnc = (group _logic) createunit ["FunctionsManager",position player,[],0,"none"]; }; };waituntil {BIS_fnc_init}; //--- Get custom params ----------------------------------------------------------------------------------//debuglog format ["Log: %1 | %2",_logic getvariable "BIS_COIN_rules",_logic getvariable "BIS_COIN_name"];//---Name of construction site_name = if (isnil {_logic getvariable "BIS_COIN_name"}) then {""} else {_logic getvariable "BIS_COIN_name"};_logic setvariable ["BIS_COIN_name",_name,true]; //--- Units with access_rules = if (isnil {_logic getvariable "BIS_COIN_rules"}) then {synchronizedObjects _logic} else {(_logic getvariable "BIS_COIN_rules") + synchronizedObjects _logic};if (typename _rules != "ARRAY") then {_rules = [_rules]};_logic setvariable ["BIS_COIN_rules",_rules,true]; //--- Categories_categories = if (isnil {_logic getvariable "BIS_COIN_categories"}) then {[]} else {_logic getvariable "BIS_COIN_categories"};_logic setvariable ["BIS_COIN_categories",_categories,true]; //--- Items_items = if (isnil {_logic getvariable "BIS_COIN_items"}) then {[]} else {_logic getvariable "BIS_COIN_items"};_logic setvariable ["BIS_COIN_items",_items,true]; //--- Funds_funds = if (isnil {_logic getvariable "BIS_COIN_funds"}) then {["0"]} else {_logic getvariable "BIS_COIN_funds"};if (typename _funds == "STRING") then {_funds = [_funds]};_logic setvariable ["BIS_COIN_funds",_funds,true]; //--- Funds Description_fundsDescription = if (isnil {_logic getvariable "BIS_COIN_fundsDescription"}) then {["$"]} else {_logic getvariable "BIS_COIN_fundsDescription"};if (typename _fundsDescription == "STRING") then {_fundsDescription = [_fundsDescription]};_logic setvariable ["BIS_COIN_fundsDescription",_fundsDescription,true]; //--- Area size_areasize = if (isnil {_logic getvariable "BIS_COIN_areasize"}) then {[150,50]} else {_logic getvariable "BIS_COIN_areasize"};_logic setvariable ["BIS_COIN_areasize",_areasize,true]; //--- actionCondition code - if true (+ in area and in rules), action will be showed_actionCondition = if (isnil {_logic getvariable "BIS_COIN_actionCondition"}) then {"true"} else {_logic getvariable "BIS_COIN_actionCondition"};_logic setvariable ["BIS_COIN_actionCondition",_actionCondition,true]; //--- Start code - by this adding action can be disabled_onStart = if (isnil {_logic getvariable "BIS_COIN_onStart"}) then {{}} else {_logic getvariable "BIS_COIN_onStart"};_logic setvariable ["BIS_COIN_onStart",_onStart,true]; //--- Select code_onSelect = if (isnil {_logic getvariable "BIS_COIN_onSelect"}) then {{}} else {_logic getvariable "BIS_COIN_onSelect"};_logic setvariable ["BIS_COIN_onSelect",_onSelect,true]; //--- Purchase code_onPurchase = if (isnil {_logic getvariable "BIS_COIN_onPurchase"}) then {{}} else {_logic getvariable "BIS_COIN_onPurchase"};_logic setvariable ["BIS_COIN_onPurchase",_onPurchase,true]; //--- Construct code_onConstruct = if (isnil {_logic getvariable "BIS_COIN_onConstruct"}) then {{}} else {_logic getvariable "BIS_COIN_onConstruct"};_logic setvariable ["BIS_COIN_onConstruct",_onConstruct,true]; //--- Repair code (set empty code to disable this function)_onRepair = if (isnil {_logic getvariable "BIS_COIN_onRepair"}) then {{}} else {_logic getvariable "BIS_COIN_onRepair"};_logic setvariable ["BIS_COIN_onRepair",_onRepair,true]; //--- Sell code (set empty code to disable this function)_onSell = if (isnil {_logic getvariable "BIS_COIN_onSell"}) then {{}} else {_logic getvariable "BIS_COIN_onSell"};_logic setvariable ["BIS_COIN_onSell",_onSell,true];
//--- Temporary variables_logic setvariable ["BIS_COIN_params",[],true];//_logic setvariable ["BIS_COIN_preview",objnull,true];_logic setvariable ["BIS_COIN_buildings",[],true];sleep 5.01;[nil,nil,"per",rSPAWN,[_logic,_varname],{ scriptname "COIN: Execute FSM"; _logic = _this select 0; _varname = _this select 1; _logic setvehiclevarname _varname; _name = _logic getvariable "BIS_COIN_name"; _id = _logic getvariable "BIS_COIN_id"; _BIS_COIN_idAction = format ["BIS_COIN_action_%1",_id]; BIS_COIN_evalCounter = 0; BIS_COIN_evalCounterDefault = 30; //number of frames to skip in all _logic setvariable ["BIS_COIN_evalCounter", BIS_COIN_evalCounterDefault]; if (isNil {_logic getVariable 'BIS_COIN_evalCondition'}) then {_logic setVariable ['BIS_COIN_evalCondition', false];}; /* if (isNil {_logic getvariable "BIS_COIN_evalCounterDefault"}) then {BIS_COIN_evalCounterDefault = BIS_COIN_evalCounterDefaultFrames;} else { BIS_COIN_evalCounterDefault = BIS_COIN_evalCounterDefault + BIS_COIN_evalCounterDefaultFrames; //adding default number of frames for each logic debuglog format ["Log: [COIN]default evalCounter %1",BIS_COIN_evalCounterDefault]; }; */ while {!isnull _logic} do { private["_player"]; _player = player; debuglog format ["Log: [COIN]iter %1",[_logic,player]]; debuglog format ["COIN_ACTION_ITER %1",[_logic,player]]; if (isnil {player getvariable _BIS_COIN_idAction} && !isnull player) then { _player = player; debuglog format ["Log: [COIN]Action %1 added to %2",_BIS_COIN_idAction,player]; _name = _logic getvariable "BIS_COIN_name"; _description = if (_name == "") then {localize "str_coin_action"} else {localize "str_coin_action" + " - " + _name}; _action = player addaction [ _description, "ca\modules\coin\data\scripts\coin_interface.sqf", _logic, 1, false, false, "", format [" BIS_COIN_evalCounter=%1 getVariable 'BIS_COIN_evalCounter'; if ((BIS_COIN_evalCounter)>0) then { %1 setVariable ['BIS_COIN_evalCounter',BIS_COIN_evalCounter-1]; %1 getVariable 'BIS_COIN_evalCondition' } else { %1 setVariable ['BIS_COIN_evalCounter',BIS_COIN_evalCounterDefault]; BIS_COIN_evalCounter = BIS_COIN_evalCounterDefault; _player = _target; _logic = %1; _rules = %1 getvariable 'BIS_COIN_rules'; _dis = (%1 getvariable 'BIS_COIN_areasize') select 0; _lpos = position %1; _ppos = position _player; _customCondition = %1 getvariable 'BIS_COIN_actionCondition'; _isCustomCondition = if (_customCondition == 'true') then {true} else {call compile _customCondition}; %1 setVariable ['BIS_COIN_evalCondition', player == _player && (_player in _rules || side _player in _rules) && ([_lpos select 0,_lpos select 1] distance [_ppos select 0,_ppos select 1]) < _dis && _isCustomCondition ]; %1 getVariable 'BIS_COIN_evalCondition' }; ",vehiclevarname _logic] ]; player setvariable [_BIS_COIN_idAction,_action]; debuglog format ["COIN_ACTION %1 (%2) added to %3",_player getvariable _BIS_COIN_idAction, _BIS_COIN_idAction,_player]; }; //_dis = (_logic getvariable 'BIS_COIN_areasize') select 0; //distance to enable construction action in action menu debuglog format ["COIN_ACTION %1 ...before waituntil",[_player,_player getVariable _BIS_COIN_idAction,(_player distance _logic), _logic]]; waituntil {Sleep 0.1, ((_player != player) && (!isnull player)) || ((_player distance _logic) > 300 + ((_logic getvariable 'BIS_COIN_areasize') select 0))}; //action is removed - dead or far debuglog format ["COIN_ACTION %1 (%2) removed from %3",_player getVariable _BIS_COIN_idAction, _BIS_COIN_idAction,_player]; _player removeAction (_player getVariable _BIS_COIN_idAction); _player setvariable [_BIS_COIN_idAction, nil]; player setvariable [_BIS_COIN_idAction, nil]; _dis = (_logic getvariable 'BIS_COIN_areasize') select 0; //distance to enable construction action in action menu waituntil {Sleep 3, (_player != player && !isnull player) || ((_player distance _logic) < (300 + _dis))}; //TODO:TESTME: if area of logic can grow much more than +1000 m in mission, direct area get should be used here (or action will be only in inner radius) //itearation - action will be added again }; }] call RE;
/* _description = if (_name == '') then {localize 'str_coin_action'} else {localize 'str_coin_action' + ' - ' + _name}; _action = _player addaction [_description,'ca\modules\coin\data\scripts\coin_interface.sqf',_logic,1,false,false,'',(_logic getVariable 'BIS_COIN_actionCondition')];*/ /* _fsm = _this execfsm "ca\modules\coin\data\fsms\coin_actionmenu.fsm"; _fsm setfsmvariable ["logic",_this]; _this setvariable ["BIS_COIN_fsm",_fsm,true]; */Вот он сам собственно нагишом этот модуль))Есть там еще coin_interface.sqf почему то не думаю что в нем может быть Добавлено (22.03.2015, 13:40) --------------------------------------------- Тьфу ты,как раз в нем похоже //--- No Place To Build _isFlat = (position _preview) isflatempty [ (sizeof typeof _preview) / 2, //--- Minimal distance from another object\\Минимальное расстояние от другого объекта
Вот эта строка.Плохо что редактировать сообщения на форуме нельзя,удалил бы предыдущий пост.
|
Slon › Воскресенье
› 22.03.2015
› 13:46
› Сообщение # 34
Генералиссимус
В увольнительной
- Группа:
- Модератор
- Сообщений:
- 3709
- Титул:
- Спец по скриптам
нефигась понаписали. можно было уместить всё в 5 строк
|
вvbdnmjs › Воскресенье
› 22.03.2015
› 13:59
› Сообщение # 35
Рядовой
В увольнительной
- Группа:
- Пользователи
- Сообщений:
- 10
Все,проверил,точно оно!! распаковываем файл modules.pbo из addons находим папку coin\scripts\coin_interface.sqf
(sizeof typeof _preview) / 2, //--- Minimal distance from another object\\ в этой строке меняем циферку 2 на 0 запаковываем обратно,потом это с заменой в аддонс и строим линию Маннергейма
P.s. введите возможность редактировать сообщения на форуме))))
|
Slon › Воскресенье
› 22.03.2015
› 14:06
› Сообщение # 36
Генералиссимус
В увольнительной
- Группа:
- Модератор
- Сообщений:
- 3709
- Титул:
- Спец по скриптам
Цитата вvbdnmjs ( ) в этой строке меняем циферку 2 на 0 делить на 0 нельзя
Цитата вvbdnmjs ( ) введите возможность редактировать сообщения на форуме только для проверенных пользователей )
|
вvbdnmjs › Воскресенье
› 22.03.2015
› 16:11
› Сообщение # 37
Рядовой
В увольнительной
- Группа:
- Пользователи
- Сообщений:
- 10
Цитата делить на 0 нельзя Странно,у меня работает все.Такие блок посты отстраиваю,что линия Мажино вообще нервно курит глядя на них Добавлено (22.03.2015, 16:11) --------------------------------------------- Вот пожалуйста,на чистую арму2 пример.Стройка где угодно в радиусе 4км от модуля.аддон модулес измененный в архиве с миссией его оттуда вытащить и кинуть в папку аддонс с заменой,предварительно сделав бэкап старого - а то вдруг и правда на ноль делить нельзя Пример
|
andrucio › Воскресенье
› 22.03.2015
› 16:21
› Сообщение # 38
Генералиссимус
В увольнительной
- Группа:
- Пользователи2
- Сообщений:
- 1334
Цитата вvbdnmjs ( ) Ищу сейчас аддоны блокпоста целиком,окопов и т.д. Так композиции же есть на это дело. Конечно. не на любой случай, но что-то стандартное можно найти. К тому же, если не устраивает, вроде бы можно свое настроить и потом использовать в любых местах.
Кампания А2 "Охотники за караванами" А3 для мишшенмейкеров: заставляем дома мебелью
|
вvbdnmjs › Понедельник
› 23.03.2015
› 22:50
› Сообщение # 39
Рядовой
В увольнительной
- Группа:
- Пользователи
- Сообщений:
- 10
Цитата Так композиции же есть на это дело А вот про композиции ничего не знаю кстати,что это?И вообще я до армы2 только добрался, до этого всегда играл в ОФП брезгливо глядя в сторону выходящих арм)) Ну вот,знакомство с армой=темный лес ,вместо привычного sqs,теперь sqf и вникать заново в его наприсание мне лениво- хорошо что модули есть для таких как я)) п.с. Искал аддоны окопов в сети так и не нашел,паки укреплений разных искал и т.д. ничего особо интересного поисковик мне не выдал на эту тему. Добавлено (23.03.2015, 22:50) --------------------------------------------- Заглянул,еще раз сказать спасибо Slon. Заветные палаточки с вашим скриптом исправно и бесперебойно рожают пушечное мясцо в количестве 10 человек на группу для постоянной отправки пополнений на фронт
|
rds100 › Четверг
› 09.01.2020
› 14:56
› Сообщение # 40
Лейтенант
В увольнительной
- Группа:
- Пользователи
- Сообщений:
- 62
Всем привет! Подскажите, если не сложно, вопрос такой. Создаем скриптом resp.sqf группу ботов _gr, в технике _btr1, это бмп с экипажем и пехотой:
_btr1 = createVehicle ["M113_TK_EP1", getMarkerPos "marker1", [], 0, "NONE"]; _gr = createGroup West; _un = _gr createunit ["US_Soldier_Crew_EP1", getPos _btr1, [], 10, "None"]; _un moveInDriver _btr1; _un1= _gr createunit ["US_Soldier_Crew_EP1", getPos _btr1, [], 11, "None"]; _un1 moveingunner _btr1; _un2= _gr createunit ["US_Soldier_SL_EP1", getPos _btr1, [], 10, "None"]; _un2 moveInCargo _btr1; _un3= _gr createunit ["US_Soldier_TL_EP1", getPos _btr1, [], 10, "None"]; _un3 moveInCargo _btr1; _un4= _gr createunit ["US_Soldier_Sniper_EP1", getPos _btr1, [], 10, "None"]; _un4 moveInCargo _btr1;
... и далее перечисляется группа ботов, потом им задается маршрут движения, весь текст нет смысла копировать наверное. Вопрос в следующем. Как сделать, чтобы первый запуск был без какой-либо команды? Сейчас я запускаю из миссии, через активацию триггера с условием _hndl = "" execVM "resp.sqf"; И второй вопрос, как сделать возрождение этой группы, если она будет полностью уничтожена в бою? То есть, чтобы если число ботов этой группы станет = 0, то скрипт должен сработать повторно. Команда count units gr < 1 не работает (в триггере в условии активации). Может, ее не в триггере а в этом самом скрипте писать? А как это будет правильно?
Труд есть дело чести, дело славы, дело доблести и геройства!
|
Slon › Четверг
› 09.01.2020
› 20:09
› Сообщение # 41
Генералиссимус
В увольнительной
- Группа:
- Модератор
- Сообщений:
- 3709
- Титул:
- Спец по скриптам
совсем без команды скрипт не запустится. Если нужно чтобы запустился в начале игры, то есть два способа. из триггера с условием time > 0
или из файла с именем init.sqf
Возрождение группы можно вписать в в текст скрипта вот так :
_gr = createGroup West;// это выносим в начало файла, чтобы не создавать группу многократно
For "_a" from 0 to 1 do { // запуск цикла для переменной _а . на два куруга.
//текст скрипта
WaitUntil { count (Units _gr) < 1}; // ожидание когда кол-во ботов станет < 1 }; // конец цикла
есть другие варианты, можно посмотреть тут https://arma.at.ua/forum/46-2062-1
|
rds100 › Пятница
› 10.01.2020
› 16:36
› Сообщение # 42
Лейтенант
В увольнительной
- Группа:
- Пользователи
- Сообщений:
- 62
_gr1 = createGroup West; For "_a" from 0 to 1 do { _btr2 = createVehicle ["M113_TK_EP1", getMarkerPos "marker21", [], 0, "NONE"]; _un = _gr1 createunit ["US_Soldier_Crew_EP1", getPos _btr2, [], 10, "None"]; _un moveInDriver _btr2; _un1= _gr1 createunit ["US_Soldier_Crew_EP1", getPos _btr2, [], 11, "None"]; _un1 moveingunner _btr2; _un2= _gr1 createunit ["US_Soldier_SL_EP1", getPos _btr2, [], 10, "None"]; _un2 moveInCargo _btr2; _un3= _gr1 createunit ["US_Soldier_TL_EP1", getPos _btr2, [], 10, "None"]; _un3 moveInCargo _btr2; _un4= _gr1 createunit ["US_Soldier_Sniper_EP1", getPos _btr2, [], 10, "None"]; _un4 moveInCargo _btr2; _un5= _gr1 createunit ["US_Soldier_AR_EP1", getPos _btr2, [], 10, "None"]; _un5 moveInCargo _btr2; _un6= _gr1 createunit ["US_Soldier_AT_EP1", getPos _btr2, [], 10, "None"]; _un6 moveInCargo _btr2; _un7= _gr1 createunit ["US_Soldier_TL_EP1", getPos _btr2, [], 10, "None"]; _un7 moveInCargo _btr2; _un8= _gr1 createunit ["US_Soldier_AR_EP1", getPos _btr2, [], 10, "None"]; _un8 moveInCargo _btr2; _un9= _gr1 createunit ["US_Soldier_AR_EP1", getPos _btr2, [], 10, "None"]; _un9 moveInCargo _btr2; _un10= _gr1 createunit ["US_Soldier_AAR_EP1", getPos _btr2, [], 10, "None"]; _un10 moveInCargo _btr2; _un11= _gr1 createunit ["US_Soldier_Sniper_EP1", getPos _btr2, [], 10, "None"]; _un11 moveInCargo _btr2; _un12= _gr1 createunit ["US_Soldier_Sniper_EP1", getPos _btr2, [], 10, "None"]; _un12 moveInCargo _btr2; _gr1 addWaypoint [getMarkerPos "b21",0]; _gr1 addWaypoint [getMarkerPos "b22",0]; _gr1 addWaypoint [getMarkerPos "b23",0]; _gr1 addWaypoint [getMarkerPos "b24",0]; WaitUntil { count (Units _gr1) < 1}; };
Не работает, не туда написал? Не могу прикрепить файл миссии.Добавлено (10.01.2020, 16:37) --------------------------------------------- https://dropmefiles.com/A9x5D - файл миссии Добавлено (10.01.2020, 17:10) --------------------------------------------- Запуск с помощью триггера все-таки нужен, чтобы потом задавать там разные условия, или связывать его с другими триггерами, просто я хотел чтобы запуск этого триггера в данном случае происходил при запуске миссии, без дополнительного условия (изначально я сделал триггер на присутствие, и чтобы запустить его, сам в него заходил:)) Потом оказалось, что если убрать из поля "Условие" запись this, он сам запускается )) Добавлено (10.01.2020, 17:33) --------------------------------------------- While {true} do { _gr1 = createGroup West; _btr2 = createVehicle ["M113_TK_EP1", getMarkerPos "marker21", [], 0, "NONE"]; _un = _gr1 createunit ["US_Soldier_Crew_EP1", getPos _btr2, [], 10, "None"]; _un moveInDriver _btr2; _un1= _gr1 createunit ["US_Soldier_Crew_EP1", getPos _btr2, [], 11, "None"]; _un1 moveingunner _btr2; _un2= _gr1 createunit ["US_Soldier_SL_EP1", getPos _btr2, [], 10, "None"]; _un2 moveInCargo _btr2; _un3= _gr1 createunit ["US_Soldier_TL_EP1", getPos _btr2, [], 10, "None"]; _un3 moveInCargo _btr2; _un4= _gr1 createunit ["US_Soldier_Sniper_EP1", getPos _btr2, [], 10, "None"]; _un4 moveInCargo _btr2; _un5= _gr1 createunit ["US_Soldier_AR_EP1", getPos _btr2, [], 10, "None"]; _un5 moveInCargo _btr2; _un6= _gr1 createunit ["US_Soldier_AT_EP1", getPos _btr2, [], 10, "None"]; _un6 moveInCargo _btr2; _un7= _gr1 createunit ["US_Soldier_TL_EP1", getPos _btr2, [], 10, "None"]; _un7 moveInCargo _btr2; _un8= _gr1 createunit ["US_Soldier_AR_EP1", getPos _btr2, [], 10, "None"]; _un8 moveInCargo _btr2; _un9= _gr1 createunit ["US_Soldier_AR_EP1", getPos _btr2, [], 10, "None"]; _un9 moveInCargo _btr2; _un10= _gr1 createunit ["US_Soldier_AAR_EP1", getPos _btr2, [], 10, "None"]; _un10 moveInCargo _btr2; _un11= _gr1 createunit ["US_Soldier_Sniper_EP1", getPos _btr2, [], 10, "None"]; _un11 moveInCargo _btr2; _un12= _gr1 createunit ["US_Soldier_Sniper_EP1", getPos _btr2, [], 10, "None"]; _un12 moveInCargo _btr2; _gr1 addWaypoint [getMarkerPos "b21",0]; _gr1 addWaypoint [getMarkerPos "b22",0]; _gr1 addWaypoint [getMarkerPos "b23",0]; _gr1 addWaypoint [getMarkerPos "b24",0]; WaitUntil {not alive _btr2}; sleep 1; };
Сделал так. Работает, если БТР уничтожен. А если подставить строку WaitUntil { count (Units _gr) < 1}; - не работает
Труд есть дело чести, дело славы, дело доблести и геройства!
|
Slon › Пятница
› 10.01.2020
› 18:09
› Сообщение # 43
Генералиссимус
В увольнительной
- Группа:
- Модератор
- Сообщений:
- 3709
- Титул:
- Спец по скриптам
Для конторля скрипта измените строку на вот такое
WaitUntil {hintSilent str (count (Units _gr1)); count (Units _gr1) < 1};
это вам покажет сколько ботов в группе.
|
rds100 › Пятница
› 10.01.2020
› 19:13
› Сообщение # 44
Лейтенант
В увольнительной
- Группа:
- Пользователи
- Сообщений:
- 62
Работает! Я не знал, что после гибели юнита игра узнает довольно медленно, что он погиб, проверяет. Пока всех 13 проверит, проходит примерно 5 минут. Счетчик работает на уменьшение примерно с частотой 1 ед. в 20 сек. То есть, надо просто подождать. Хм, довольно долго выходит. Я в основной миссии, для которой этот пример предназначается, активировал этот триггер по радио, и там получается, что их, таких групп, нужно штук 5-6, они там быстро гибнут, и скоро уже нужно еще столько же, и потом еще. Иначе нужная интенсивность атаки не создается, и они не могут взять высоту. Спасибо! Но в принципе теперь все работает, буду думать. Может, нужно увеличить количество групп, одновременно участвующих в атаке, там тих было 3. Спасибо!! И еще вопрос, пожалуйста, как сюда же, в этот скрипт, включить условие о прикреплении группы к маршруту, который построен на карте в редакторе для другого бота, именно в редакторе, а не в скрипте. Потому что маркерами и в скрипте каждый вейпоинт неудобно писать. Я создал бота, задал ему в редакторе маршрут, удалил его командой deleteVehilcle this, назвал его q1. И вот строка _gr1 waypointAttachVehicle q1; как она правильно должна выглядеть?
Чтобы в моем скрипте было так:
..._un12= _gr1 createunit ["US_Soldier_Sniper_EP1", getPos _btr2, [], 10, "None"]; _un12 moveInCargo _btr2; _gr1 addWaypoint [getMarkerPos "b21",0]; _gr1 waypointAttachVehicle q1; WaitUntil { count (Units _gr1) < 1}; sleep 1; };
Не правильно?) Нужно, чтобы после первой точки маршрута, обозначенной маркером, группа переключалась на маршрут, указанный другому боту в редакторе и двигалась по нему.
Или маршрут нужно задавать не для группы, а для БТРа, в котором она изначально сидит? То есть,
_btr2 waypointAttachVehicle q1; ?Добавлено (10.01.2020, 19:59) --------------------------------------------- Или вот еще есть команда copyWaypoints, может лучше взять ее?
Труд есть дело чести, дело славы, дело доблести и геройства!
|
Slon › Пятница
› 10.01.2020
› 23:49
› Сообщение # 45
Генералиссимус
В увольнительной
- Группа:
- Модератор
- Сообщений:
- 3709
- Титул:
- Спец по скриптам
Цитата rds100 ( ) назвал его q1. Это не верно. Ведь бота вы удаляете, и скрипт его уже не найдёт. А вот Группа, и маршрут остаются. Поэтому в ините бота надо писать
Grp_q1 = group this; deleteVehicle this
_un12= Grp_q1 createunit ["US_Soldier_Sniper_EP1", getPos _btr2, [], 10, "None"];
Так вы создаёте группу Grp_q1 и с ней маршрут. После этого скриптом можно создавать солдат в эту группу, присоединять солдат к этой группе.
единственное чего делать не стоит - переводить всех солдат ИЗ группы, при этом группа удаляется.
ещё нюанс. Маршрут исполняясь Отключает пройденные поинты. Иногда есть необходимость перезапустить маршрут с Любого другого поитна., (только не с 0 ) Это делает команда
_grp setCurrentWaypoint [_grp, 1];
https://community.bistudio.com/wiki/setCurrentWaypoint . . Если нужен динамический маршрут, то лучше обозначить ключевые точки невидимыми маркерами, И запустить отдельный скрипт проверяющий условия для построения маршрута. Маршрут создаются по мере необходимости командой
https://community.bistudio.com/wiki/addWaypoint
поинты ставятся на маркеры.
|