SQS to SQF conversion: Difference between revisions
Jump to navigation
Jump to search
m (Removed old link) |
Lou Montana (talk | contribs) (Fix intro and formatting) |
||
Line 1: | Line 1: | ||
__NOEDITSECTION__ | |||
{{SideTOC}} | |||
[[SQF syntax]] has been introduced in {{ofpr}} v1.85 and is the Arma series' main scripting language since. The main differences with [[SQS syntax]] are: | |||
* '''[[execVM]]''' is used (instead of [[exec]] for SQS) | |||
* Every command has to end with a semicolon ({{Inline code|;}}) | |||
* the following commands disappeared: | |||
** [[goto]]/#label (Note, [[a hash b|#]] is a command in itself in {{arma3}}) | |||
** [[exit]] - a partial SQF equivalent can be found in [[exitWith]] | |||
* Line returns do not impact code | |||
* SQF can return a variable, where SQS cannot | |||
===Comment=== | == Conversion examples == | ||
{| class="wikitable" | |||
! <big>SQS</big> | |||
! <big>SQF</big> | |||
|- | |||
! colspan="2" | | |||
=== Comment === | |||
|- | |||
| | |||
; This is a comment | ; This is a comment | ||
<code><nowiki> | |||
; This is a | |||
; multiline | |||
; comment | |||
</nowiki></code> | |||
comment "this is a comment"; | |||
"this is a comment"; | |||
| | |||
// This is single-line comment | // This is single-line comment | ||
/* This is multiline | /* | ||
This is a | |||
multiline | |||
comment | |||
*/ | */ | ||
comment " | comment "this is a comment"; | ||
===Condition=== | "this is a comment"; | ||
|- | |||
! colspan="2" | | |||
=== Condition wait === | |||
|- | |||
| | |||
@CONDITION | @CONDITION | ||
===Delay=== | @ not alive player | ||
| | |||
[[waitUntil]] { CONDITION }; | |||
[[waitUntil]] { not alive player }; | |||
|- | |||
! colspan="2" | | |||
=== Delay === | |||
|- | |||
| | |||
~DELAY | ~DELAY | ||
~5 | |||
| | |||
[[sleep]] DELAY; | [[sleep]] DELAY; | ||
===Conditional command=== | [[sleep]] 5; | ||
|- | |||
?CONDITION: COMMAND | ! colspan="2" | | ||
=== Conditional command === | |||
|- | |||
[[if]] (CONDITION) [[then]] {COMMAND}; | | | ||
? CONDITION : COMMAND | |||
? alive player : player setDammage 1 | |||
| | |||
[[if]] (CONDITION) [[then]] { COMMAND }; | |||
[[if]] (alive player) [[then]] { player setDammage 1 }; | |||
|- | |||
! colspan="2" | | |||
===Multi-conditional command=== | ===Multi-conditional command=== | ||
|- | |||
?CONDITION: [[goto]] "SKIP" | | | ||
? CONDITION : [[goto]] "SKIP" | |||
COMMAND_2 | COMMAND_2 | ||
[[goto]] "END" | [[goto]] "END" | ||
Line 53: | Line 92: | ||
COMMAND_1 | COMMAND_1 | ||
#END | #END | ||
| | |||
[[if]] (CONDITION) [[then]] { | |||
[[if]] (CONDITION) then {COMMAND_1} else {COMMAND_2}; | COMMAND_1 | ||
} [[else]] { | |||
COMMAND_2 | |||
===Cycle=== | }; | ||
|- | |||
! colspan="2" | | |||
=== Cycle === | |||
|- | |||
| | |||
#loop | #loop | ||
COMMAND | COMMAND | ||
~DELAY | ~DELAY | ||
?CONDITION: [[goto]] "LOOP" | ? CONDITION : [[goto]] "LOOP" | ||
| | |||
[[while]] {CONDITION} [[do]] { | [[while]] {CONDITION} [[do]] { | ||
COMMAND; | |||
[[sleep]] DELAY; | |||
}; | }; | ||
|- | |||
! colspan="2" | | |||
===Cycle with step=== | === Cycle with step === | ||
|- | |||
| | |||
_i = 0 | |||
#LOOP | #LOOP | ||
COMMAND | COMMAND | ||
_i = _i + 1; | |||
? | ? _i < COUNT : [[goto]] "LOOP" | ||
| | |||
[[for]] "_i" [[from]] 0 [[to]] COUNT -1 [[do]] { | |||
for [ | COMMAND; | ||
}; | }; | ||
===Structured conditional command=== | |- | ||
! colspan="2" | | |||
?VARIABLE | === Structured conditional command === | ||
?VARIABLE | |- | ||
| | |||
? VARIABLE == VALUE_1: [[goto]] "SKIP_1" | |||
? VARIABLE == VALUE_2: [[goto]] "SKIP_2" | |||
DEFAULT_COMMAND | |||
[[goto]] "END" | [[goto]] "END" | ||
#SKIP_1 | #SKIP_1 | ||
Line 98: | Line 144: | ||
COMMAND_2 | COMMAND_2 | ||
#END | #END | ||
| | |||
[[switch]] (VARIABLE) [[do]] { | [[switch]] (VARIABLE) [[do]] { | ||
[[case]] VALUE_1: | |||
{ COMMAND_1 }; | |||
[[case]] VALUE_2: | |||
{ COMMAND_2 }; | |||
[[default]] | |||
{ DEFAULT_COMMAND }; | |||
}; | }; | ||
===Exiting=== | |- | ||
! colspan="2" | | |||
?CONDITION: | === Exiting === | ||
|- | |||
| | |||
? CONDITION : COMMAND_2 | |||
? CONDITION : exit | |||
COMMAND_1 | COMMAND_1 | ||
| | |||
[[if]] (CONDITION) [[exitWith]] { COMMAND_2; }; | |||
COMMAND_1; | |||
|} | |||
== See Also == | == See Also == | ||
* [[SQF syntax]] | * [[SQF syntax]] | ||
[[Category:Syntax]] | [[Category:Syntax]] | ||
[[Category:Scripting Topics]] | [[Category:Scripting Topics]] |
Revision as of 02:10, 30 January 2020
Template:SideTOC SQF syntax has been introduced in Operation Flashpoint: Resistance v1.85 and is the Arma series' main scripting language since. The main differences with SQS syntax are:
- execVM is used (instead of exec for SQS)
- Every command has to end with a semicolon (
;
) - the following commands disappeared:
- Line returns do not impact code
- SQF can return a variable, where SQS cannot
Conversion examples
SQS | SQF |
---|---|
Comment | |
; This is a comment
comment "this is a comment"; "this is a comment"; |
// This is single-line comment /* This is a multiline comment */ comment "this is a comment"; "this is a comment"; |
Condition wait | |
@CONDITION @ not alive player |
waitUntil { CONDITION }; waitUntil { not alive player }; |
Delay | |
~DELAY ~5 |
sleep DELAY; sleep 5; |
Conditional command | |
? CONDITION : COMMAND ? alive player : player setDammage 1 |
if (CONDITION) then { COMMAND }; if (alive player) then { player setDammage 1 }; |
Multi-conditional command | |
? CONDITION : goto "SKIP" COMMAND_2 goto "END" #SKIP COMMAND_1 #END |
if (CONDITION) then { COMMAND_1 } else { COMMAND_2 }; |
Cycle | |
#loop COMMAND ~DELAY ? CONDITION : goto "LOOP" |
while {CONDITION} do { COMMAND; sleep DELAY; }; |
Cycle with step | |
_i = 0 #LOOP COMMAND _i = _i + 1; ? _i < COUNT : goto "LOOP" |
for "_i" from 0 to COUNT -1 do { COMMAND; }; |
Structured conditional command | |
? VARIABLE == VALUE_1: goto "SKIP_1" ? VARIABLE == VALUE_2: goto "SKIP_2" DEFAULT_COMMAND goto "END" #SKIP_1 COMMAND_1 goto "END" #SKIP_2 COMMAND_2 #END |
switch (VARIABLE) do { case VALUE_1: { COMMAND_1 }; case VALUE_2: { COMMAND_2 }; default { DEFAULT_COMMAND }; }; |
Exiting | |
? CONDITION : COMMAND_2 ? CONDITION : exit COMMAND_1 |
if (CONDITION) exitWith { COMMAND_2; }; COMMAND_1; |