Arma 3 Scripting

Command in Positions

findEmptyPosition

Also available as Markdown and JSON, or read the original wiki page.

Description

Searches for an empty area around the specified position, starting from the center looking for an empty areaRadius and looks as far away as areaRadius + maxDistance. This command ignores moving objects present within the search area. The search area can be preloaded with findEmptyPositionReady command.

Note

This command does not work outside of world dimensions and will always return the provided center. Objects outside the world dimensions will not be considered in the detection either.

Syntax

center findEmptyPosition [areaRadius, maxDistance, vehicleType]

Parameters:

Returns: Position3D - a suitable empty position or empty array [] if not found

Examples

Example 1

_position = getPosASL player findEmptyPosition [0, 100];

Example 2

_position = _center findEmptyPosition [10,100,"UH60M_EP1"];

Example 3

Check if exact position is empty:

_position = _center findEmptyPosition [0, 0, "B_Boat_Armed_01_minigun_F"];

See also

findEmptyPositionReady · selectBestPlaces · isFlatEmpty · BIS_fnc_findSafePos

Community notes

Killzone_Kid

Keep search radius short and sweet, under 50 metres maybe. Searching big area takes long time and will result in your game stop responding until the search is over. isFlatEmpty is probably more suitable for a larger area search.

old_man_auz

I think the radius parameter should be treated as a 'minimum distance' from the centre position. I found that the parameter name radius was not very clear. Also, if radius is greater than max distance then the function will always return an empty array.

Here is an snippet of code I use to find a safe landing zone for an extraction helicopter. It may be useful for someone.

_centre = [getMarkerPos "marker", random 150, random 360] call BIS_fnc_relPos;
_extraction_point = [];
_max_distance = 100;
while { count _extraction_point < 1 } do
{
    _extraction_point = _centre findEmptyPosition [30, _max_distance, "UH60M_EP1"];
    _max_distance = _max_distance + 50;
};

In the above example, make sure that "_max_distance" is greater than 30, otherwise the while loop will go forever.