Řazení pole jsem tu již zmiňoval. Drobnou úpravou můžete quicksort funkci upravit, aby nepracovala jen s polem čísel, ale třeba s polem polí a řadit jen podle některých jeho prvků. A nebo se mrkněte, zda se vám nebude hodit BIS_fnc_sortBy BI do svého seznamu funkcí zařadila hodně variabilní funkci BIS_fnc_sortBy, jejíž autorem by dle popisku v helpu měl být Jiri Wainar. Funkce přijímá za parametr pole o pěti parametrech. Prvním je pole, které se má řadit. Druhým jsou speciální parametry, které můžeme potřebovat do funkce předat (pak jsou dostupné jako _input0,_input1,…). Často půjde o prázdné pole. Třetí parametr je algoritmus (funkce), pode kterého bude funkce prvky řadit (výchozí je {_x}). Čtvrtý parametr je textový řetězec, který popisuje, zda se prvky řadí[…]

To, že můžete v editoru pojmenovat jednotku a pak s tím jménem dále pracovat, ví asi každý. Jak se dá jméno dále využívat si projdeme v následujících pár řádcích. Dejme tomu, že jsem si v editoru vytvořil 8 vojáků a pojmenoval je „soldier1“ až „soldier8“. A dejme tomu, že jsem si ručně vytvořil 8 značek a pojmenoval je „soldier1_target“ až „soldier8_target“ A teď si budu chtít vytvořit skript, který jednoho náhodně zvolí a pošle na „jeho“ target. Zásadní v celé funkci bude příkaz vehicleVarName, který vrátí název proměnné, takže jej následně můžeme použít pro vybrání názvu značky. celo_fnc_send_soldier = { _soldiers = [_this,0,[],[[]]] call BIS_fnc_param; _soldier = _soldiers call BIS_fnc_selectRandom; if (!alive(_soldier)) exitWith {false}; _soldier_name = vehicleVarName _soldier; // _soldier_name[…]

Většina skriptovacích jazyků má možnost dříve ukončit prováděný cyklus. Arma engine je na tom stejně. Dejme tomu, že máte skript, který prochází dlouhý seznam a hledá v něm první objekt splňující podmínku. Než zbytečně procházet celý cyklus, je možné jej ukončit dříve k čemuž nám pomohou příkazy scopeName a breakOut. Mrkněme na příklad, kde mají některé jednotky celo_fnc_set_next_guard = { _back = false; { scopeName “hunter_cycle”; if ((side _x == opfor) and !(_x getVariable [“hunter”,false])) then { //cokoliv co chci delat s promennou _x setVariable [“hunter”,true,true]; _x doMove getpos player; _back = true; //a na konci ukoncim cyklus breakOut “hunter_cycle”; }; } forEach allUnits; _back; }; Příklad je jen ilustrační a není optimální. Dejme tomu, že si vytvoříte spínač, který[…]

  Základní příkazy Pole se tvoří velmi snadno. Všechny objekty, co jsou zapsány mezihranatými závorkami jsou součástí pole. _pole = [jirka, honza, marek, tonda]; K jednotlivým prvkům pole se přistupuje za pomoci příkazselect, jehož druhý parametr udává index prvku. Ty jsouv poli číslovány od nuly. Tudíž pokud chceme vytáhnout třetíparametr: _unit = _pole select 2; Do pole často vkládáme prvky protože s nimi chceme nějak pracovat.Nejčastěji se používá v kombinaci s příkazem forEach.Ten spouští předanou funkci a v každém průchodu do ní postupně vkládájeden prvek pole za druhým jako parametr _x. {_x setDammage 0} forEach _pole; Neméně často potřebujeme vědět velikost pole. Příkaz count, kterýtoho v enginu zvládá opravdu hodně, nám velikost vrátí. _pocet_prvku = count _pole; Pro manipulaci s[…]

Může se vám stát, že budete chtít ovlivnit průběh mise nějakou klávesou. Například přidáte možnost rozhodovat mezi několika možnosti a nebude vám vyhovovat klasické akční menu nebo budete chtít při přehrávání videa uprostřed mise dát možnost stisknout klávesu „S“ a tím video přeskočit. Jak na to? Základem jsou dva příkazy findDisplay a displayAddEventHandler. S těmito příkazy můžete navěsit vlastní detekci stisknuté klávesy velmi snadno: _keyDownEHId = (findDisplay 46) displayAddEventHandler [“KeyDown”, “hint str _this;”]; Příkaz nastaví pro „primary display“ (což je display s id 46) handler na událost keydown. Od teď tedy bude při každém stisku klávesy hra vypisovat co bylo stisknuto. FindDisplay ale nefunguje na dedikovaném serveru, takže je nutné tuto detekci pro server vyjmout či ošetřit (ve skutečnosti vrátí displayNull). waituntil {!(IsNull (findDisplay 46))}; Druhý parametrem displayAddEventHandler[…]

Varování! Tento příkaz je zastaralý a byl nahrazen příkazem param! Původní článek byl zanechán v nezměněné podobě. BI do enginu Arma 3 přidala mnoho nových funkcí (v rámci Functions Library 2.0) vycházejících z vlastních zkušeností při tvorbě misí pro Arma série. Mrkněme na pár základních, ale zásadních. První funkcí kterou bych doporučil okamžitě používat je BIS_fnc_param. Díky této funkci vám odpadne spousta kontrol, které jste měli dělat v každém skriptu či funkci. Je jakousi náhradou za kontroly typů, které třeba umožňují některé z pokročilých programovacích jazyků. Syntaxe je trošku divoká ([input,index,(defaultValue,data­Types,requiredCount)] call bis_fnc_param), tak pojďme rovnou na příklad [] spawn { _ied = [ _this, 0, objNull, [objNull] ] call BIS_fnc_param; _radius = [ _this, 1, 10, [0] ] call[…]

Občas se může stát, že budeme chtít mít skript více univerzální bez větší vazby na používané addony. Stačí znát pár příkazů a postupů a používání dat z konfigurace bude pro vás hračkou. Zvláště teď, když je v Arma 3 prohlížeč konfigurace lehce dostupný přímo v editoru. Pokud byste se například snažili napsat skript, který by přidával libovolné jednotce (v příkladu použijeme lokální proměnnou _unit) jeden zásobník a chtěli, aby skript byl univerzální, tak právě v tento moment vám přijde vhod použití příkazů configFile a getArray. Při zavolání configFile je totiž vrácen root třídy configu (isClass vrací true) z něhož se pak za pomocí dotazů na jeho podzáznamy (>>) a použitím příkazu pro zjištění názvu hlavní zbraně jednotky dá dohledat konfigurační záznam[…]

Pokud jste hráli Evolution pro ArmA: Armed Assault, tak jste jistě zaznamenali, že na letišti v bedně měl každý hráč dostupné vybavení dle své hodnosti. Ukažme si krátký skript, jak tohle řešit dle vlastních požadavků. Multiplayer v ArmA hrách má svá specifika, která je vhodné znát (doporučuji mrknout na BI Wiki). A proč? Pointa celého řešení je v tom, že každý má svou bednu vytvořenou jen na svém počítači. Ale nepředbíhejme a začněme pěkně od začátku. Než si vytvoříme hlavní skript, tak v editoru zadáme spínač s podmínkou spuštění: local player a do pole s kódem, ještě se spouští po aktivaci zadáme zavolání hlavního skriptu. [] execVM “player_init.sqf” Tento spínač nám zajistí, že se skript spustí každému hráči a vyhodnocuje[…]

Včera vyšlo již druhé DLC pro samostatně hratelný datadisk ArmA 2: Arrowhead s názvem PMC, které přineslo zajímavé novinky, takže bychom se mohli ohlédnout za několika z těch, které se od vydání datadisku Arrowhead objevily. Private Military Company Začněmě pěkně od těch nejnovějších. Každý kdo rozehrál kampaň Operation Black Gauntlet, tak si všiml několika novinek. BIS_fnc_playVideo Tou asi nejvýraznější a dříve avizovanou je možnost přehrání videa přímo ve hře. Jedinou podmínkou je mít video v ogv formátu, což je pro video tím, čím je pro audio ogg formát (přesněji řečeno od roku 2007). Více informací naleznete na BI Wiki Zavolání je celkem prosté: _video = [“\ca\video_pmc\CP00_intro.ogv”] spawn bis_fnc_playVideo; waitUntil {scriptDone _video}; Pro export do ogv formátu můžete zkusit například Theora[…]

Před týdnem vyšla ArmA 2 a každý si jistě všiml, že jsou v ní nové obrazové efekty. O některých z nich na které můžete narazit a které můžete použít by vás chtěl seznámit v následujících několika řádcích a příkladech. Úvod V tomto článku předpokládám alespoň základní znalosti práce s příkazy v ArmA či OFP, jejich vytváření a volání. Použitá syntaxe bude odpovídat sqf skriptům. Příkazy Při práci s obrazovými efekty vystačíme se třemi novými příkazy. Jde o ppEffectAdjust, ppEffectEnable a ppEffectCommit. První příkaz ppEffectAdjust je v podstatě nejdůležitější, protože slouží k vybrání a nastavení parametrů daného efektu. Následující příkaz ppEffectEnable povoluje či zakazuje patřičný efekt a příkaz ppEffectCommit udává v jaké době se má přechod do výsledného efektu provést. Pro[…]