Funkce

Z Armed Assault nápověda

Přejít na: navigace, hledání

Obsah

Úvod

Funkce se poprvé objevila v datadisku OFP: Resistance. Oproti běžnému scriptování je více přizpůsobitelná konkétním požadavkům tvůrce. Chová se jako kód, který může nějakou hodnotu použitelnou v místě, odkud byla funkce zavolána.

Funkce zastavuje všechny ostatní procesy ve hře až do doby, než bude dokončena. To znamená, že běží rychleji než scripty a její výsledek je okamžitý a jednoznačný. Zároveň však může ovlivnit hraní v případě, že je příliš náročná.

Funkce jsou vždy uloženy v souborech s koncovkou .SQF (oproti scriptům v .SQS souborech)

Příklad:

mojefunkce.sqf

Zatímco SQS je založeno na řádcích a tak je i zpracováváno, funkce (viz call, execVM, compile, ...) jsou založené na strukturovaných výrazech. Konec řádku nic neznamená, důležitý je konec úseku.

Funkce v ArmA

Spolu s příchodem Armed Assaultu se také poprvé objevily scripty, které mají stejnou strukturu jako funkce, ale je možné je zastavit nebo pozdržet (viz příkazy sleep a waitUntil). SQS soubory v ArmA sice stále fungují, ale jsou považovány za zastaralé a všeobecně se od nich ustupuje.

Konstrukce

Hlavní znaky konstrukce funkcí jsou:

Výsledek posledního výrazu je vrácená hodnota funkce.

Není-li žádný, je vráceno Nic.

Příklady

Příklad 1

(max.sqf)
V tomto příkladu vrátí maximum prvního a druhého argumentu.


private {"_a", "_b"};
_a = _this select 0;
_b = _this select 1;
if (_a > _b) then {_a} else {_b}


Příklad 2

(infantrySafe.sqf)
V tomto příkladu nevrací žádnou hodnotu, ale přepne všechny jednotky do safe módu.

comment "Prepni jednotky do volneho modu";
{
 if (vehicle _x == _x) then
 {
  _x setBehaviour "safe"
 }
} forEach _this

Poznámky

Kvůli omezení SQS scriptů není možné vytvářet v nich víceřádkové řetězce v nich.
To se však dá snadno obejít vytvořením samostatného souboru volaného příkazy loadFile nebo preprocessFile

Osobní nástroje