{"name":"Example Code: General Deletion","title":"Example Code: General Deletion","type":"topic","url":"https://community.bistudio.com/wiki/Example_Code:_General_Deletion","revid":378119,"updated":"2026-02-20T13:52:34Z","aliases":[],"markdown":"**fn_delete.sqf**:\n\n```sqf\n/*\n    Author: Lou Montana\n\n    Description:\n        Deletes anything that is passed to it.\n\n    Parameters:\n        0: ANYTHING\n        1: NUMBER or ARRAY or STRING - see examples below\n\n    Returns:\n        ANYTHING (false in case of a bad parameter, e.g null or number)\n\n    Examples:\n        cursorObject                        call LM_fnc_delete\n        group player                        call LM_fnc_delete\n        myLocation                            call LM_fnc_delete\n        myScriptHandle                        call LM_fnc_delete\n        myTeamMember                        call LM_fnc_delete\n        myControl                            call LM_fnc_delete\n        myDisplay                            call LM_fnc_delete\n        mySimpleTask                        call LM_fnc_delete\n        \"myMarker\"                            call LM_fnc_delete\n        [myDisplay, 1]                        call LM_fnc_delete // display + errorCode\n        [\"myMarker\", \"local\"]                call LM_fnc_delete // uses deleteMarkerLocal\n        [\"myIdentity\", \"identity\"]            call LM_fnc_delete // uses deleteIdentity\n        [\"myCustomStatus\", \"status\"]        call LM_fnc_delete // uses deleteStatus\n        [\"myFrameworkTaskId\", \"task\"]        call LM_fnc_delete // uses BIS_fnc_deleteTask\n        [units group player]                call LM_fnc_delete // USE [] for arrays!\n        [waypoints group player select 3]    call LM_fnc_delete // waypoint - USE [] as a waypoint is an array\n        [group player, 3]                    call LM_fnc_delete // waypoint as well\n        blufor                                call LM_fnc_delete // deletes all the blufor units (keeping the side centre)\n        [blufor, \"center\"]                    call LM_fnc_delete // deletes the side centre\n        [myArray, 3]                        call LM_fnc_delete // myArray deleteAt 3\n        [myArray, [0, 3]]                    call LM_fnc_delete // myArray deleteRange [0, 3]\n        [[group player, \"myMarker\", blufor, myScriptHandle]] call LM_fnc_delete // everything can be mixed together\n*/\n\nparams [\n    \"_argument\",\n    [\"_parameter\", {}, [0, [], \"\"]]\n];\n\nif (isNil \"_argument\" ||\n    {\n        _argument in [objNull, grpNull, controlNull, displayNull, locationNull, scriptNull, taskNull, teamMemberNull] ||\n        { _argument isEqualTypeAny [0, {}, configNull, missionNamespace] }\n    }\n) exitWith { false };\n\nif (_argument isEqualType objNull) exitWith // ...the initial reason this function was written\n{\n    if (vehicle _argument == _argument) then\n    {\n        if (crew _argument isNotEqualTo []) then\n        {\n            { _argument deleteVehicleCrew _x } forEach crew _argument;\n        };\n        private _vehicleCargo = getVehicleCargo _argument;\n        if (_vehicleCargo isNotEqualTo []) then\n        {\n            [_vehicleCargo] call LM_fnc_delete;\n        };\n        deleteVehicle _argument;\n    } else {\n        objectParent _argument deleteVehicleCrew _argument;\n    };\n};\n\nif (_argument isEqualType grpNull) exitWith\n{\n    if (!isNil \"_parameter\" && { _parameter isEqualType 0 }) exitWith { deleteWaypoint [_argument, _parameter] };\n    [units _argument] call LM_fnc_delete;\n    deleteGroup _argument;\n};\n\nif (_argument isEqualType []) exitWith\n{\n    private _mustExit = false;\n    if (!isNil \"_parameter\") then\n    {\n        if (_parameter isEqualType 0) exitWith { _mustExit = true; _argument deleteAt _parameter };\n        if (_parameter isEqualType [] && { count _item1 > 1 && _item1 isEqualTypeAll 0 }) exitWith\n        {\n            _mustExit = true;\n            _parameter params [\"_from\", \"_range\"];\n            _argument deleteRange [_from, _range];\n        };\n    };\n    if (_mustExit) exitWith {};\n    { [_x] call LM_fnc_delete } forEach _argument;\n};\n\nif (_argument isEqualType \"\") exitWith\n{\n    private _mustExit = false;\n    if (!isNil \"_parameter\" && { _parameter isEqualType \"\" }) then\n    {\n        if (_parameter == \"identity\") exitWith { _mustExit = true; deleteIdentity _argument };\n        if (_parameter == \"status\")   exitWith { _mustExit = true; deleteStatus _argument };\n        if (_parameter == \"local\")    exitWith { _mustExit = true; deleteMarkerLocal _argument };\n        if (_parameter == \"task\")     exitWith\n        {\n            _mustExit = true;\n            [_argument, allUnits + allDeadMen + [blufor, opfor, independent, civilian]] call BIS_fnc_deleteTask;\n        };\n    };\n    if (_mustExit) exitWith {};\n    deleteMarker _argument;\n};\n\nif (_argument isEqualType scriptNull)     exitWith { terminate _argument };\nif (_argument isEqualType locationNull)   exitWith { deleteLocation _argument };\n\nif (_argument isEqualType blufor)         exitWith\n{\n    if (!isNil \"_parameter\" && { _parameter isEqualType \"\" && { _parameter == \"center\" } }) then\n    {\n        deleteCenter _argument;\n    } else {\n        [allGroups select { side _x == _argument }] call LM_fnc_delete;\n    };\n};\n\nif (_argument isEqualType controlNull) exitWith { ctrlDelete _argument };\nif (_argument isEqualType displayNull) exitWith\n{\n    private _exitCode = 0;\n    if (!isNil \"_parameter\" && { _parameter isEqualType 0 }) then { _exitCode = _parameter };\n    _argument closeDisplay _exitCode;\n};\n\nif (_argument isEqualType taskNull && _parameter isEqualType objNull) exitWith { _parameter removeSimpleTask _argument };\nif (_argument isEqualType teamMemberNull) exitWith { deleteTeam _argument };\n\nfalse;\n```","sections":[{"heading":null,"level":1,"markdown":"**fn_delete.sqf**:\n\n```sqf\n/*\n    Author: Lou Montana\n\n    Description:\n        Deletes anything that is passed to it.\n\n    Parameters:\n        0: ANYTHING\n        1: NUMBER or ARRAY or STRING - see examples below\n\n    Returns:\n        ANYTHING (false in case of a bad parameter, e.g null or number)\n\n    Examples:\n        cursorObject                        call LM_fnc_delete\n        group player                        call LM_fnc_delete\n        myLocation                            call LM_fnc_delete\n        myScriptHandle                        call LM_fnc_delete\n        myTeamMember                        call LM_fnc_delete\n        myControl                            call LM_fnc_delete\n        myDisplay                            call LM_fnc_delete\n        mySimpleTask                        call LM_fnc_delete\n        \"myMarker\"                            call LM_fnc_delete\n        [myDisplay, 1]                        call LM_fnc_delete // display + errorCode\n        [\"myMarker\", \"local\"]                call LM_fnc_delete // uses deleteMarkerLocal\n        [\"myIdentity\", \"identity\"]            call LM_fnc_delete // uses deleteIdentity\n        [\"myCustomStatus\", \"status\"]        call LM_fnc_delete // uses deleteStatus\n        [\"myFrameworkTaskId\", \"task\"]        call LM_fnc_delete // uses BIS_fnc_deleteTask\n        [units group player]                call LM_fnc_delete // USE [] for arrays!\n        [waypoints group player select 3]    call LM_fnc_delete // waypoint - USE [] as a waypoint is an array\n        [group player, 3]                    call LM_fnc_delete // waypoint as well\n        blufor                                call LM_fnc_delete // deletes all the blufor units (keeping the side centre)\n        [blufor, \"center\"]                    call LM_fnc_delete // deletes the side centre\n        [myArray, 3]                        call LM_fnc_delete // myArray deleteAt 3\n        [myArray, [0, 3]]                    call LM_fnc_delete // myArray deleteRange [0, 3]\n        [[group player, \"myMarker\", blufor, myScriptHandle]] call LM_fnc_delete // everything can be mixed together\n*/\n\nparams [\n    \"_argument\",\n    [\"_parameter\", {}, [0, [], \"\"]]\n];\n\nif (isNil \"_argument\" ||\n    {\n        _argument in [objNull, grpNull, controlNull, displayNull, locationNull, scriptNull, taskNull, teamMemberNull] ||\n        { _argument isEqualTypeAny [0, {}, configNull, missionNamespace] }\n    }\n) exitWith { false };\n\nif (_argument isEqualType objNull) exitWith // ...the initial reason this function was written\n{\n    if (vehicle _argument == _argument) then\n    {\n        if (crew _argument isNotEqualTo []) then\n        {\n            { _argument deleteVehicleCrew _x } forEach crew _argument;\n        };\n        private _vehicleCargo = getVehicleCargo _argument;\n        if (_vehicleCargo isNotEqualTo []) then\n        {\n            [_vehicleCargo] call LM_fnc_delete;\n        };\n        deleteVehicle _argument;\n    } else {\n        objectParent _argument deleteVehicleCrew _argument;\n    };\n};\n\nif (_argument isEqualType grpNull) exitWith\n{\n    if (!isNil \"_parameter\" && { _parameter isEqualType 0 }) exitWith { deleteWaypoint [_argument, _parameter] };\n    [units _argument] call LM_fnc_delete;\n    deleteGroup _argument;\n};\n\nif (_argument isEqualType []) exitWith\n{\n    private _mustExit = false;\n    if (!isNil \"_parameter\") then\n    {\n        if (_parameter isEqualType 0) exitWith { _mustExit = true; _argument deleteAt _parameter };\n        if (_parameter isEqualType [] && { count _item1 > 1 && _item1 isEqualTypeAll 0 }) exitWith\n        {\n            _mustExit = true;\n            _parameter params [\"_from\", \"_range\"];\n            _argument deleteRange [_from, _range];\n        };\n    };\n    if (_mustExit) exitWith {};\n    { [_x] call LM_fnc_delete } forEach _argument;\n};\n\nif (_argument isEqualType \"\") exitWith\n{\n    private _mustExit = false;\n    if (!isNil \"_parameter\" && { _parameter isEqualType \"\" }) then\n    {\n        if (_parameter == \"identity\") exitWith { _mustExit = true; deleteIdentity _argument };\n        if (_parameter == \"status\")   exitWith { _mustExit = true; deleteStatus _argument };\n        if (_parameter == \"local\")    exitWith { _mustExit = true; deleteMarkerLocal _argument };\n        if (_parameter == \"task\")     exitWith\n        {\n            _mustExit = true;\n            [_argument, allUnits + allDeadMen + [blufor, opfor, independent, civilian]] call BIS_fnc_deleteTask;\n        };\n    };\n    if (_mustExit) exitWith {};\n    deleteMarker _argument;\n};\n\nif (_argument isEqualType scriptNull)     exitWith { terminate _argument };\nif (_argument isEqualType locationNull)   exitWith { deleteLocation _argument };\n\nif (_argument isEqualType blufor)         exitWith\n{\n    if (!isNil \"_parameter\" && { _parameter isEqualType \"\" && { _parameter == \"center\" } }) then\n    {\n        deleteCenter _argument;\n    } else {\n        [allGroups select { side _x == _argument }] call LM_fnc_delete;\n    };\n};\n\nif (_argument isEqualType controlNull) exitWith { ctrlDelete _argument };\nif (_argument isEqualType displayNull) exitWith\n{\n    private _exitCode = 0;\n    if (!isNil \"_parameter\" && { _parameter isEqualType 0 }) then { _exitCode = _parameter };\n    _argument closeDisplay _exitCode;\n};\n\nif (_argument isEqualType taskNull && _parameter isEqualType objNull) exitWith { _parameter removeSimpleTask _argument };\nif (_argument isEqualType teamMemberNull) exitWith { deleteTeam _argument };\n\nfalse;\n```"}],"categories":["Example Code"],"groups":["Scripting"]}