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;[…]
Author: celoush
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[…]
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[…]