exitWith: Difference between revisions
Jump to navigation
Jump to search
Lou Montana (talk | contribs) m (Text replacement - "| arma |" to "| arma1 |") |
Lou Montana (talk | contribs) m (Text replacement - " ArmA2 " to " Arma 2 ") |
||
Line 64: | Line 64: | ||
<dd class="notedate">Posted on May 28, 2010 - 22:15 | <dd class="notedate">Posted on May 28, 2010 - 22:15 | ||
<dt class="note">[[User:Roehre|Roehre]] | <dt class="note">[[User:Roehre|Roehre]] | ||
<dd class="note">Since | <dd class="note">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. | ||
<dd class="notedate">Posted on August 04, 2013 - 12:20 | <dd class="notedate">Posted on August 04, 2013 - 12:20 |
Revision as of 02:42, 2 January 2021
Description
- Description:
- Exits current scope {...} it is executed from if condition evaluates true, creates new scope {...code...} and executes the given code in it. Often used for exiting do, for, count or forEach. Simply exiting waitUntil or onEachFrame scopes with exitWith will have no effect as these scopes are called repeatedly by the engine and require different handling to terminate (see Example 3).
- Groups:
- Program Flow
Syntax
Examples
- Example 1:
if (_x>5) exitWith {echo "_x is too big"; _x}
When _x is greater than 5, outputs message and terminates code in current level with value of _x.- Example 2:
for "_j" from 1 to 10 do { player sideChat format ["%1",_j]; if (_j==5) exitWith {player sideChat "5 is enough"}; }; player sideChat "Complete";
Only the "for" loop will exit when the exitWith condition has been fulfilled (not the whole script). Execution will continue after the end of the loop (player sideChat "Complete").- Example 3:
- Most loops will also terminate when their scope 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 }
Additional Information
Notes
-
Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
Notes
- Posted on May 28, 2010 - 22:15
- Roehre
- 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.
- Posted on August 04, 2013 - 12:20
- 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.
- Posted on January 06, 2014 - 13:41
- Naught
- To further explain Killzone_Kid's above statement, exitWith does not work as described within any subsequent inner scopes of a loop - it will only simply exit the current scope. For example, this code will not exit the while loop:
while {true} do { // 'while' scope if (player == (leader player)) then { // 'if-then' scope if (time > (5 * 60)) exitWith {}; // This will only exit the 'if-then' scope }; sleep 1; }; hint "Mission Started"; // This code will never execute
Bottom Section
- Posted on March 10, 2016 - 08:31 (UTC)
- 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.