Arma 3 Scripting

exitWith

  • Arma 3 v0.50
  • First in Armed Assault v1.00

Command · Markdown · JSON · original wiki page

Description

Exits the current code scope. Often used for exiting do, for, count, forEach or the whole script.

Note

See Variables - Local Variables Scope for more information.

Syntax

ifType exitWith code

Parameters:

Returns: Anything

Examples

Example 1

systemChat "start";
private _condition = true;

if (_condition) then
{
    if (true) exitWith
    {
        systemChat "exiting if _condition scope";
    };
    systemChat "never shown";
};

systemChat "exiting #1 worked";

if (true) exitWith
{
    systemChat "exiting the main scope = leaving the whole script";
};

systemChat "never shown - the script has already ended";

Example 2

for "_j" from 1 to 10 do
{
    systemChat format ["%1", _j];

    // the for loop will cease and code execution will continue after the end of the loop
    if (_j == 5) exitWith
    {
        systemChat "5 is enough";
    };
};
systemChat "Complete";

Example 3

Most loops will also terminate when their scope is exited. To exit and terminate scopes which are called every frame such as onEachFrame and waitUntil use the following examples:

onEachFrame {
    if (!alive player) exitWith
    {
        onEachFrame {};
    };
};
_time = time + 10;
waitUntil
{
    if (time > _time) exitWith { true };
    false
};

Example 4

while { true } do
{
    if (alive player) then
    {
        if (time > 300) exitWith // [wrong] - it will only leave the "if alive player" scope, remaining in the "while true" loop forever
        {
            hint "exiting";
        };
    };
};

Example 5

if (_condition) exitWith
{
    hint "reached";
};
// else { hint "not reached" }; // [wrong] - using else does not work and makes no sense here
if (_condition) exitWith
{
    hint "reached";
};
hint "not reached"; // [correct] - if _condition is met, the scope has already been exited by now

See also

scopeName · breakOut · breakTo · else · Control Structures · then · assert · try · catch · throw

Community notes

RoehrenRadio

Since Arma 2 uses Blocks in FSM as any ordinary Handle like while, for etc. in Scripts, ExitWith also only closes the Block in the FSM.

Killzone_Kid

The command will exit the current scope - no ifs no buts. If the current scope is a loop, it will exit the loop. If the current scope is the main body of a script, it will exit the script. For more understanding of scopes and exitWith have a look at this resource.

Killzone_Kid

exitWith cannot be used in event handlers with override ability to simply exit with override value. The following is incorrect:

// INCORRECT USAGE
onMapSingleClick { if (!isServer) exitWith { true } };

The override value must be returned in the main scope of EH, but since it is exited with exitWith, it never happens. The correct way in this case would be:

// CORRECT USAGE
onMapSingleClick { call { if (!isServer) exitWith { true } } };

exitWith will exit current call scope only and override value therefore will appear in the main scope of the EH, right where we want it.