SQS to SQF conversion: Difference between revisions
Jump to navigation
Jump to search
Lou Montana (talk | contribs) m (Fix examples) |
|||
(20 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
__NOEDITSECTION__ | |||
{{TOC|side}} | |||
[[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 (<sqf inline>;</sqf>) | |||
* the following commands disappeared: | |||
** [[goto]]/[[SQS Syntax#Label|#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 | |||
== Conversion examples == | |||
= | {| class="wikitable" | ||
! <big>SQS</big> | |||
! <big>SQF</big> | |||
|- | |||
! colspan="2" | | |||
=== Comment === | |||
|- | |||
| <sqs>; This is a comment</sqs> | |||
<sqs notrim> | |||
; This is a | |||
; multiline | |||
; comment | |||
=== | </sqs> | ||
<sqs>comment "this is a comment";</sqs> | |||
<sqs>"this is a comment";</sqs> | |||
}} | | | ||
<sqf>// This is single-line comment</sqf> | |||
<sqf> | |||
} | /* | ||
This is a | |||
=== | multiline | ||
comment | |||
*/ | |||
</sqf> | |||
<sqf>comment "this is a comment";</sqf> | |||
<sqf>"this is a comment";</sqf> | |||
|- | |||
! colspan="2" | | |||
=== Condition wait === | |||
|- | |||
| | |||
<sqs>@CONDITION</sqs> | |||
<sqs>@ not alive player</sqs> | |||
| | |||
<sqf>waitUntil { CONDITION };</sqf> | |||
<sqf>waitUntil { not alive player };</sqf> | |||
|- | |||
! colspan="2" | | |||
=== Delay === | |||
|- | |||
| | |||
<sqs>~DELAY</sqs> | |||
<sqs>~5</sqs> | |||
| | |||
<sqf>sleep DELAY;</sqf> | |||
<sqf>sleep 5;</sqf> | |||
|- | |||
! colspan="2" | | |||
=== Conditional command === | |||
|- | |||
| | |||
<sqs>? CONDITION : COMMAND</sqs> | |||
<sqs>? alive player : player setDammage 1</sqs> | |||
| | |||
<sqf>if (CONDITION) then { COMMAND };</sqf> | |||
<sqf>if (alive player) then { player setDammage 1 };</sqf> | |||
|- | |||
! colspan="2" | | |||
=== Multi-conditional command === | |||
|- | |||
| | |||
<sqs notrim> | |||
? CONDITION : goto "SKIP" | |||
COMMAND_2 | COMMAND_2 | ||
goto "END" | |||
#SKIP | |||
COMMAND_1 | COMMAND_1 | ||
#END | #END | ||
===Cycle=== | |||
{{ | </sqs> | ||
| | |||
<sqf> | |||
if (CONDITION) then | |||
{ | |||
COMMAND_1 | |||
} | |||
else | |||
{ | |||
COMMAND_2 | |||
}; | |||
</sqf> | |||
|- | |||
! colspan="2" | | |||
=== Cycle === | |||
|- | |||
| <sqs> | |||
#loop | |||
COMMAND | |||
~DELAY | |||
? CONDITION : goto "LOOP" | |||
</sqs> | |||
| | |||
<sqf> | |||
while { CONDITION } do { | |||
COMMAND; | |||
sleep DELAY; | |||
}; | |||
</sqf> | |||
|- | |||
! colspan="2" | | |||
=== Cycle with step === | |||
|- | |||
| <sqs> | |||
_i = 0 | |||
#LOOP | |||
COMMAND | COMMAND | ||
_i = _i + 1; | |||
? _i < COUNT : goto "LOOP" | |||
</sqs> | |||
| <sqf notrim> | |||
for "_i" from 0 to COUNT -1 do { | |||
COMMAND; | |||
}; | |||
===Structured command | </sqf> | ||
|- | |||
! colspan="2" | | |||
=== Structured conditional command === | |||
|- | |||
| <sqs> | |||
? VARIABLE == VALUE_1: goto "SKIP_1" | |||
? VARIABLE == VALUE_2: goto "SKIP_2" | |||
DEFAULT_COMMAND | |||
goto "END" | |||
#SKIP_1 | |||
COMMAND_1 | COMMAND_1 | ||
goto "END" | goto "END" | ||
#SKIP_2 | |||
COMMAND_2 | COMMAND_2 | ||
#END | |||
</sqs> | |||
| <sqf> | |||
switch (VARIABLE) do | |||
{ | |||
case VALUE_1: | |||
{ COMMAND_1 }; | |||
}; | case VALUE_2: | ||
} | { COMMAND_2 }; | ||
default | |||
{ DEFAULT_COMMAND }; | |||
}; | |||
</sqf> | |||
|- | |||
! colspan="2" | | |||
=== Exiting === | |||
|- | |||
| <sqs> | |||
? CONDITION : COMMAND_2 | |||
? CONDITION : exit | |||
COMMAND_1 | |||
</sqs> | |||
| <sqf notrim> | |||
if (CONDITION) exitWith { COMMAND_2; }; | |||
COMMAND_1; | |||
</sqf> | |||
|} | |||
== See Also == | |||
* [[SQF Syntax]] | |||
* [[SQS Syntax]] | |||
* [[Introduction to Arma Scripting]] | |||
[[Category:Syntax]] | [[Category:Syntax]] |
Latest revision as of 21:40, 21 July 2022
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
; This is a
; multiline
; 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 |
|
Delay | |
~DELAY ~5 |
sleep DELAY; sleep 5; |
Conditional command | |
Multi-conditional command | |
Cycle | |
Cycle with step | |
Structured conditional command | |
Exiting | |