https://foxhound.international/ARMA-3-SQF-Cheat-Sheet-Revision-3.pdf http://killzonekid.com/category/games/arma-3/ https://community.bistudio.com/wiki/Arma_3_Assets https://community.bistudio.com/wiki/Category:Scripting_Commands_Arma_3 https://community.bistudio.com/wiki/Arma_3_CfgFunctions https://community.bistudio.com/wiki/Arma_3_CfgWeapons_Weapons https://community.bistudio.com/wiki/Category:Functions https://community.bistudio.com/wiki/createVehicle/vehicles https://community.bistudio.com/wiki/User_Interface_Event_Handlers https://community.bistudio.com/wiki/Mission_Presentation https://community.bistudio.com/wiki/Debriefing https://community.bistudio.com/wiki/Spectator_Mode https://community.bistudio.com/wiki/Arma_3_Respawn https://community.bistudio.com/wiki/Arma_3_Characters_And_Gear_Encoding_Guide https://community.bistudio.com/wiki/Category:Introduced_with_Arma_3
Author: celoush
Pokud máte zájem najít nějaké zajímavé skripty či doporučení pro Arma hry, pak zkuste tyto kanály: ALIAS – https://www.youtube.com/channel/UCdRj3iu6T1gD5olhQ995x9Q Feuerex – https://www.youtube.com/user/Feuerex
DLC Marksmen přinesl nový herní systém End Game s Revive systémem a dynamickými skupinami. Jak je zapnout ve vlastní misi? Revive systém Aktivuje se poměrně jednoduše. Stačí pár úprav či doplnění souboru description.ext respawnTemplates[] = {“Revive”}; //možné přidat “MenuPosition”,”Spectator” respawn = 3; //nebo BASE respawnDelay = 25; respawnOnStart = -1; reviveDelay = 5; reviveForceRespawnDelay = 3; reviveBleedOutDelay = 120; Pokud ale chcete, aby některý z vojáků byl vyjmut z možnosti oživení, pak mu stačí upravit proměnnou BIS_revive_disableRevive _unit setVariable [“BIS_revive_disableRevive”, true, true]; znovu zapnout jde změnou na false: _unit setVariable [“BIS_revive_disableRevive”, false, true]; Dynamické skupiny Pro zprovoznění se na serveru (initServer.sqf) spustí „inicializace“ [“Initialize”] call BIS_fnc_dynamicGroups; Každému hráči se pak zavoláním v initPlayerLocal.sqf přidá možnost využívat dynamických skupin. [“InitializePlayer”, [player]] call BIS_fnc_dynamicGroups;[…]
První úkol Následující kód obsahuje problém, který nemusí být na první pohled jasný. Odhalte ho a navrhněte řešení. a = true; if (a == true) then { hint “a je true”; } else { hint “a neni true”; }; Druhý úkol Zadefinujeme dvě funkce, kdy jedna volá v cyklu druhou a hlavní následně zavoláme. Odhalte chybu a navrhněte řešení. my_fnc_a = { _id = _this; // … nejake prikazy }; my_fnc_main = { for “_id” from 1 to 10 do { // … nejake prikazy _back = 1 call my_fnc_a; }; }; 0 call my_fnc_main; Třetí úkol Projděte si tyto tři příkazy a uveďte, co bude na konci v proměnné „a“ po provedení skriptu. a = [1]; b = [a,2]; (b select[…]
Ř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,dataTypes,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[…]