DMS_Exile/@ExileServer/addons/a3_dms/scripts/CleanUp.sqf
eraser1 a4144c7c07 More Fixes!
FSM should now call all of the functions...

Fixed debug messages for selectmission

Added recursive call for cleanup for typeName ARRAY arguments

Fixed parsing for FillCrate

Fixed script errors and removed some RPT spam from missionsmonitor

Allow groups for missionsuccesstate

Removed debug log for converting data type into array for TargetsKilled
2015-08-31 02:52:46 -05:00

119 lines
2.9 KiB
Plaintext

/*
DMS_CleanUp
Created by eraser1
Usage:
[
_objectOrGroup1,
_objectOrGroup2,
...
_objectOrGroupN
] call DMS_CleanUp;
Alternative Usage:
_objectOrGroup call DMS_CleanUp;
*/
if (DMS_DEBUG) then
{
diag_log ("DMS_DEBUG CleanUp :: CLEANING UP: "+str _this);
};
if !((typeName _this) == "ARRAY") then
{
if (DMS_DEBUG) then
{
diag_log ("DMS_DEBUG CleanUp :: Converting single object into array: "+str _this);
};
_this = [_this];
};
/*
if ([_this,20] call DMS_isPlayerNearbyARRAY) exitWith //<-----Not sure if it's more/less efficient
{
[30, DMS_CleanUp, _this, false] call ExileServer_system_thread_addTask;
};
*/
private ["_skippedObjects","_clean"];
_skippedObjects = [];
_clean =
{
_this enableSimulationGlobal false;
_this removeAllMPEventHandlers "mpkilled";
_this removeAllMPEventHandlers "mphit";
_this removeAllMPEventHandlers "mprespawn";
_this removeAllEventHandlers "FiredNear";
_this removeAllEventHandlers "HandleDamage";
_this removeAllEventHandlers "Killed";
_this removeAllEventHandlers "Fired";
_this removeAllEventHandlers "GetOut";
_this removeAllEventHandlers "GetIn";
_this removeAllEventHandlers "Local";
deleteVehicle _this;
};
{
if ((typeName _x) == "OBJECT") then
{
if (isNull _x) exitWith {};
if !([_x,DMS_CleanUp_PlayerNearLimit] call ExileServer_util_position_isPlayerNearby) then
{
_x call _clean;
}
else
{
_skippedObjects pushBack _x;
if (DMS_DEBUG) then
{
diag_log format ["DMS_DEBUG CleanUp :: Skipping cleanup for |%1|, player within %2 meters!",_x,DMS_CleanUp_PlayerNearLimit];
};
};
}
else
{
if ((typeName _x) == "GROUP") exitWith
{
if (!isNull _x) then
{
// Group cleanup should only be called when it has to be deleted regardless, so no need to check for nearby players
{
_x call _clean;
false;
} count (units _x);
if(local _x)then
{
deleteGroup _x;
}
else
{
[groupOwner _x,"DeleteGroupPlz",[_x]] call ExileServer_system_network_send_to;
};
};
};
if ((typeName _x) == "ARRAY") exitWith
{
if (DMS_DEBUG) then
{
diag_log format ["DMS_DEBUG CleanUp :: Doing recursive call for ARRAY: %1",_x];
};
_x call DMS_CleanUp;
};
diag_log format ["DMS ERROR :: Attempted to call DMS_CleanUp on non- group or object %1 from array %2",_x,_this];
};
false;
} count _this;
if !(_skippedObjects isEqualTo []) then
{
DMS_CleanUpList pushBack [_skippedObjects,diag_tickTime,30];
};