Funkce
Z Armed Assault nápověda
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:
- if..then..else
- while..do
- ArmA: for ... from ... to ... step
- ArmA: switch ... do
- Složené závorky { }
- Příkazy jsou oddělovány středníkem ;
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

