Example Code: General Deletion: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
(Update)
m (Another fix)
Line 23: Line 23:
  mySimpleTask  call LM_fnc_delete
  mySimpleTask  call LM_fnc_delete
  "myMarker"    call LM_fnc_delete
  "myMarker"    call LM_fnc_delete
  [myControl, 1] call LM_fnc_delete
  [myDisplay, 1] call LM_fnc_delete // display + errorCode
  ["myMarker", "local"]           call LM_fnc_delete
  ["myMarker", "local"]             call LM_fnc_delete // uses deleteMarkerLocal
  ["myIdentity", "identity"]     call LM_fnc_delete
  ["myIdentity", "identity"]       call LM_fnc_delete // uses deleteIdentity
  ["myCustomStatus", "status"]   call LM_fnc_delete
  ["myCustomStatus", "status"]     call LM_fnc_delete // uses deleteStatus
  ["myFrameworkTaskId", "task"]   call LM_fnc_delete
  ["myFrameworkTaskId", "task"]     call LM_fnc_delete // uses BIS_fnc_deleteTask
  [units group player]           call LM_fnc_delete
  [units group player]             call LM_fnc_delete // USE [] for arrays!
  waypoints group player select 3 call LM_fnc_delete
  [waypoints group player select 3] call LM_fnc_delete // waypoint - USE [] as a waypoint is an array
  [group player, 3]               call LM_fnc_delete // waypoint as well
  [group player, 3]                 call LM_fnc_delete // waypoint as well
  [blufor]          call LM_fnc_delete // deletes all the blufor units
  blufor             call LM_fnc_delete // deletes all the blufor units (keeping the side centre)
  [blufor, "center"] call LM_fnc_delete // deletes the side center
  [blufor, "center"] call LM_fnc_delete // deletes the side centre
  [myArray, 3]      call LM_fnc_delete // myArray [[deleteAt]] 3
  [myArray, 3]      call LM_fnc_delete // myArray [[deleteAt]] 3
  [myArray, [0, 3]]  call LM_fnc_delete // myArray [[deleteRange]] [0, 3]
  [myArray, [0, 3]]  call LM_fnc_delete // myArray [[deleteRange]] [0, 3]
  [<nowiki/>[group player, "myMarker", blufor, myScriptHandle]] call LM_fnc_delete // everything can be mixed
  [<nowiki/>[group player, "myMarker", blufor, myScriptHandle]] call LM_fnc_delete // everything can be mixed together
  */}}
  */}}
   
   
  [[params]] [
  [[params]] [
  "_argument",
  "_argument",
  ["_parameter", [[objNull]], [0, [], ""]]
  ["_parameter", {}, [0, [], ""]]
  ];
  ];
   
   
Line 80: Line 80:
  [[if]] (_argument [[isEqualType]] []) [[exitWith]]
  [[if]] (_argument [[isEqualType]] []) [[exitWith]]
  {
  {
_argument [[params]] ["_item0", "_item1"];
  [[private]] _mustExit [[a = b|=]] [[false]];
  [[private]] _mustExit [[a = b|=]] [[false]];
  [[if]] (![[isNil]] "_item0" [[a && b|&&]] [[! a|!]][[isNil]] "_item1") [[then]]
  [[if]] (![[isNil]] "_parameter") [[then]]
  {
  {
  [[if]] (_item1 [[isEqualType]] 0) [[then]]
  [[if]] (_parameter [[isEqualType]] 0) [[exitWith]] { _mustExit [[a = b|=]] [[true]]; _argument [[deleteAt]] _parameter };
[[if]] (_parameter [[isEqualType]] [] [[a && b|&&]] { [[count]] _item1 [[a greater b|>]] 1 [[a && b|&&]] _item1 [[isEqualTypeAll]] 0 }) [[exitWith]]
  {
  {
  [[if]] (_item0 [[isEqualType]] [[grpNull]]) [[exitWith]] { _mustExit [[a = b|=]] [[true]]; [[deleteWaypoint]] [_item0, _item1] };
  _mustExit [[a = b|=]] [[true]];
[[if]] (_item0 [[isEqualType]] [])      [[exitWith]] { _mustExit [[a = b|=]] [[true]]; _item0 [[deleteAt]] _item1 };
  _parameter [[params]] ["_from", "_range"];
};
  _argument [[deleteRange]] [_from, _range];
[[if]] (_item1 [[isEqualType]] [] [[a && b|&&]] { [[count]] _item1 [[a greater b|>]] 1 [[a && b|&&]] _item1 [[isEqualTypeAll]] 0 }) [[exitWith]]
{
  _item1 [[params]] ["_from", "_range"];
  _item0 [[deleteRange]] [_from, _range];
  };
  };
  };
  };

Revision as of 23:16, 8 November 2020

fn_delete.sqf:

/*
	Author: Lou Montana

	Description:
		Deletes anything that is passed to it.

	Parameters:
		0: ANYTHING
		1: NUMBER or ARRAY or STRING - see examples below

	Returns:
		ANYTHING (false in case of a bad parameter, e.g null or number)

	Examples:
		cursorObject   call LM_fnc_delete
		group player   call LM_fnc_delete
		myLocation     call LM_fnc_delete
		myScriptHandle call LM_fnc_delete
		myTeamMember   call LM_fnc_delete
		myControl      call LM_fnc_delete
		myDisplay      call LM_fnc_delete
		mySimpleTask   call LM_fnc_delete
		"myMarker"     call LM_fnc_delete
		[myDisplay, 1] call LM_fnc_delete // display + errorCode
		["myMarker", "local"]             call LM_fnc_delete // uses deleteMarkerLocal
		["myIdentity", "identity"]        call LM_fnc_delete // uses deleteIdentity
		["myCustomStatus", "status"]      call LM_fnc_delete // uses deleteStatus
		["myFrameworkTaskId", "task"]     call LM_fnc_delete // uses BIS_fnc_deleteTask
		[units group player]              call LM_fnc_delete // USE [] for arrays!
		[waypoints group player select 3] call LM_fnc_delete // waypoint - USE [] as a waypoint is an array
		[group player, 3]                 call LM_fnc_delete // waypoint as well
		blufor             call LM_fnc_delete // deletes all the blufor units (keeping the side centre)
		[blufor, "center"] call LM_fnc_delete // deletes the side centre
		[myArray, 3]       call LM_fnc_delete // myArray deleteAt 3
		[myArray, [0, 3]]  call LM_fnc_delete // myArray deleteRange [0, 3]
		[[group player, "myMarker", blufor, myScriptHandle]] call LM_fnc_delete // everything can be mixed together
*/

params [
	"_argument",
	["_parameter", {}, [0, [], ""]]
];

if (isNil "_argument") exitWith { false };
if (
	_argument isEqualTo objNull ||
	_argument isEqualTo grpNull ||
	_argument isEqualTo controlNull ||
	_argument isEqualTo displayNull ||
	_argument isEqualTo locationNull ||
	_argument isEqualTo scriptNull ||
	_argument isEqualTo teamMemberNull || // isNull exception
	_argument isEqualTo taskNull ||
	_argument isEqualType 0 ||
	_argument isEqualType {} ||
	_argument isEqualType configNull ||
	_argument isEqualType missionNamespace
) exitWith { false };

if (_argument isEqualType objNull) exitWith // ...the initial reason this function was written
{
	if (vehicle _argument == _argument) then
	{
		if !(crew _argument isEqualTo []) then
		{
			{ _argument deleteVehicleCrew _x } forEach crew _argument;
		};
		deleteVehicle _argument;
	} else {
		objectParent _argument deleteVehicleCrew _argument;
	};
};
if (_argument isEqualType grpNull) exitWith
{
	if (!isNil "_parameter" && { _parameter isEqualType 0 }) exitWith { deleteWaypoint [_argument, _parameter] };
	[[[units]] _argument] call LM_fnc_delete;
	deleteGroup _argument;
};
if (_argument isEqualType []) exitWith
{
	private _mustExit = false;
	if (!isNil "_parameter") then
	{
		if (_parameter isEqualType 0) exitWith { _mustExit = true; _argument deleteAt _parameter };
		if (_parameter isEqualType [] && { count _item1 > 1 && _item1 isEqualTypeAll 0 }) exitWith
		{
			_mustExit = true;
			_parameter params ["_from", "_range"];
			_argument deleteRange [_from, _range];
		};
	};
	if (_mustExit) exitWith {};
	{ [_x] call LM_fnc_delete } forEach _argument;
};
if (_argument isEqualType "") exitWith
{
	private _mustExit = false;
	if (!isNil "_parameter" && { _parameter isEqualType "" }) then
	{
		if (_parameter == "identity") exitWith { _mustExit = true; deleteIdentity _argument };
		if (_parameter == "status")   exitWith { _mustExit = true; deleteStatus _argument };
		if (_parameter == "local")    exitWith { _mustExit = true; deleteMarkerLocal _argument };
		if (_parameter == "task")     exitWith
		{
			_mustExit = true;
			[_argument, allUnits + allDeadMen + [blufor, opfor, independent, civilian]] call BIS_fnc_deleteTask;
		};
	};
	if (_mustExit) exitWith {};
	deleteMarker _argument;
};
if (_argument isEqualType scriptNull)     exitWith { terminate _argument };
if (_argument isEqualType locationNull)   exitWith { deleteLocation _argument };
if (_argument isEqualType blufor)         exitWith
{
	if (!isNil "_parameter" && { _parameter isEqualType "" && { _parameter == "center" } }) then
	{
		deleteCenter _argument;
	} else {
		[[[allGroups]] select { side _x == _argument }] call LM_fnc_delete;
	};
};
if (_argument isEqualType controlNull) exitWith { ctrlDelete _argument };
if (_argument isEqualType displayNull) exitWith
{
	private _exitCode = 0;
	if (!isNil "_parameter" && { _parameter isEqualType 0 }) then { _exitCode = _parameter };
	_argument closeDisplay _exitCode;
};
if (_argument isEqualType taskNull && _parameter isEqualType objNull) exitWith { _parameter removeSimpleTask _argument };
if (_argument isEqualType teamMemberNull) exitWith { deleteTeam _argument };

false;