SQS to SQF conversion: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
(Article about difference between SQS and SQF. I'm not sure with headings (Command with condition, ...), so feel free to correct it.)
 
m (Fix examples)
 
(22 intermediate revisions by 8 users not shown)
Line 1: Line 1:
==What's different in SQF==
__NOEDITSECTION__
* Every command have to be ended with semicolon.
{{TOC|side}}
* Cycles are limited to 10 000 loops.
[[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:
==Replacing==


===Comment===
* '''[[execVM]]''' is used (instead of [[exec]] for SQS)
{{Box_File|SQS|
* Every command has to end with a semicolon (<sqf inline>;</sqf>)
; This is a comment
* the following commands disappeared:
}}
** [[goto]]/[[SQS Syntax#Label|#label]] (Note, [[a hash b|#]] is a command in itself in {{arma3}})
{{Box_File|SQF|color_dark=#78AF78|color_light=#f2fff2|
** [[exit]] - a partial SQF equivalent can be found in [[exitWith]]
// This is single-line comment
* Line returns do not impact code
* SQF can return a variable, where SQS cannot


/* This is multiline
    comment
*/


comment "And this is comment working both in SQS and SQF";
== Conversion examples ==
}}


===Condition===
{| class="wikitable"
{{Box_File|SQS|
! <big>SQS</big>
@CONDITION
! <big>SQF</big>
}}
|-
{{Box_File|SQF|color_dark=#78AF78|color_light=#f2fff2|
! colspan="2" |
[[waitUntil]] {CONDITION};
=== Comment ===
}}
|-
| <sqs>; This is a comment</sqs>
<sqs notrim>


===Delay===
; This is a
{{Box_File|SQS|
; multiline
~DELAY
; comment
}}
{{Box_File|SQF|color_dark=#78AF78|color_light=#f2fff2|
[[sleep]] DELAY;
}}


===Command with condition===
</sqs>
{{Box_File|SQS|
<sqs>comment "this is a comment";</sqs>
?CONDITION: COMMAND
<sqs>"this is a comment";</sqs>
}}
|
{{Box_File|SQF|color_dark=#78AF78|color_light=#f2fff2|
<sqf>// This is single-line comment</sqf>
[[if]] (CONDITION) [[then]] {COMMAND};
<sqf>
}}
/*
 
This is a
===Structured command with condition===
multiline
{{Box_File|SQS|
comment
?CONDITION: [[goto]] "SKIP"
*/
</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"
goto "END"
#SKIP
#SKIP
  COMMAND_1
  COMMAND_1
  "END"
  #END
}}
 
{{Box_File|SQF|color_dark=#78AF78|color_light=#f2fff2|
[[if]] (CONDITION) then {COMMAND_1} else {COMMAND_2};
}}


===Cycle===
</sqs>
{{Box_File|SQS|
|
#loop
<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
  ~DELAY
  _i = _i + 1;
?CONDITION: [[goto]] "LOOP"
? _i < COUNT : goto "LOOP"
}}
</sqs>
{{Box_File|SQF|color_dark=#78AF78|color_light=#f2fff2|
| <sqf notrim>
[[while]] {CONDITION} [[do]] {
for "_i" from 0 to COUNT -1 do {
  COMMAND;
COMMAND;
  [[sleep]] DELAY;
};
};
}}


===Cycle with step===
{{Box_File|SQS|
_n <nowiki>=</nowiki> 0
#LOOP
COMMAND
_n <nowiki>=</nowiki> _n + 1;
?_n < COUNT: [[goto]] "LOOP"
}}
{{Box_File|SQF|color_dark=#78AF78|color_light=#f2fff2|
for [{_n <nowiki>=</nowiki> 0},{_n <<nowiki>=</nowiki> COUNT},{_n <nowiki>=</nowiki> _n+1}] do {
  COMMAND;
};
}}


===Structured command with conditions===
</sqf>
{{Box_File|SQS|
|-
?VARIABLE <nowiki>==</nowiki> VALUE_1: [[goto]] "SKIP_1"
! colspan="2" |
?VARIABLE <nowiki>==</nowiki> VALUE_2: [[goto]] "SKIP_2"
=== Structured conditional command ===
  DEFAULT
|-
  [[goto]] "END"
| <sqs>
#SKIP_1
? VARIABLE == VALUE_1: goto "SKIP_1"
? VARIABLE == VALUE_2: goto "SKIP_2"
  DEFAULT_COMMAND
  goto "END"
#SKIP_1
  COMMAND_1
  COMMAND_1
  goto "konec"
  goto "END"
#SKIP_2
#SKIP_2
  COMMAND_2
  COMMAND_2
#END
#END
}}
</sqs>
{{Box_File|SQF|color_dark=#78AF78|color_light=#f2fff2|
| <sqf>
[[switch]] (VARIABLE) [[do]] {
switch (VARIABLE) do
  [[case]] VALUE_1: {COMMAND_1};
{
  [[case]] VALUE_2: {COMMAND_1};
case VALUE_1:
  [[default]] {DEFAULT};
{ 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

waitUntil { CONDITION };

Delay

~DELAY
~5

sleep DELAY;

Conditional command

? CONDITION : COMMAND

if (CONDITION) then { COMMAND };

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;


See Also