Vlastní příkazy

Doposud si hráč mohl ukládat vlastní příkaz několika způsoby - na klávesu přes /bind, na pickup přes /onpickup, a také přes /oncheckpoint. Jediný způsob, jak vlastní příkaz spustit kdykoliv, byl uložit si ho přes /return do proměnné $return a tu pak použít přímo za znakem /.

Nový systém, spojený s vylepšeným typem maker, umožňuje definovat libovolný příkaz pro pozdější použití. Tak jako /bind používá čísla (kláves) pro identifikaci příkazu, tak i v tomto novém systému je definovaný příkaz uložen pod konkrétním libovolným číslem, pomocí nějž lze poté spustit.

Příkaz /def umožní takový příkaz uložit. Jako první parametr se předá číslo (i záporné), které bude sloužit k identifikaci příkazu. Následuje příkaz, který má být pod tímto číslem uložen. Součástí příkazu může, ale nemusí být úvodní lomítko. Chcete-li tento příkaz odstranit, použijte /undef.

Prozatím jediný možný způsob, jak nyní tento příkaz vyvolat, je pomocí /func (vlastní příkazy budu také nazývat příkazovými funkcemi, níže se dozvíte důvod). Tento příkaz jako jediný parametr bere číslo vlastního příkazu, který okamžitě vyvolá.

K čemu se toto hodí? Mnohdy si můžete přát uložit si pozici, abyste ji mohli kdykoliv znovu načíst. Dříve byla jediná možnost využít proměnné $return, do které se uloží pozice příkazem /pos. Samotná pozice stále ukládat přímo nejde, ale lze uložit teleport na tuto pozici: /def 1 warp $pos. Připomínám, že $pos se nahradí za hráčovu pozici ještě před vykonáním příkazu /def. Tím pádem se vykoná pro konkrétní pozici, např. /def 1 warp 1312 -512 12. Příkazem /func 1 se nyní spustí příkaz /warp 1312 -512 12 a hráč se teleportuje na původní pozici. Pokud pozici nechcete použít pro teleport, ale třebas pro vytvoření objektu nebo jiný nespecifikovaný účel, lze ji prostě vrátit pomocí /return jako /def 1 return $pos. Kratší zápis tohoto je /var 1 $pos. Nyní lze tuto funkci využít klasicky pomocí maker pro teleport: /warp $/func 1$.

Světové příkazy

Pokud byste chtěli umožnit hráčům používat vaše vlastní příkazy, můžete. Tak jako je /def, existuje také /wdef. Tento příkaz definuje světový (globální) příkaz, tedy takový, který je dostupný pro vás i všechny hráče ve světě, který vlastníte. Používá se stejně jako /def až na ten rozdíl, že příkaz nemusí být zadán, pokud již je definován hráčský příkaz se stejným číslem (pak se příkaz zkopíruje). Taktéž existuje obdobně i /wundef a /wfunc. Ten spustí příkaz vlastníka světa, existuje-li, případně váš světový příkaz, pokud současný svět není nikým vlastněn.

Veřejné příkazy

V případě nutnosti může hráč dovolit ostatním hráčům, aby jej do omezené míry ovládali. Pro tyto účely existují analogické příkazy /rdef, /rundef, /rfunc. Odlišnost v použití těchto příkazů je, že /rfunc potřebuje navíc i ID hráče, u nějž bude veřejný příkaz hledat. Daný příkaz se pak nespustí hráči, který napsal /rfunc, ale tomu, který příkaz definoval. Navíc je možné v samotném příkazu zjistit, kdo jej vyvolal, pomocí proměnné $0, za niž se nahradí ID původního hráče. Např. /rdef 0 print $(p $0) vypíše jméno hráče, který vyvolal veřejný příkaz.

Parametry

Není zcela přesné, že příkaz /func nebere žádné parametry. Ve skutečnosti mohou být všechny parametry za číslem funkce použity, ale ani nemusí být. To je totiž na vás. Proto vlastní příkazy jsou funkce - můžete jim předávat parametry, které se pak v nich vykonají.

Nikde není třeba specifikovat, jaké parametry příkaz potřebuje. Stačí pouze odkázat na parametr přes zápis $n a toto místo se nahradí n-tým parametrem předaným příkazu /func. Mají-li být zkopírovány všechny parametry, lze také použít speciální zápis $*. Není-li parametr zadán, specifikátor se pouze odstraní. $* je užitečný, pokud chcete všechny parametry prostě předat jinému příkazu, ale pokud máte část parametrů pevně zadanou a část s volitelným počtem, nelze efektivně použít. Proto lze použít zápis $@n, který vezme všechny parametry počínaje n-tým.

Příklad: /def 1 print $1 plus $2 je $(e $1+$2) stvoří vlastní funkci, které předáte dvě čísla (/func 1 a b) a ona vypíše jejich součet. To nás vede rovnou k další sekci tohoto návodu:

Substituce za poziční parametry se chová stejně jako u běžných příkazů, kde je možné použít escapování v případě mezery v argumentu. Jak zápis $n, tak $@n vybere zadané parametry s ohledem na escapování a zároveň odstraní relevantní zpětná lomítka. Oproti tomu $* vybere text parametrů přesně tak, jak byl zadán.

Vykonávání příkazů

$(e a+b) není základní způsob, jak sečíst dvě čísla. Ten je přeci $e:a+b$, tak proč to funguje? Aby bylo lehčí psát makra do funkcí, chová se příkaz /def jako /run co do zápisu maker. Tím pádem můžete rovnou používat příkazové substituce, aniž by bylo nutné řešit escapování. To samozřejmě také jde: /!def 1 print $return uloží přímo příkaz /print $return. Pokud nechcete používat nový systém maker, i to lze zařídit. Stačí před samotný příkaz napsat !. Pokud nechcete používat žádná makra, pak !!. /!def 1 !!print $return vypíše na obrazovku prostý text "$return" (první !, aby se $return nenahradilo před příkazem /def; druhý !, aby se nepoužilo chování příkazu /run; třetí !, aby se nepoužila žádná makra ve vyhodnocování příkazu /print).

Jak je patrné, vykřičník na začátku příkazu má speciální význam pro samotné vyhodnocování. Chcete-li, aby byl součástí volání příkazu, lze před něj napsat mezeru. /!def 1 / !print $(e 1+1) $e:1+1$ vypíše text "2 $e:1+1$", neboť standardní makra nikde nejsou vyhodnocena (první ! pro příkaz /def, druhý ! pro příkaz /print). Místo mezery lze také použít podtržítko: /!def 1 _!print $(e 1+1) $e:1+1$.

Z důvodu bezpečnosti jsou všechny znaky $ předané v parametrech upraveny tak, aby nedošlo k jejich vyhodnocení bezprostředně v příkazové funkci. Je-li funkce /def 1 print $* vyvolána přes /!func 1 $return, je vypsán pouze text "$return". Toto pravidlo je samozřejmě možné vypnout pomocí znaku .: /def 1 .print $*.

Přítomnost vykřičníku či jiných znaků neovlivní expanzi parametrů - $n se bude nahrazovat vždy. Nahrazený text také může být zpracován v následujících příkazech pomocí klasických maker.

Příklady

/rdef 321 waudio $*

/wdef 0 rfunc $me 321 $*

Jste-li vlastník světa, mohou přes vás takto ostatní hráči pouštět hudbu, již jinak může pouštět pouze vlastník, pomocí /wfunc 0 url. Číslo 321 je zvoleno náhodně, slouží pouze jako zabezpečení pro veřejný příkaz. $me značí vaše ID. Definice může být upravena i tak, aby se ukázal hráč, který hudbu spustil.

/rdef 321 print $(p $0) spustil zvuk!;waudio $*

 

/!def 0 def $1 warp $pos

Pokud vás nebaví neustále psát dlouhý příkaz plný dolarů jen pro uložení pozice, stačí toto napsat jednou. /func 0 n uloží teleport na momentální pozici do funkce s číslem n a /func n jej provede.

 

/!def 0 var -10$1 $pos

/!def 1 def -1 $@2; func -1 $(func -10$1)

Volání /func 0 n uloží stávající pozici jako funkce pod číslem -10n (aby nedošlo ke kolizi s jinými funkcemi). Nyní lze tuto proměnnou použít libovolným způsobem, například pro příkaz /warp jako /func 1 n warp $*. Za $* se nahradí hodnota z proměnné; taktéž ji lze rozdělit na souřadnice: $1 $2 $3. To samozřejmě funguje pro libovolnou proměnnou, nejen $pos. Máte-li v příkazu další makra a nechce, aby došlo k jejich nahrazení příliš brzy, lze také druhý příkaz definovat jako /!def 1 !!cmd !def -1 !$@2&func -1 $/func -10$1$.


Vytvořte si webové stránky zdarma! Webnode