SQS to SQF conversion: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (minor rephrasing)
m (Fix examples)
 
(17 intermediate revisions by 6 users not shown)
Line 1: Line 1:
==What's different in SQF==
__NOEDITSECTION__
* Every command has to end with semicolon.
{{TOC|side}}
* Cycles with the While-Do structure 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:
* SQF does not have a [[goto]] command anymore.
* SQF commands can span several lines if they are enclosed in brackets.
* SQF can return a variable, where SQS cannot.


==Replacing==
* '''[[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


===Comment===
{{Box_File|SQS|
; This is a comment
}}
{{Box_File|SQF|color_dark=#78AF78|color_light=#f2fff2|
// This is single-line comment


/* This is multiline
== Conversion examples ==
    comment
*/


comment "And this is a comment working both in SQS and SQF";
{| class="wikitable"
}}
! <big>SQS</big>
! <big>SQF</big>
|-
! colspan="2" |
=== Comment ===
|-
| <sqs>; This is a comment</sqs>
<sqs notrim>


===Condition===
; This is a
{{Box_File|SQS|
; multiline
@CONDITION
; comment
}}
{{Box_File|SQF|color_dark=#78AF78|color_light=#f2fff2|
[[waitUntil]] {CONDITION};
}}


===Delay===
</sqs>
{{Box_File|SQS|
<sqs>comment "this is a comment";</sqs>
~DELAY
<sqs>"this is a comment";</sqs>
}}
|
{{Box_File|SQF|color_dark=#78AF78|color_light=#f2fff2|
<sqf>// This is single-line comment</sqf>
[[sleep]] DELAY;
<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
goto "END"
#SKIP
COMMAND_1
#END
 
 
</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
_i = _i + 1;
? _i < COUNT : goto "LOOP"
</sqs>
| <sqf notrim>
for "_i" from 0 to COUNT -1 do {
COMMAND;
};


===Conditional command===
{{Box_File|SQS|
?CONDITION: COMMAND
}}
{{Box_File|SQF|color_dark=#78AF78|color_light=#f2fff2|
[[if]] (CONDITION) [[then]] {COMMAND};
}}


===Multi-conditional command===
</sqf>
{{Box_File|SQS|
|-
?CONDITION: [[goto]] "SKIP"
! colspan="2" |
  COMMAND_2
=== Structured conditional command ===
  [[goto]] "END"
|-
#SKIP
| <sqs>
  COMMAND_1
? VARIABLE == VALUE_1: goto "SKIP_1"
  #END
? VARIABLE == VALUE_2: goto "SKIP_2"
}}
DEFAULT_COMMAND
{{Box_File|SQF|color_dark=#78AF78|color_light=#f2fff2|
goto "END"
  [[if]] (CONDITION) then {COMMAND_1} else {COMMAND_2};
#SKIP_1
}}
COMMAND_1
  goto "END"
#SKIP_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>
|}
 


===Cycle===
== See Also ==
{{Box_File|SQS|
#loop
  COMMAND
  ~DELAY
?CONDITION: [[goto]] "LOOP"
}}
{{Box_File|SQF|color_dark=#78AF78|color_light=#f2fff2|
[[while]] {CONDITION} [[do]] {
  COMMAND;
  [[sleep]] DELAY;
};
}}


===Cycle with step===
* [[SQF Syntax]]
{{Box_File|SQS|
* [[SQS Syntax]]
_n <nowiki>=</nowiki> 0
* [[Introduction to Arma Scripting]]
#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 conditional command===
{{Box_File|SQS|
?VARIABLE <nowiki>==</nowiki> VALUE_1: [[goto]] "SKIP_1"
?VARIABLE <nowiki>==</nowiki> VALUE_2: [[goto]] "SKIP_2"
  DEFAULT COMMAND
  [[goto]] "END"
#SKIP_1
  COMMAND_1
  goto "END"
#SKIP_2
  COMMAND_2
#END
}}
{{Box_File|SQF|color_dark=#78AF78|color_light=#f2fff2|
[[switch]] (VARIABLE) [[do]] {
  [[case]] VALUE_1: {COMMAND_1};
  [[case]] VALUE_2: {COMMAND_1};
  [[default]] {DEFAULT};
};
}}


[[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