/* запускать из init.sqf: - триггеры должны быть многокраатными настроенными на любого игрока - 1 список - триггеры разрешенных зон - 2 список - триггеры запрещенных зон - 3 параметр - разрешенные зоны имеют больший приоритет - 4 параметр - нужно проверять условие для воздушной техники тоже - 5 параметр - может ли игрок находиться в зоне которая явно не помечена триггером как разрешенная if (!isDedicated) then { sleep 1.5; if (playerSide in [west]) then { [[trigger1],[trigger2,trigger3], true, false, true] execVM "rearea.sqf"; }; }; */ #define MAX_TIME_OUT 20 #define CYCLE_TIME 1.24 if (isDedicated) exitWith {}; sleep 1; private ["_zlt_check_cond"]; params [["_zlt_ra_allowed",[],[[]]],["_zlt_ra_restricted",[],[[]]],["_zlt_ra_priority",true,[true]],["_zlt_ra_air",false,[true]],["_zlt_allow_free",true,[true]]]; //diag_log ["rearea",_zlt_ra_allowed,_zlt_ra_restricted,_zlt_ra_priority,_zlt_ra_air,_zlt_allow_free]; _zlt_fnc_notify3 = { [ format["%1",_this], 0,1,5,0,0,301] spawn bis_fnc_dynamicText; }; // возвращает True в безопасной зоне _zlt_check_cond = { params [["_zlt_ra_allowed",[],[[]]],["_zlt_ra_restricted",[],[[]]],["_zlt_ra_priority",true,[true]],["_zlt_ra_air",false,[true]],["_zlt_allow_free",true,[true]]]; _ret = _zlt_allow_free; if (!_zlt_ra_air && {!(isTouchingGround (vehicle player))}) exitWith {_ret;}; private ["_zones","_return"]; if (_zlt_ra_priority) then {_zones = [_zlt_ra_restricted,_zlt_ra_allowed]; _return = [false,true]; } else {_zones = [_zlt_ra_allowed, _zlt_ra_restricted]; _return = [true, false];}; { if ((vehicle player) in list _x) then {_ret = (_return select 0)}; } foreach (_zones select 0); { if ((vehicle player) in list _x) then {_ret = (_return select 1)}; } foreach (_zones select 1); // diag_log ["rearea",_ret]; _ret }; _timeOutZone = 0; while {alive player} do { if (_this call _zlt_check_cond) then { if (_timeOutZone != 0) then { _timeOutZone = 0; ("Вы вернулись в безопасную зону.") call _zlt_fnc_notify3; }; } else { format ["У вас %1 сек на возвращение назад в безопасную зону!",[0 max (MAX_TIME_OUT - _timeOutZone),"MM:SS"] call BIS_fnc_secondsToString] call _zlt_fnc_notify3; if (_timeOutZone > MAX_TIME_OUT) then { hint "Вас расстрелял боевой вертолет врага!"; sleep 1.; player setDamage 1; }; _timeOutZone = _timeOutZone + CYCLE_TIME; }; sleep CYCLE_TIME; };