Functions - SQF: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
No edit summary
 
 
(15 intermediate revisions by 5 users not shown)
Line 1: Line 1:
'''Description:'''
#REDIRECT [[Function]]
 
While script syntax (see exec) is line based, functions (see call, then, do) are based on structured expressions and end-of-line has no special meaning, it is considered to be equivalent to space or semicolon and is therefore required even when ending line.
 
 
Note: Scripts can do some things that are not possible in functions.<br>
Scripts can wait suspended until some condition is met, it can also use goto to change execution point at any time.
 
 
Main language contructs used in functions are:
*if..then..else
*while..do
*Curled braces
*Multiple commands (including assigment commands) are delimited with a semicolon.
 
 
Result of the last expression evaluated is returned as a function result.<br>
This can be nothing when a function returns no value.
 
 
<b>Example 1</b> (max.sqf)
 
comment "Return maximum of first and second argument";<br>
private {"_a","_b"};<br>
_a = _this select 0;<br>
_b = _this select 1;<br>
if (_a>_b) then {_a} else {_b}
 
 
<b>Example 2</b> (infantrySafe.sqf)
 
comment "Switch all infantry units to safe mode";<br>
{<br>
if (vehicle _x == _x) then<br>
{<br>
_x setBehaviour "safe"<br>
}<br>
} forEach _this
 
 
Due to line-based nature of scripts it is not possible to create multiline string constants in them.<br>
To overcome this limitation you can store multiline in separate files and load them using loadFile or preprocessFile functions (the second uses C-like preprocessor with // or /* */ comments and #define macros).<br>
Recommended file extension for functions is .SQF (as opposed to .SQS used for scripts).
 
 
[[Category: Scripting_Topics ]]

Latest revision as of 13:29, 24 July 2006

Redirect to: