Example Code: General Deletion: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Another fix)
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
'''fn_delete.sqf''':
'''fn_delete.sqf''':
{{codecomment|/*
<sqf>
Author: Lou Montana
/*
Author: Lou Montana
Description:
 
Deletes anything that is passed to it.
Description:
Deletes anything that is passed to it.
Parameters:
 
0: ANYTHING
Parameters:
1: NUMBER or ARRAY or STRING - see examples below
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)
Returns:
ANYTHING (false in case of a bad parameter, e.g null or number)
Examples:
 
cursorObject  call LM_fnc_delete
Examples:
group player  call LM_fnc_delete
cursorObject  call LM_fnc_delete
myLocation    call LM_fnc_delete
group player  call LM_fnc_delete
myScriptHandle call LM_fnc_delete
myLocation    call LM_fnc_delete
myTeamMember  call LM_fnc_delete
myScriptHandle call LM_fnc_delete
myControl      call LM_fnc_delete
myTeamMember  call LM_fnc_delete
myDisplay      call LM_fnc_delete
myControl      call LM_fnc_delete
mySimpleTask  call LM_fnc_delete
myDisplay      call LM_fnc_delete
"myMarker"    call LM_fnc_delete
mySimpleTask  call LM_fnc_delete
[myDisplay, 1] call LM_fnc_delete // display + errorCode
"myMarker"    call LM_fnc_delete
["myMarker", "local"]            call LM_fnc_delete // uses deleteMarkerLocal
[myDisplay, 1] call LM_fnc_delete // display + errorCode
["myIdentity", "identity"]        call LM_fnc_delete // uses deleteIdentity
["myMarker", "local"]            call LM_fnc_delete // uses deleteMarkerLocal
["myCustomStatus", "status"]      call LM_fnc_delete // uses deleteStatus
["myIdentity", "identity"]        call LM_fnc_delete // uses deleteIdentity
["myFrameworkTaskId", "task"]    call LM_fnc_delete // uses BIS_fnc_deleteTask
["myCustomStatus", "status"]      call LM_fnc_delete // uses deleteStatus
[units group player]              call LM_fnc_delete // USE [] for arrays!
["myFrameworkTaskId", "task"]    call LM_fnc_delete // uses BIS_fnc_deleteTask
[waypoints group player select 3] call LM_fnc_delete // waypoint - USE [] as a waypoint is an array
[units group player]              call LM_fnc_delete // USE [] for arrays!
[group player, 3]                call LM_fnc_delete // waypoint as well
[waypoints group player select 3] call LM_fnc_delete // waypoint - USE [] as a waypoint is an array
blufor            call LM_fnc_delete // deletes all the blufor units (keeping the side centre)
[group player, 3]                call LM_fnc_delete // waypoint as well
[blufor, "center"] call LM_fnc_delete // deletes the side centre
blufor            call LM_fnc_delete // deletes all the blufor units (keeping the side centre)
[myArray, 3]      call LM_fnc_delete // myArray [[deleteAt]] 3
[blufor, "center"] call LM_fnc_delete // deletes the side centre
[myArray, [0, 3]]  call LM_fnc_delete // myArray [[deleteRange]] [0, 3]
[myArray, 3]      call LM_fnc_delete // myArray deleteAt 3
[<nowiki/>[group player, "myMarker", blufor, myScriptHandle]] call LM_fnc_delete // everything can be mixed together
[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",
params [
["_parameter", {}, [0, [], ""]]
"_argument",
];
["_parameter", {}, [0, [], ""]]
];
[[if]] ([[isNil]] "_argument") [[exitWith]] { [[false]] };
 
[[if]] (
if (isNil "_argument" ||
_argument [[isEqualTo]] [[objNull]] [[a or b|<nowiki/>||]]
{
_argument [[isEqualTo]] [[grpNull]] [[a or b|<nowiki/>||]]
_argument in [objNull, grpNull, controlNull, displayNull, locationNull, scriptNull, taskNull, teamMemberNull] ||
_argument [[isEqualTo]] [[controlNull]] [[a or b|<nowiki/>||]]
{ _argument isEqualTypeAny [0, {}, configNull, missionNamespace] }
_argument [[isEqualTo]] [[displayNull]] [[a or b|<nowiki/>||]]
}
_argument [[isEqualTo]] [[locationNull]] [[a or b|<nowiki/>||]]
) exitWith { false };
_argument [[isEqualTo]] [[scriptNull]] [[a or b|<nowiki/>||]]
 
_argument [[isEqualTo]] [[teamMemberNull]] [[a or b|<nowiki/>||]] {{cc|[[isNull]] exception}}
if (_argument isEqualType objNull) exitWith // ...the initial reason this function was written
_argument [[isEqualTo]] [[taskNull]] [[a or b|<nowiki/>||]]
{
_argument [[isEqualType]] 0 [[a or b|<nowiki/>||]]
if (vehicle _argument == _argument) then
_argument [[isEqualType]] {} [[a or b|<nowiki/>||]]
{
_argument [[isEqualType]] [[configNull]] [[a or b|<nowiki/>||]]
if (crew _argument isNotEqualTo []) then
_argument [[isEqualType]] [[missionNamespace]]
{
) [[exitWith]] { [[false]] };
{ _argument deleteVehicleCrew _x } forEach crew _argument;
};
[[if]] (_argument [[isEqualType]] [[objNull]]) [[exitWith]] {{cc|...the initial reason this function was written}}
private _vehicleCargo = getVehicleCargo _argument;
{
if (_vehicleCargo isNotEqualTo []) then
[[if]] ([[vehicle]] _argument [[a == b|==]] _argument) [[then]]
{
{
[_vehicleCargo] call LM_fnc_delete;
[[if]] [[! a|!]]([[crew]] _argument [[isEqualTo]] []) [[then]]
};
{
deleteVehicle _argument;
{ _argument [[deleteVehicleCrew]] _x } [[forEach]] [[crew]] _argument;
} else {
};
objectParent _argument deleteVehicleCrew _argument;
[[deleteVehicle]] _argument;
};
} [[else]] {
};
[[objectParent]] _argument [[deleteVehicleCrew]] _argument;
if (_argument isEqualType grpNull) exitWith
};
{
};
if (!isNil "_parameter" && { _parameter isEqualType 0 }) exitWith { deleteWaypoint [_argument, _parameter] };
[[if]] (_argument [[isEqualType]] [[grpNull]]) [[exitWith]]
[units _argument] call LM_fnc_delete;
{
deleteGroup _argument;
[[if]] (![[isNil]] "_parameter" [[a && b|&&]] { _parameter [[isEqualType]] 0 }) [[exitWith]] { [[deleteWaypoint]] [_argument, _parameter] };
};
[[[units]] _argument] [[call]] LM_fnc_delete;
if (_argument isEqualType []) exitWith
[[deleteGroup]] _argument;
{
};
private _mustExit = false;
[[if]] (_argument [[isEqualType]] []) [[exitWith]]
if (!isNil "_parameter") then
{
{
[[private]] _mustExit [[a = b|=]] [[false]];
if (_parameter isEqualType 0) exitWith { _mustExit = true; _argument deleteAt _parameter };
[[if]] (![[isNil]] "_parameter") [[then]]
if (_parameter isEqualType [] && { count _item1 > 1 && _item1 isEqualTypeAll 0 }) exitWith
{
{
[[if]] (_parameter [[isEqualType]] 0) [[exitWith]] { _mustExit [[a = b|=]] [[true]]; _argument [[deleteAt]] _parameter };
_mustExit = true;
[[if]] (_parameter [[isEqualType]] [] [[a && b|&&]] { [[count]] _item1 [[a greater b|>]] 1 [[a && b|&&]] _item1 [[isEqualTypeAll]] 0 }) [[exitWith]]
_parameter params ["_from", "_range"];
{
_argument deleteRange [_from, _range];
_mustExit [[a = b|=]] [[true]];
};
_parameter [[params]] ["_from", "_range"];
};
_argument [[deleteRange]] [_from, _range];
if (_mustExit) exitWith {};
};
{ [_x] call LM_fnc_delete } forEach _argument;
};
};
[[if]] (_mustExit) [[exitWith]] {};
if (_argument isEqualType "") exitWith
{ [_x] [[call]] LM_fnc_delete } [[forEach]] _argument;
{
};
private _mustExit = false;
[[if]] (_argument [[isEqualType]] "") [[exitWith]]
if (!isNil "_parameter" && { _parameter isEqualType "" }) then
{
{
[[private]] _mustExit [[a = b|=]] [[false]];
if (_parameter == "identity") exitWith { _mustExit = true; deleteIdentity _argument };
[[if]] (![[isNil]] "_parameter" [[a && b|&&]] { _parameter [[isEqualType]] "" }) [[then]]
if (_parameter == "status")  exitWith { _mustExit = true; deleteStatus _argument };
{
if (_parameter == "local")    exitWith { _mustExit = true; deleteMarkerLocal _argument };
[[if]] (_parameter [[a == b|==]] "identity") [[exitWith]] { _mustExit [[a = b|=]] [[true]]; [[deleteIdentity]] _argument };
if (_parameter == "task")    exitWith
[[if]] (_parameter [[a == b|==]] "status")  [[exitWith]] { _mustExit [[a = b|=]] [[true]]; [[deleteStatus]] _argument };
{
[[if]] (_parameter [[a == b|==]] "local")    [[exitWith]] { _mustExit [[a = b|=]] [[true]]; [[deleteMarkerLocal]] _argument };
_mustExit = true;
[[if]] (_parameter [[a == b|==]] "task")    [[exitWith]]
[_argument, allUnits + allDeadMen + [blufor, opfor, independent, civilian]] call BIS_fnc_deleteTask;
{
};
_mustExit [[a = b|=]] [[true]];
};
[_argument, [[allUnits]] [[+]] [[allDeadMen]] [[+]] [blufor, [[opfor]], [[independent]], [[civilian]]]] [[call]] [[BIS_fnc_deleteTask]];
if (_mustExit) exitWith {};
};
deleteMarker _argument;
};
};
[[if]] (_mustExit) [[exitWith]] {};
if (_argument isEqualType scriptNull)     exitWith { terminate _argument };
[[deleteMarker]] _argument;
if (_argument isEqualType locationNull)  exitWith { deleteLocation _argument };
};
if (_argument isEqualType blufor)        exitWith
[[if]] (_argument [[isEqualType]] [[scriptNull]])    [[exitWith]] { [[terminate]] _argument };
{
[[if]] (_argument [[isEqualType]] [[locationNull]])  [[exitWith]] { [[deleteLocation]] _argument };
if (!isNil "_parameter" && { _parameter isEqualType "" && { _parameter == "center" } }) then
[[if]] (_argument [[isEqualType]] [[blufor]])        [[exitWith]]
{
{
deleteCenter _argument;
[[if]] (![[isNil]] "_parameter" [[a && b|&&]] { _parameter [[isEqualType]] "" [[a && b|&&]] { _parameter [[a == b|==]] "center" } }) [[then]]
} else {
{
[allGroups select { side _x == _argument }] call LM_fnc_delete;
[[deleteCenter]] _argument;
};
} [[else]] {
};
[[[allGroups]] [[select]] { [[side]] _x [[a == b|==]] _argument }] [[call]] LM_fnc_delete;
if (_argument isEqualType controlNull) exitWith { ctrlDelete _argument };
};
if (_argument isEqualType displayNull) exitWith
};
{
[[if]] (_argument [[isEqualType]] [[controlNull]]) [[exitWith]] { [[ctrlDelete]] _argument };
private _exitCode = 0;
[[if]] (_argument [[isEqualType]] [[displayNull]]) [[exitWith]]
if (!isNil "_parameter" && { _parameter isEqualType 0 }) then { _exitCode = _parameter };
{
_argument closeDisplay _exitCode;
[[private]] _exitCode [[a = b|=]] 0;
};
[[if]] (![[isNil]] "_parameter" [[a && b|&&]] { _parameter [[isEqualType]] 0 }) [[then]] { _exitCode [[a = b|=]] _parameter };
if (_argument isEqualType taskNull && _parameter isEqualType objNull) exitWith { _parameter removeSimpleTask _argument };
_argument [[closeDisplay]] _exitCode;
if (_argument isEqualType teamMemberNull) exitWith { deleteTeam _argument };
};
 
[[if]] (_argument [[isEqualType]] [[taskNull]] [[a && b|&&]] _parameter [[isEqualType]] [[objNull]]) [[exitWith]] { _parameter [[removeSimpleTask]] _argument };
false;
[[if]] (_argument [[isEqualType]] [[teamMemberNull]]) [[exitWith]] { [[deleteTeam]] _argument };
</sqf>
[[false]];




[[Category:Example Code]]
[[Category:Example Code]]

Latest revision as of 23:28, 14 July 2022

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" || { _argument in [objNull, grpNull, controlNull, displayNull, locationNull, scriptNull, taskNull, teamMemberNull] || { _argument isEqualTypeAny [0, {}, configNull, missionNamespace] } } ) exitWith { false }; if (_argument isEqualType objNull) exitWith // ...the initial reason this function was written { if (vehicle _argument == _argument) then { if (crew _argument isNotEqualTo []) then { { _argument deleteVehicleCrew _x } forEach crew _argument; }; private _vehicleCargo = getVehicleCargo _argument; if (_vehicleCargo isNotEqualTo []) then { [_vehicleCargo] call LM_fnc_delete; }; 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;