exitWith: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - "{{Command " to "{{RV|type=command ")
m (Text replacement - " <!-- (DIS)?CONTINUE Notes -->" to "")
(5 intermediate revisions by the same user not shown)
Line 50: Line 50:


<dl class="command_description">
<dl class="command_description">
<!-- Note Section BEGIN -->
<dt><dt>
 
<dd class="notedate">Posted on May 28, 2010 - 22:15</dd>
<dd class="notedate">Posted on May 28, 2010 - 22:15
<dt class="note">[[User:Roehre|Roehre]]</dt>
<dt class="note">[[User:Roehre|Roehre]]
<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="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.
 
<dt><dt>
<dd class="notedate">Posted on August 04, 2013 - 12:20
<dd class="notedate">Posted on August 04, 2013 - 12:20</dd>
<dt class="note">[[User:Killzone_Kid|Killzone_Kid]]
<dt class="note">[[User:Killzone_Kid|Killzone_Kid]]</dt>
<dd class="note">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 [http://killzonekid.com/arma-scripting-tutorials-scopes/ this resource].
<dd class="note">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 [http://killzonekid.com/arma-scripting-tutorials-scopes/ this resource].
 
<dt><dt>
<dd class="notedate">Posted on January 06, 2014 - 13:41
<dd class="notedate">Posted on January 06, 2014 - 13:41</dd>
<dt class="note">[[User:NaughDylan|Naught]]
<dt class="note">[[User:NaughDylan|Naught]]</dt>
<dd class="note">To further explain [[User:Killzone_Kid|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:
<dd class="note">To further explain [[User:Killzone_Kid|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:
<dd class="note"><code>[[while]] {[[true]]} [[do]] { // 'while' scope
<dd class="note"><code>[[while]] {[[true]]} [[do]] { // 'while' scope
Line 72: Line 71:




<!-- Note Section END -->
</dl>
</dl>


Line 83: Line 81:




<!-- CONTINUE Notes -->
<dl class="command_description">
<dl class="command_description">
<dt></dt>
<dd class="notedate">Posted on March 10, 2016 - 08:31 (UTC)</dd>
<dd class="notedate">Posted on March 10, 2016 - 08:31 (UTC)</dd>
<dt class="note">[[User:Killzone Kid|Killzone Kid]]</dt>
<dt class="note">[[User:Killzone Kid|Killzone Kid]]</dt>
Line 96: Line 94:
[[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.
[[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.
</dd>
</dd>
 
<dt><dt>
<dd class="notedate">Posted on October 12, 2016 - 17:56 (UTC)</dd>
<dd class="notedate">Posted on October 12, 2016 - 17:56 (UTC)</dd>
<dt class="note">[[User:RHfront|RHfront]]</dt>
<dt class="note">[[User:RHfront|RHfront]]</dt>
Line 103: Line 101:
</dd>
</dd>
</dl>
</dl>
<!-- DISCONTINUE Notes -->

Revision as of 01:51, 6 April 2021

Hover & click on the images for description

Description

Description:
Description needed
Groups:
Program Flow

Syntax

Syntax:
Syntax needed
Parameters:
ifType: If Type
code: Code
Return Value:
Return value needed

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

See also:
See also needed

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
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


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.
Posted on October 12, 2016 - 17:56 (UTC)
RHfront
exitWith does not use standard "if-then" syntax, but a unique "if-exitWith" structure.
exitWith will NOT take else. Attempts to do so will result in "Error exitwith: Type Array, expected code".