Dynamická tvorba spínačov
Z Armed Assault nápověda
Úvod
Rovnako ako je možné dynamicky tvoriť priamo v misii značky, samostatné jednotky alebo skupiny, tak je možné kedykoľvek vytvoriť aj samotné spínače a napríklad tak v reálnom čase meniť aj priebeh celej misie. Ako zrealizovať takýto spínač priamo v misii si popíšeme na nasledujúcich riadkoch.
Vytvorenie nového spínača
Samotný spínač (taktiež veľakrát pomenovaný ako "senzor" či "triger" resp. "trigger") vytvoríme intuitívnym príkazom createTrigger.
Príklad:
mojSpinac = createTrigger ["EmptyDetector", position player];
Priamo na mieste hráča sa teda vytvorí spínač typu "EmptyDetector" a bude mať názov "mojSpinac". Tento názov teraz budeme používať u všetkých príkazov súvisiacich s týmto našim vytváraným spínačom.
Teraz máme sice vytvorený spínač, ale jeho veľkosť je nulová, takže by sme pomocou neho nemohli nič detekovať-spínať. Na nastavenie týchto dôležitých hodnôt nám teda poslúži ďalší intuitívny príkaz setTriggerArea. Príklad:
mojSpinac setTriggerArea [100, 50, 45, false];
Takto sme nášmu spínaču nastavili oblasť detekcie v tvare elipsy. Hodnoty a a b sú totiž nastavené rozdielne, ďalšia hodnaota označuje pootočenie spínača o 45 stupňov a posledným parametrom poľa sme zadefinovali samotný tvar spínača (false = defaultný tvar obdĺžnik/štvorec sa zmení na kružnicu/elipsu). Ak by sme namiesto parametra false uviedli true, spínač by sa zmenil na obdĺžnik s rozmermi 100x50 metrov a bol by tiež pootočený o 45 stupňov.
Tento príkaz a aj ďalšie príkazy môžete samozrejme použiť aj na spínače vytvorené už priamo v editore hry. Podstatná vec je aby ste mali pomenované všetky spínače s ktorými chcete dynamicky pracovať priamo počas hrania. Ako príklad použitia uvediem ohraničený herný priestor okolo hráča, ktorý nesmie opustiť pokiaľ napríklad nevyčistí danú obec ktorá je ohraničená týmto spínačom. Po dokončení úlohy (vyčistí obec od nepriateľských jednotiek) nastavíte tomuto spínaču nulové rozmery a hráča pošlete preč z obce k plneniu inej úlohy. Ohraničujúci spínač už akoby neexistoval (má nulové rozmery) a tak nebude hráč pri odchode z obce upozornený na to že opúšťa bojovú zónu.
Ďalším príkazom na ktorý pri dynamickom vytvorení spínača nesmieme zabudnúť je setTriggerActivation, čo je vlastne nastavenie detekčných vlastností spínača. Príklad:
mojSpinac setTriggerActivation ["WEST", "NOT PRESENT", false];
Náš hráč je postava za stranu západ (WEST), tak sme nastavili prvý prvok poľa (kým bude spínač aktivovaný) na jeho stranu. Druhý prvok poľa predstavuje stav kedy bude samotný spínač aktivovaný. V našom prípade to bude vtedy, ak hráč opustí územie spínača. A posledným prvkom je hodnota typu boolean pomocou ktorej nastavujeme opakované spínanie spínača pri splnení jeho podmienok. Nastavili sme false, čiže spínač sa aktivuje iba raz.
Nasleduje príkaz setTriggerStatements. Ako už samotný názov napovedá, bude sa jednať o nastavenie podmienok spínača a taktiež príkazov ktoré majú byť vykonané po aktivácii-deaktivácii. Príklad:
mojSpinac setTriggerStatements ["alive player", "hintC 'KONIEC'", " "];
Prvým prvkom poľa kontrolujeme stav "žitia" jednotky hráča, čo je zároveň podmienka pre aktiváciu spínača. Druhým prvkom oznamujeme pri samotnej aktivácii spínača hráčovi že nastal koniec misie. Tretí prvok poľa ponechávame prázdny, pretože pri deaktivácii spínača nepotrebujeme vykonať nič.
A nakoniec si ešte určíme aký typ prepínača sme to vlastne vytvorili. Na to použijeme príkaz setTriggerType. Čiže čo sa udeje (prepnutie, ukončenie, ...) ak hráč opustí územie spínača s názvom "mojSpinac".
Príklad:
mojSpinac setTriggerType "END1";
V našom príklade to bude spínač zaručujúci koniec misie.
Na záver si ukážeme ako by mohol vyzerať celý kód pre dynamické vytvorenie spínača v skripte bez dodatočných komentárov: spinac.sqf
mojSpinac = createTrigger ["EmptyDetector", position player]; mojSpinac setTriggerArea [100, 50, 45, false]; mojSpinac setTriggerActivation ["WEST", "NOT PRESENT", false]; mojSpinac setTriggerStatements ["this", "hint 'KONIEC'", " "]; mojSpinac setTriggerType "END1";
Pripojenie spínača na vozidlo
Počas editácie sa ale môžete dostať do situácie, keď budete potrebovať "pripnúť" nejaký spínač či už vytvorený v editore, alebo pomocou skriptu, k nejakému vozidlu alebo jednotke. Na realizáciu takéhoto spínača použijeme príkaz triggerAttachVehicle.
Príklad:
uazTrigger triggerAttachVehicle [uaz];
Spínač s názvom "uazTrigger" sa pripojí na vozidlo s názvom "uaz". Kamkoľvek sa pohne toto vozidlo, tam bude v reálnom čase presúvaný aj jeho spínač. Môžeme si to predstaviť ako virtuálny náklad. Ak chceme v danom okamžiku alebo na danom mieste v misii odpojiť tento spínač od vozidla, použijeme ten istý príkaz, ale do jednoprvkového poľa (teraz tam máme názov vozidla) nezadáme nič.
Príklad:
uazTrigger triggerAttachVehicle [];
Ako príklad použitia uvediem zasa vymedzený priestor pre hráča, ktorý bude zasa predstavovať priestor nejakej obce ktorú má hráč vyčistiť. Po splnení tejto úlohy musí hráč nastúpiť do čakajúceho UAZ-u. V tomto okamžiku sa napríklad spustí kontrolný skript, ktorý bude neustále kontrolovať či je hráč vo vozidle a ak áno, pripne tento spínač na vozidlo. Takto sa potom hráč presunie spolu so "svojim" spínačom do druhej obce ktorú bude musieť znova vyčistiť. Akonáhle v tejto druhej obci znova vystúpi z UAZ-u, spínač sa odpojí od vozidla a jeho stred bude teraz tvoriť miesto zastavenia vozidla. travel.sqf
while { alive player } do {
if ( player in uaz ) then {
uazTrigger triggerAttachVehicle [uaz];
} else {
uazTrigger triggerAttachVehicle [];
};
sleep 1;
};

