pf:rpldocs:program_flow_control
- program flow control.txt
=CMD
=COMMAND once
=DESC
Start a block of instructions that are executed once only for the lifetime of the tower the script is associated with.
=ENDDESC
=EX
once
trace("42") #Only prints once
endonce
=ENDEX
=ENDCMD
=CMD
=COMMAND endonce
=DESC
Ends a block defined by once.
=ENDDESC
=EX
once
trace("42") #Only prints once
endonce
=ENDEX
=ENDCMD
=CMD
=COMMAND if (bool)
=DESC
bool ARG1: The value to evaluate<p/>
Evaluate the first element on the stack. If True, then execute statements that follow, up to the endif or else statement.
If False, execution skips to the first statement following the endif or else statement. Any nonzero value is considered True, a value of zero is False.
=ENDDESC
=EX
if (<-var eq (1))
#Do Something
endif
=ENDEX
=ENDCMD
=CMD
=COMMAND else
=DESC
When the if statement evaluates to False, then the statements following the else, up to the endif, are executed instead.
=ENDDESC
=EX
if (<-var eq (1))
#Do something
else
#Do something else
endif
=ENDEX
=ENDCMD
=CMD
=COMMAND endif
=DESC
Delimits the scope of an if-else-statement. Instructions between the if and endif statement are conditionally executed, depending on the results of the if evaluation.
=ENDDESC
=EX
if (<-var eq (1))
#Do something
else
#Do something else
endif
=ENDEX
=ENDCMD
=CMD
=COMMAND do
=DESC
The statements following the do, up to the loop statement, are executed repeatedly. Each iteration (loop), the initial value (Index) is incremented by one at the bottom of the loop and compared to Limit. When Index=Limit, execution will proceed at the first statement following Loop. Loops can be nested, but no more than 3 deep. See also: I, J and K<p/>
NOTE: Limit comes first, then the initial value (index). This means that the first number should usually be bigger than the second number.
=ENDDESC
=EX
do(5 0)
trace(I)
loop
=ENDEX
=ENDCMD
=CMD
=COMMAND loop
=DESC
Terminates the 'do' instruction. Control flow will return to the 'do' instruction until the Index is equal to the Limit.
=ENDDESC
=EX
do(5 0)
trace(I)
loop
=ENDEX
=ENDCMD
=CMD
=COMMAND I number
=DESC
Current loop Index. Pushes the value of the current loop onto the stack. Only use within loops
=ENDDESC
=EX
do(5 0)
trace(I)
loop
=ENDEX
=ENDCMD
=CMD
=COMMAND J number
=DESC
First outer loop index. When loops are nested, this pushes the value of the first (or only) outer loop onto the stack.
=ENDDESC
=EX
do(2 1)
do(4 3)
I mul(J) trace
loop
loop
=ENDEX
=ENDCMD
=CMD
=COMMAND K number
=DESC
Outer loop index. When loops are nested, this pushes the value of the outermost loop onto the stack.
=ENDDESC
=EX
do(2 1)
do(4 3)
do(6 5)
trace(I J K mul mul)
loop
loop
loop
=ENDEX
=ENDCMD
=CMD
=COMMAND while
=DESC
Beginning of a while loop. The statements between a 'while' and a 'repeat' should ultimately push a value to the stack that will determine if the loop executes the body of the 'repeat' block.
=ENDDESC
=EX
5 ->y
while
<-y gt(0) #is y greater than zero?
repeat #repeat this section of code
trace(<-y)
<-y sub(1) ->y #subtract 1 from y so we don't end in infinite loop
endwhile
=ENDEX
=ENDCMD
=CMD
=COMMAND repeat (bool)
=DESC
Pops an item from the stack. If true, execute the following statements. If false, jump to the statement following 'endwhile'.
=ENDDESC
=EX
5 ->y
while
<-y gt(0) #is y greater than zero?
repeat #repeat this section of code
trace(<-y)
<-y sub(1) ->y #subtract 1 from y so we don't end in infinite loop
endwhile
=ENDEX
=ENDCMD
=CMD
=COMMAND endwhile
=DESC
Returns execution to the 'while' statement. Note that endwhile is only executed, if 'repeat' evaluated to true.
=ENDDESC
=EX
5 ->y
while
<-y gt(0) #is y greater than zero?
repeat #repeat this section of code
trace(<-y)
<-y sub(1) ->y #subtract 1 from y so we don't end in infinite loop
endwhile
=ENDEX
=ENDCMD
=CMD
=COMMAND break
=DESC
Immediately exits the body of a 'while/repeat/endwhile' block or a 'do/loop' block.
=ENDDESC
=EX
do(5 0)
if (I mod(2) eq0) #divide inner loop with modulo 2 and test if zero
break
endif
trace(I)
loop
=ENDEX
=ENDCMD
=CMD
=COMMAND return
=DESC
Stops execution of a function call and returns immediately. If called from some place other than a function, it will stop the script execution and 'return' immediately. Useful for aborting function execution or script execution when necessary.
=ENDDESC
=EX
trace("42")
@MyFunc
:MyFunc
trace("1")
return
trace("2")
=ENDEX
=ENDCMD
=CMD
=COMMAND delay (number)
=DESC
The number of game loops to wait before allowing execution to pass to the next command. Timers used via SetTimer(0-3) continue to run and expire even while the script is delayed.
=ENDDESC
=EX
#Stop runtime of the script for 30 game ticks, equivalent of 1 second.
delay(30)
trace(GetUpdateCount)
=ENDEX
=ENDCMD
pf/rpldocs/program_flow_control.txt · Last modified: 2016/10/16 17:45 by Karsten75