From 39d36d67c6c2c7bf00677d00564c6ec82c6d323b Mon Sep 17 00:00:00 2001 From: completely-burned <4268642+completely-burned@users.noreply.github.com> Date: Tue, 29 Jun 2021 19:06:13 +0400 Subject: [PATCH] Update while_gc_groups.sqf #2 --- .../dir/server/while_gc_groups.sqf | 59 ++++++++++++------- 1 file changed, 38 insertions(+), 21 deletions(-) diff --git a/glowing-octo-shame-arma2/dir/server/while_gc_groups.sqf b/glowing-octo-shame-arma2/dir/server/while_gc_groups.sqf index 9e2aa4580..b17bbb5f6 100644 --- a/glowing-octo-shame-arma2/dir/server/while_gc_groups.sqf +++ b/glowing-octo-shame-arma2/dir/server/while_gc_groups.sqf @@ -1,30 +1,47 @@ -private["_time","_grp"]; +/*скрипт ищет пустые неиспользуемые группы и удаляет их + */ -waitUntil {!isNil "group_system_units"}; +// _t time, _g group, _rm remove +private["_t","_g","_rm"]; -while{true}do{ +// group_system_units это специальная группа в которой создаются боты единоразово, например для единичного выстрела +waitUntil {!isNil "group_system_units"}; // TODO: нужна приставка к переменной - sleep 5; +diag_log format ["Log: [while_gc_groups.sqf] start %1", time]; +while{true}do{ + sleep 5; // performance { - _grp = _x; - - _time = (_grp getVariable "grp_created_time"); - if ( isNil "_time" ) then { - _time = time; - _grp setVariable ["grp_created_time", _time]; - diag_log format ["Group_gc.sqf %1 grp_created_time %2", _grp, _time ]; + _g = _x; + // время создания группам нужно чтобы они не удалялись до формирования отряда + // время создания обычно уже установленно при формировании отряда + _t = (_g getVariable "grp_created_time"); // TODO: нужна приставка к переменной + if ( isNil "_t" ) then { + //--- время еще не установленно, группа еще не готова, проверяется в следующем заходе + _t = time; + _g setVariable ["grp_created_time", _t]; + diag_log format ["Log: [while_gc_groups.sqf] %1 grp_created_time %2", _g, _t ]; + } else { + //--- времени с момента создания группы прошло достаточно для проверки + if(_t < (time - 10))then{ + _rm = true; + + //--- проверка живых юнитов в группе + { + if(alive _x)exitWith{_rm = false}; + } forEach units _g; + + //--- удаление + if(_rm)then{ + diag_log format ["Log: [while_gc_groups.sqf] deleteGroup %1, count alive %2", _g, {alive _x} count units _g]; + deleteGroup _g; + }; + }; }; + + sleep 0.01; // FIXME: эта команда сама по себе не нагружает cpu ?? performance - if((_time < (time - 10)) && ({alive _x} count units _grp == 0))then{ - - diag_log format ["Group_gc.sqf deleteGroup %1, count alive %2", _grp, {alive _x} count units _grp]; - - deleteGroup _grp; - - diag_log format ["Group_gc.sqf deletedGroup %1", _grp]; - - }; } forEach allGroups-[group_system_units]; - }; + +diag_log format ["Log: [while_gc_groups.sqf] done %1", time];