Skip to content

Commit

Permalink
Update while_gc_groups.sqf
Browse files Browse the repository at this point in the history
  • Loading branch information
completely-burned committed Jul 13, 2021
1 parent 1934e11 commit 39d36d6
Showing 1 changed file with 38 additions and 21 deletions.
59 changes: 38 additions & 21 deletions glowing-octo-shame-arma2/dir/server/while_gc_groups.sqf
Original file line number Diff line number Diff line change
@@ -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];

0 comments on commit 39d36d6

Please sign in to comment.