goto: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
(A further attempt to avoid a proliferation of misinformation - seriously I have checked this all out.)
(Does this do it?)
Line 39: Line 39:
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.


Labels are not case sensitive, and for the avoidance of doubt later versions of Flashpoint do not require that loops using a '''goto''' contain a delay.
Labels are not case sensitive.


Whilst it is not required to include a delay in a loop, a loop without a delay can cause the script to slow down the game a lot, as the loop will be executed many times before the game engine interrupts the script. '''Edit:''' The above statement is incorrect.  From much experimentation it is clear that the OFP engine will 'go away and do other things' between individual lines of code even when those lines of code are within a loop.  What might cause the game to slow down is the use of loops that have been constructed with the [[forEach]] instruction.  In those cases the OFP engine will complete the whole of the [[forEach]] instruction before going away to do anything else.  So if the [[forEach]] instruction contains a complicated piece of code and a lot of array elements you may notice an effect in the performance of the game.  Creating a loop using a '''goto''' will have no such effect.  This is no reason to avoid the very powerful and very useful [[forEach]] instruction.  If you have less than several hundred array element you will notice nothing.  If you make a lot of use of [[forEach]] with several hundreds of array elements then separating them with a small delay would be helpful.
Loops which look something like:


Deciding whether to use a script with a loop or a trigger or an @ statement is a complicated matter and should be subject to experimentation.
''#wait''<br>
''[[if]] (condition) [[then]] {[[goto]] "wait"}''


As there is clearly also some confusion over whether labels are case sensitive or not I encourage doubters to run the following script:
Should be avoided as many of them could casue the mission to slow down.  Better is to use the [[@]] command to wait for a condition to be true, or put a small delay into the wait loop.


Whilst it is not required to include a delay in a zero instruction loop, such a loop without a delay can cause the script to slow down the game a lot, as the loop will be executed many times before the game engine interrupts the script.


''goto "SKIP"''<br>
Deciding whether to use a script with a loop or a trigger or an @ statement to detect a condition is a complicated matter and should be subject to experimentation.
''hint "Labels are case sensitive"''<br>
''exit''<br>
''#skip''<br>
''hint "Labels are not case sensitive"''<br>
''exit''

Revision as of 08:49, 24 May 2006


goto label


Operand types:

label: String

Type of returned value:

Nothing

Description:

In script only: Go to given label.
Note: String argument is used here.
Be sure to use double quotes around label name in goto.

Define the label with #.


Example:

goto "Skip"
. these lines
. will be
. skipped
#Skip


Comments:

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.

Labels are not case sensitive.

Loops which look something like:

#wait
if (condition) then {goto "wait"}

Should be avoided as many of them could casue the mission to slow down. Better is to use the @ command to wait for a condition to be true, or put a small delay into the wait loop.

Whilst it is not required to include a delay in a zero instruction loop, such a loop without a delay can cause the script to slow down the game a lot, as the loop will be executed many times before the game engine interrupts the script.

Deciding whether to use a script with a loop or a trigger or an @ statement to detect a condition is a complicated matter and should be subject to experimentation.