goto: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - "|= Game name" to "|Game name=")
(Fix description, add example and remove link to "Script syntax" deleted page)
Line 7: Line 7:
____________________________________________________________________________________________
____________________________________________________________________________________________


| In [[sqs syntax|SQS script]] only: Go to given label.
| Break script flow and go to given label (defined by '''#''' - '''NOT''' to be confused with [[SQF syntax|SQF]]'s [[a_hash_b|hash sign]]!)
 
{{Warning | This command only works in [[SQS syntax]].}}
String argument is used here.
{{Informative | 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.}} |DESCRIPTION=
Make sure to use double quotes around label name in goto. Define the label with #. Note that labels are not case sensitive and that labels are searched for from the top of the script, so multiple occurrences of a label will only result in the top most one ever being found.|DESCRIPTION=
____________________________________________________________________________________________
____________________________________________________________________________________________


| '''goto''' label |SYNTAX=
| [[goto]] label |SYNTAX=


|p1= label: [[String]] |PARAMETER1=
|p1= label: [[String]] |PARAMETER1=
Line 20: Line 19:
____________________________________________________________________________________________
____________________________________________________________________________________________


| |SEEALSO=
|x1= <code>[[goto]] "myLabel"
[[player]] [[setDamage]] 1
 
'''#'''myLabel
[[hint]] "you successfully avoided death!"</code> |EXAMPLE1=
____________________________________________________________________________________________


| [[Control_Structures#SQS_syntax_.28deprecated.29|SQS Control Structures]], [[SQS to SQF conversion]], [[:Category:Command Group: Program Flow|Command Group: Program Flow]] |SEEALSO=
}}
}}


Line 29: Line 34:


<dd class="notedate">Posted on August 4, 2006 - 10:52
<dd class="notedate">Posted on August 4, 2006 - 10:52
<dt class="note">'''[[User:Hardrock|hardrock]]'''<dd class="note">''Notes from before the conversion:''
<dt class="note">[[User:Hardrock|hardrock]]
<dd class="note">''Notes from before the conversion:''


* This function works only inside of [[sqs syntax|SQS script]].
* This function works only inside of [[SQS syntax|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.
* 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.
* 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.
* 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:
* Loops which look something like the example below should be avoided as many of them could cause the mission to slow down:
<code>#wait
[[if]] (condition) [[then]] {[[goto]] "wait"}</code>


#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.
[[if]] (condition) [[then]] {[[goto]] "wait"}
 
 
It is better to use the [https://community.bistudio.com/wiki?title=Script_syntax&oldid=14554 @] 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 [[Script syntax|@]] statement to detect a condition is a complicated matter and should be subject to experimentation.


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.


<dd class="notedate">Posted on August 4, 2006 - 12:17
<dd class="notedate">Posted on August 4, 2006 - 12:17
<dt class="note">'''[[User:UNN|UNN]]'''<dd class="note">
<dt class="note">[[User:UNN|UNN]]
 
<dd class="note">
A goto command called within a [[forEach]] loop, will only execute a single jump to [[goto]], once the [[forEach]] loop has finished:
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]
  {[[goto]] "wait"} [[forEach]] [0,1,2,3,4]
 


<!-- Note Section END -->
<!-- Note Section END -->
Line 69: Line 65:




[[Category:Scripting Commands|GOTO]]
[[Category:Scripting Commands|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands OFP 1.46|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands OFP 1.96|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands OFP 1.99|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands OFP 1.99|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands OFP 1.96|GOTO]]
[[Category:Scripting Commands ArmA|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands OFP 1.46|GOTO]]
[[Category:Scripting Commands ArmA|GOTO]]
[[Category:Command Group: Program Flow|GOTO]]
[[Category:Scripting Commands ArmA2|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands ArmA2|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting_Commands_Take_On_Helicopters|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting_Commands_Take_On_Helicopters|{{uc:{{PAGENAME}}}}]]
[[Category:Command Group: Program Flow|{{uc:{{PAGENAME}}}}]]

Revision as of 01:40, 22 November 2019

Hover & click on the images for description

Description

Description:
Break script flow and go to given label (defined by # - NOT to be confused with SQF's hash sign!)
This command only works in SQS syntax.
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.
Groups:
Uncategorised

Syntax

Syntax:
goto label
Parameters:
label: String
Return Value:
Nothing

Examples

Example 1:
goto "myLabel" player setDamage 1 #myLabel hint "you successfully avoided death!"

Additional Information

See also:
SQS Control StructuresSQS to SQF conversionCommand Group: Program Flow

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 August 4, 2006 - 10:52
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.
Posted on August 4, 2006 - 12:17
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]

Bottom Section