Plugin Skript- Příkazy a speciální předměty

Návody lis 26, 2020

Předchozí lekce- "Proměnné a eventy"

Minule jsem zmínil, že můžete detekovat, jestli hráč klikl s určitým předmětem. Tenhle event můžete kombinovat s různými výrazy. Můžete třeba zjistit, jaké jméno má předmět, který hráč drží- (is) named. Výrazy se ve 100% případů kombinují s podmínkami nebo jinými prvky. V tomhle případě bychom mohli napsat on click with stick named "<jméno>", ale Skript mívá mnohdy problém správně parsovat předmět, pokud hned do eventu napíšeme jméno. V některých verzích to fungovalo, v jiných ne.

Proto bude lepší, když použijeme podmínku hned za kontrolou eventu. Jak jsem už psal- podmínky kontrolují, jestli je něco splněno. V tomhle případě budeme kontrolovat, jestli je předmět, co má hráč v ruce (tool of player), nějak pojmenovaný- if name of tool of player is "<jméno>":. (Poznámka- podobný syntax je v dokumentaci i- if name of player's held item is "<jméno>".)

V téhle chvíli kód zjistí, že hráč klikl s tyčkou. Poté se pokusí zjistit, jestli se tyčka nějak jmenuje, pomocí podmínky if. Pokud se tyčka jmenuje Hůlka, tak pokračuje v kódu a pošle hráči zprávu.
Nevýhoda takového jména je v tom, že si takto může předmět pojmenovat kterýkoli hráč pomocí kovadliny. Když je jméno jednoduše napsáno mezi uvozovkami, je to stejné, jako přejmenování předmětu v kovadlině.

Jelikož chceme, aby hráč obdržel zprávu (nebo aby se jakákoli jiná činnost spustila) jen v případě, že má nějaký zvláštní předmět, musíme předmět upravit tak, aby ho hráč nemohl normálně získat. Toho dosáhneme přidáním barev, popisu nebo nějaké NBT hodnoty. (Pokud nevíte, co je to NBT, tady je zkrácený popis- NBT je hodnota, která Minecraftu říká, jaké vlastnosti má daný předmět, entita nebo cokoliv jiného. Např. poškození předmětu je NBT, jméno a popis jsou také NBT. Skript ale dokáže oddělovat jméno a jiné NBT prvky.)

Pokud byste chtěli používat NBT předmětů, musíte si stáhnout addon (rozšíření) do Skriptu. Tímto addonem je- SKBee. Skript má mnoho šikovných addonů, mimo SKBee doporučuji i SKQuery, SKUtilities, a pokud chcete propojovat Skript s některými jinými pluginy (třeba pluginy na scoreboard), bude se hodit i PlaceHolderAPI. Ale tohle je pouze informace navíc, stejně se zatím musíte naučit základy. Jen si pamatujte, že tahle jména existují.

Prozatím zkusme jméno předmětu změnit na žlutou barvu a tučné písmo. Ve Skriptu můžete používat i barvy v textovém poli. Barvy značíme pomocí značky &, za kterou připíšeme číslo nebo písmeno, odpovídající barvě. Ty najdete tady. V odkazu, co jsem poslal, jsou různé formáty, které Minecraft umí číst pro barvy. Vás zajímá ten druhý sloupec. Je tam napsáno třeba §a, což je formát, který čte Minecraft. Skript používá místo § značku &. O kousek níž jsou potom zvláštní kódy, které píšete za značku barvy, aby písmo mělo nějaký jiný vzhled- tučné, šikmé, přeškrtnuté, podtržené... Tučný název předmětu se žlutou barvou bude tedy vypadat &e&l. Zkusme to přidat do kódu:

Teď už se zpráva pošle pouze v případě, že tyčka bude mít žluté, tučné jméno. Zkusme ale kód ještě trošku vylepšit a upravit.

Upravíme kód tak, že do podmínky vložíme celou detekci předmětu- jestli je to tyčka, jaké má jméno a přidáme i kontrolu popisu (lore). Lore se ve Skriptu kontroluje pomocí with lore "<popis>" (and "<další řádek popisu>" and "<další>"....) a lze ho taky upravit pomocí barev.

Na tomhle obrázku se nám změnilo hned několik věcí- přidal jsem barvičky, ať líp vidíte různé části kódu; pomocí # můžete přidat text, který bude Skript ignorovat (skvělé pro popisky a poznámky).
Hlavní změnou je ale nová podmínka. Podmínka teď zjišťuje, jestli předmět, který hráč drží, je tyčka se jménem &e&lHůlka a popisem &bNa kouzlení. Prakticky jsme do jediné podmínky dali celkem 3 různé podmínky- zjištění předmětu, zjištění jména a zjištění popisu.

Pokud bych chtěl detekovat i enchant na předmětu, použil bych k tomu další výraz- of <enchant> <level> (and <další enchant> <level>....). Příkladem si uveďme naši tyčku, kdyby měla enchant knockback na 2. levelu. Potom by předmět byl- stick of knockback 2 named "&e&lHůlka" with lore "&bNa kouzlení". Jednoduché, že?

Teď bychom ale potřebovali předmět taky nějak získat... Co si takhle vytvořit příkaz, který nám předmět dá?

Příkazy:

Příkazy (commandy) mají hned několik novinek. Jedna z novinek pro vás budou argumenty, což jsou dodatečné informace, které příkazu dáváte (třeba jméno hráče, číslo, text...). Další novinkou budou parametry, jako třeba permisse, kterou musí hráč mít pro použití. Pojďme si všechny novinky vypsat.

Nové pojmy:

  • Povinný argument (Dává další informace příkazu, nejde ho vynechat. Zapisuje se pomocí <arg>.)
  • Nepovinný argument (Tento argument lze v příkazu vynechat. Zapisujeme ho pomocí [<arg>].)
  • Argumentový typ (Tohle znamená druh typu, který argumentu odpovídá. Může to být- text, hráč, offline hráč, číslo nebo i jiné věci. Je jich víc, ale tyhle jsou nejpoužívanější.)
  • Parametr (Jsou to další prvky příkazu- permisse, alias, zpráva pro správné užití a další.)

Když máme tohle za sebou, pojďme si vytvořit příkaz, který hráči givne (tuhle frázi asi znáte z Minecraftu) tu naši speciální tyčku:

Pojďme si rozebrat, co tu máme. Nový příkaz zapíšete pomocí command /<příkaz>:, v našem případě se tedy příkaz jmenuje tycka a přidal jsem mu nepovinný argument [<player>], což je nějaký hráč.
Příkaz má taky parametry permission: wand (Tohle je název permisse, kterou musí hráč mít, aby mohl příkaz použít. Pokud jste OP, netýká se vás to.), permission message: <zpráva> (Zpráva, která se hráči napíše, když nemá na příkaz povolení.) a parametr trigger (Nejdůležitější prvek. Ten příkazu říká, co má vlastně dělat.).
Dále jsem už jen přidal funkci na givnutí předmětu hráči- give <předmět> (named <jméno>) (with lore <popis>) to <příjemce>. Všimněte si, že jsem použil jako příjemce arg-player, což je hráč, kterého napíšete do argumentu [<player>]. Ekvivalentem je arg-1, ale ten znamená "kterýkoliv argument, který je na prvním místě", což by mohl být problém, kdyby byl na prvním místě např. argument číslo.

Pamatujete si, jak jsem na začátku říkal, že je důležité přesně napsat příjemce? Tohle je přesně ten příklad, který jsem měl na mysli. Pokud byste jako příjemce napsali pouze player, tak by to tyčku dali hráči, který příkaz použil, ne hráči, který je napsaný v argumentu.

Pomocí příkazů můžete upravovat i proměnné, mazat předměty z inventáře pomocí remove <předmět> from <entita> (Např. "remove 10 stone from player" by hráči odebral 10 kamene), můžete posílat zprávy a dělat mnoho dalších fajn věcí.

Můžete si otestovat další možnosti- pojmenujte různé předměty různými jmény nebo jim dejte různé enchanty. Můžete si vytvořit speciální příkaz, který vám třeba dá supersilný krumpáč, co bude mít efficiency 10... je to jen na vás :)

Příště si ukážeme nějaký základní "plugin", který si můžete se Skriptem vytvořit- skilly.

Tagy

Darkry

Jsem junior v oblasti programování. Věnuju se C# a pluginu Skript pro Minecraft. Baví mě tvorba her a aplikací, stavění a vedení serverů, psaní příběhů a dělání videí na YouTube :)

Bomba! Úspěsně jste se přihlásil do odběru novinek.
Výborně! Dokončete postup pro plný přístup.
Vítejte zpět! Byl/a jste úspěšně přihlášen/a!
Úspěch! Nyní máte přístup k veškerému obsahu.