Arma 3 Scripting

Command in Program Flow

goto

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

Description

Break script flow and go to given label (defined by # - NOT to be confused with SQF's hash sign!)

Warning

This command only works in SQS Syntax.

Note

Note that labels are not case sensitive and are searched for from the top of the script, so multiple occurrences of a label will only result in the topmost one ever being found.

Syntax

goto label

Parameters:

Returns: Nothing

Examples

Example 1

goto "myLabel"
player setDamage 1

#myLabel
hint "you successfully avoided death!"

See also

Control Structures · SQS to SQF conversion

Community notes

Hardrock

Notes from before the conversion:

  • This function works only inside of SQS script.
  • The search for labels always begins at the top of the script so that if there are multiple occurrences of a label the first occurrence will always be the one found.
  • Because of the searching order, it is faster to place loops which are executed often at the top of a script.
  • Labels are not case sensitive.
  • Loops which look something like the example below should be avoided as many of them could cause the mission to slow down:
#wait
if (condition) then { goto "wait" }

It is better to use the @ command to wait for a condition to be true, or put a small delay into the wait loop.

Example:

  • While it is not required to include a delay in a loop, such a loop without a delay can cause the script to slow the game down, as the loop will be executed many times before the game engine interrupts the script.
  • Unless you really want the loop to execute multiple times during a frame, you should include a small delay.
  • You would need to have many scripts running for this to be a significant issue.
  • Deciding whether to use a script with a loop or a trigger or even a @ statement to detect a condition is a complicated matter and should be subject to experimentation.
UNN

A goto command called within a forEach loop will only execute a single jump to goto, once the forEach loop has finished:

{ goto "wait" } forEach [0, 1, 2, 3, 4]