Потому что вы не понимаете как работает команда spawn. Она не прерывает текущий код и вызывает другой. Она "добавляет" новый код в очередь на вызов, а пока будет выполнятся текущий код, пока не придет время следующего в очереди... таким образом сначала выполнится весь (Или почти весь) цикл и еще пару других скриптов, пока не дойдет до хотя бы первого вашего "отспавненого" скрипта, а к этому времени ваш цикл успеет десятки раз изменить значение переменной.
Да я понимаю как она работает. Я на эксперименты с этой штукой потратил часов 10 в редакторе .В цикле пробовал ставить задержку 60 сек.не помогло.Потом написал сюда только.В данном случае я использую скрипты T8_units . И сам автор в демо миссии через spawn запускает. Естественно я менял на call и разницы не заметил.В первом сообщении первый пример отработал как надо на 15 маркерах.Буду на выходных через
Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание
пробовать.Сам массив будет выглядеть приблизительно вот так
SpawnThisUnits =
[
[ [ "fireteam", [ "Marker08_01", "Marker08_02" ], "T8u_fnc_rmNVG_TEST" ], [ "PATROL" ]],
[ [ "squad", "Marker03_occupy" ], [ "OCCUPY" ]],
[ [ "squad", "Marker03_garrison" ], [ "GARRISON" ]],
[ [ "squad", "Marker05" ], [ "LOITER" ]],
[ [ "squad", "Marker06" ], [ "PATROL_GARRISON" ]],
[ [ "squad", "Marker09" ], [ "PATROL_AROUND", 150, 135 ], [], [ true ]],
[ [ "platoon", "MarkerRED" ], [ "DEFEND_BASE" ]],
[ [ _groupArrayFullTeam + _groupArrayFullTeam + _groupArrayFullTeam, "Marker02_02" ], [ "OCCUPY", true ], [ true, false, false ]],
[ [ _groupArrayW_APC + _groupArrayFireTeam, "Marker07", false ], [ "PATROL_URBAN" ], [ false, false, false ]],
[ [ _groupArrayW_APC + _groupArrayFireTeam, [ "marker_urban_01", "marker_urban_02" ], false ], [ "PATROL_URBAN" ]],
[ [ _groupArrayFullTeam, "ip" ], [ "PATROL_MARKER", [ "ip1", "ip2", "ip3" ] ] ],
[ [ _groupArrayIfritPat + _groupArrayFullTeam, "vp", false ], [ "PATROL_MARKER", [ "vp1", "vp2", "vp3" ], false ]],
[ [ _groupArraySniperTeam, "spawnSnipers" ], [ "OVERWATCH", "overwatchTHIS" ]],
[ [ "squad", "MarkerGUR", true, "T8u_fnc_rmNVG_TEST", RESISTANCE ], [ "PATROL" ]],
[ [ "squad", "MarkerGUR", RESISTANCE, "T8u_fnc_rmNVG_TEST" ], [ "PATROL" ]],
[ [ "squad", "MarkerBLU", WEST ], [ "PATROL" ]],
[ [ "squad", "MarkerBLU", WEST ], [ "PATROL" ]],
[ [ _groupArrayCIV, "MarkerCIV", CIVILIAN ], [ "GARRISON" ]]
];
Это для примера накидал.Этот массив будет собираться рандомно где то больше будет гдето меньше.Каждой группе будет прописываться свой определенный маркер и разные какие то дополнительные параметры.А это сама вызываемая функция
#include <..\MACRO.hpp>
__allowEXEC(__FILE__);
private [ "_unitsArray", "_marker", "_owner", "_distance", "_actSide", "_actType", "_onAct", "_onDeAct", "_condition", "_trigger", "_onActCompiled", "_onDeactCompiled", "_onActDebug", "_onDeActDebug" ];
_unitsArray = param [ 0, "NO-UNITS-SET", [ "" ]];
_marker = param [ 1, "NO-MARKER-SET", [ "" ]];
_owner = param [ 2, "NO-SIDE-SET", [ "" ]];
_actSide = param [ 3, "ANY", [ "" ]];
_distance = param [ 4, 1000, [ 123 ]];
_condition = param [ 5, "this", [ "" ]];
_onAct = param [ 6, "", [ "" ]];
_onDeAct = param [ 7, "", [ "" ]];
_owner = toUpper _owner;
_actType = "PRESENT";
_actRepeat = true;
if ( _unitsArray == "NO-UNITS-SET" OR { _marker == "NO-MARKER-SET" } OR { _owner == "NO-SIDE-SET" } OR { ! ( _owner in [ "WEST", "EAST", "CIV", "GUER" ] ) } ) exitWith
{
private [ "_msg" ];
_msg = format [ "There is a serious error in your T8U_fnc_Zone call!<br /><br />%1", _this ];
[ _msg ] call T8U_fnc_BroadcastHint;
false
};
if ( T8U_var_DEBUG_hints ) then
{
_onActDebug = format [ '[ "Zone um [ %1 ] aktiviert" ] call T8U_fnc_BroadcastHint;', _marker ];
_onDeActDebug = format [ '[ "Zone um [ %1 ] deaktiviert" ] call T8U_fnc_BroadcastHint;', _marker ];
} else {
_onActDebug = "";
_onDeActDebug = "";
};
_onCreateActCompiled = format [ '[ %1, "%1" ] spawn T8U_fnc_ZoneCreate; %2 %3', _unitsArray, _onAct, _onActDebug ];
_onCreateDeactCompiled = format [ '[ "%1" ] spawn T8U_fnc_ZoneNotAktiv;', _unitsArray ];
_onDeactCompiled = format ['[] spawn { sleep %6; [ "%1", "%2", "%3" ] spawn T8U_fnc_Cache; }; %4 %5', _unitsArray, _marker, _owner, _onDeAct, _onDeActDebug, T8U_var_CacheTime ];
if ( T8U_var_DEBUG ) then { [ "fn_zone.sqf", "INIT", _this ] spawn T8U_fnc_DebugLog; };
if ( T8U_var_DEBUG ) then { [ "fn_zone.sqf", "_onCreateActCompiled, _onDeactCompiled", [ _onCreateActCompiled, _onDeactCompiled ] ] spawn T8U_fnc_DebugLog; };
_trigger = createTrigger [ "EmptyDetector", ( getMarkerPos _marker ) ];
// _trigger = createTrigger [ "EmptyDetector", ( getMarkerPos _marker ), false ];
_trigger setTriggerActivation [ _actSide, _actType, _actRepeat ];
_trigger setTriggerArea [ _distance, _distance, 0, false ];
_trigger setTriggerStatements [ _condition, _onCreateActCompiled, _onCreateDeactCompiled ];
_trigger = createTrigger [ "EmptyDetector", ( getMarkerPos _marker ) ];
// _trigger = createTrigger [ "EmptyDetector", ( getMarkerPos _marker ), false ];
_trigger setTriggerActivation [ _actSide, _actType, _actRepeat ];
_trigger setTriggerArea [ _distance + ( _distance / 4 ), _distance + ( _distance / 4 ), 0, false ];
_trigger setTriggerStatements [ _condition, "", _onDeactCompiled ];
по сути скрипт с циклом отработает только один раз при запуске миссии.Во время брифинга.
Edited by wolf2285, 18 January 2018 - 01:31.