Lekce 1 - Úvod do jazyka Skript a první kód
Skript je plugin, který umožňuje tvořit jednoduché přídavné pluginy k vašemu Minecraft serveru bez znalosti Javy. Tvorba probíhá pomocí série různých příkazů psaných do plaintext souboru (je to tedy vlastní skriptovací jazyk). Příkazy jsou zadávány v angličtině a jsou jednoduché. Dají se tedy tvořit různé pluginy (nebo spíše skripty, jelikož pro jejich spuštění potřebujete plugin Skript) pro váš Minecraft server.
Pokud chcete zjistit co všechno se dá pomocí Skriptu vytvořit, stačí se podívat na různá Skript fóra, dokumentaci (doporučuji SkUnity) nebo třeba jen do kategorie "Skript" na Spigotu, která značí jak moc je Skript vlastně rozšířen.
Výhody Skriptu
- Jednoduchost celého procesu psaní skriptu (není třeba znalost Javy ani žádného jiného jazyka)
- Rozšířená komunita (téměř vždy najdete odpověď, a když ne, někdo vám rád na fórech pomůže)
- Plno skriptů, které si můžete stáhnout a učit se z nich různé nové funkce
- Mnoho dokumentací (ať už starší dokumentace od původního vývojáře, nebo novější od aktuálního vývojáře, nebo komunitní SkUnity, na které kromě originálních kódů máte i kódy, které můžete využít s Skript Addony)
- Velké množství addonů, které mohou přidat více možností do vašeho kódu, např. zapisování a čtení YML souborů, čtení dat z githubu (například při čtení aktuální verze), tvorba vlastních GUI atd.
- Na psaní skriptu není třeba žádný profesionální editor či program, bohatě stačí i Poznámkový blok
Aby to bylo fér, podívejme se i na nevýhody.
Nevýhody Skriptu
- Citlivost formátování - Každou část kódu musíte pečlivě odtabovat, jinak bude Skript hlásit problémy
- Soubory jsou ukládány v plaintextu, tudíž může naprosto kdokoliv editovat váš kód a vydávat ho za svůj
- I na poměrně dost základních věcí (tedy, spíše záleží na tom, co tvoříte) potřebujete nějaké addony
Jednoduše bych to shrnul tak, že pokud nemáte zájem tvořit v Javě, nebo zkrátka tomu nerozumíte a chcete pouze tvořit pluginy, tak je Skript pro vás, ale je třeba si uvědomit i již zmíněné nevýhody.
Právě jsi vytěžil kámen!
Začneme jednoduchým skriptem, který nám zašle zprávu do chatu když vytěžíme kámen. Kód bude vypadat nějak takto:
on mine of stone: # Event (při vytěžení kamene) send "Prave jsi vytezil kamen!" to player # Odešle zprávu hráčovi
Uložíme jako <název>.sk
a vložíme do složky
plugins/Skript/scripts

Dobrá, nyní nám to při vytěžení kamene zašle zprávu do chatu. Nutno
podotknout, že zprávy lze samozřejmě i barevně upravovat pomocí barevných
kódů (&<kód>
, např. &2
). Ale
řekněme, že chceme zasílat barevně formátovanou zprávu při vytěžení
různých ore. V tom případě bude kód vypadat například takto:
on mine of iron ore: send "&7Prave jsi vytezil &f&lIron Ore&7!" to player on mine of gold ore: send "&7Prave jsi vytezil &e&lGold Ore&7!" to player on mine of diamond ore: send "&7Prave jsi vytezil &b&lDiamond Ore&7!" to player on mine of emerald ore: send "&7Prave jsi vytezil &a&lEmerald Ore&7!" to player on mine of lapis ore: send "&7Prave jsi vytezil &1&lLapis Ore&7!" to player on mine of redstone ore: send "&7Prave jsi vytezil &4&lRedstone Ore&7!" to player
A výsledek zase nějak takto:

Samozřejmě místo "gold ore" aj. můžeme do kódu vložit třeba "wood planks" nebo jiný název blocků.
První příkaz
Předpokládám, že budete ve svých skriptech ze všeho nejčastěji využívat příkazy - vypadají nějak v tomto stylu:
/prikaz <argument1>
A stejně se i zadávají přímo do chatu pro jejich spuštění. Základ je příkaz a poté ho mohou rozšiřovat argumenty. Příkazy ve Skriptu tvoříme takto:
command /prikaz: trigger: send "text" to player
Dobrá, takže si můžeme vymyslet příkaz, kupříkladu
/test
, když je spuštěn, odešle se hráči do chatu zprávu
"Funguje to!":
command /test: trigger: send "&cFunguje to!"
Výsledek (pokud vše funguje) by měl vypadat takto:

To bude pro první lekci Skriptu vše, kód ukázaný v tutoriálu si můžete stáhnout zde: https://pastebin.com/pC9kEW5p
Skript stáhnete z oficiálního GitHubu vývojáře: https://github.com/…ipt/releases
Proměnné
Prvně je ale třeba si položit otázku - co to vlastně je proměnná?
**Proměnná **je něco, co uchovává určitou informaci (hodnotu). Proměnná tedy může např. uchovávat informaci o hráči a další. Ve Skriptu jsou proměnné hojně využívány, právě díky tomu, že se do nich dají ukládat informace.
Skript umožňuje použití tří typů proměnných:
- "Normální" proměnné - nebo zkrátka proměnné - jsou unikátní a jejich data jsou uchovávána i po restartu serveru (nebo Skriptu)
- Lokální proměnné - nebo také dočasné proměnné - jsou lokální pouze pro jednoho hráče, tyto proměnné se automaticky po restartu odstraní
- Options - Nelze je změnit ze hry, jsou nastaveny přímo na začátku skriptu
Mezi normální proměnné můžete zařadit i listy nebo česky seznamy - to znamená, že v jedné proměnné je několik samostatných hodnot (může být použito například pro list warpů atd.)
Samotný Skript ovšem obsahuje už předem hotové a použitelné proměnné, jako třeba:
player # Označení hráče now # Aktuální datum, čas... message # Zpráva do chatu (využijeme například při eventu On Chat) block # Právě vytěžený block (využijeme například při eventu On Destroy)
Jejich použití můžeme využít například v jednoduchém logování zničených a položených blocků.
Využijeme eventu "on destroy" a "on place" a taky funkce "log", kterou můžeme využít takto:
log "<text>" to file "<název souboru>"
Všechny soubory tvořené pomocí funkce "log" se ukládají do složky "plugins/Skript/logs". Nyní tedy využijeme dvou eventů a funkce log k vytvoření tohoto kódu:
on break: # Event - při zničení log "DESTROY | %player% znicil block %block%" to file "logovani.log" # Logujeme text do souboru "logovani.log" za použití proměnných block a player on place: # Event - při položení log "PLACE | %player% polozil block %block%" to file "logovani.log"
Na tomto příkladu si můžeme všimnout toho, že proměnné zapisujeme s procenty na začátku a konci. Toto slouží pro identifikaci toho, že se jedná o proměnnou.
Výsledek v souboru "logovani.log" vypadá nějak takto:

pozn. soubory je nutné otevírat v notepad++ nebo pspadu, při otevření v default windows editoru (poznámkový blok) se text hodí do jednoho řádku a je to nepřehledné, viz zde.
Dále máme námi definované proměnné. Jejich využití si můžeme ukázat na jednoduchém /home systému:
command /sethome: # Příkaz definován trigger: set {domov.%player%} to location of player # Nastavíme proměnnou {domov.%player%} (závorky tam musí být) na aktuální lokaci hráče send "&aDomov nastaven!" to player # Odešleme hráči zprávu o nastavení domova command /home: trigger: teleport player to {domov.%player%} # Teleportujeme hráče na souřadnice nastavené v jeho proměnné send "&aByl jsi teleportovan do sveho domova!" to player
Výsledek vypadá nějak takto (jestli jste vše udělali správně):

Při použítí /sethome se vám nastaví home a pomocí /home se na něj teleportujete.
Dobrá, ale nyní si ukážeme aplikování proměnných přímo v textu odesílaného hráčovi. Použijeme tento kód:
command /mycoord: trigger: set {_playerloc} to player's location # Nastavíme proměnnou {_playerloc} na aktuální lokaci hráče send "&cTve souradnice jsou:&a %{_playerloc}%" to player # Zašleme zprávu s proměnnou - musíme ji napsat s procenty
(ano, do chatu lze napsat i jednoduše %player's location%, ale chtěl jsem ukázat jak použít nadefinovanou proměnnou)
Výsledek:

Dobrá, to bychom měli probrané obyčejné proměnné. Nyní si trošku rozebereme a ukážeme options. Options
Options nastavujeme tak, že na začátku skriptu vložíme tento kód (samozřejmě přizpůsobený):
options: verze: 1.0 prefix: &ePlugin
Tímto jsme si nastavili option verze a option prefix - ty můžeme následně dále využít ve skriptu jako neměnné proměnné.
Zkusíme tedy využít option prefix v příkazu /mycoord:
command /mycoord: trigger: set {_playerloc} to player's location # Nastavíme proměnnou {_playerloc} na aktuální lokaci hráče send "&c[{@prefix}&c] &cTve souradnice jsou:&a %{_playerloc}%" to player # {@prefix} značí option "prefix", options píšeme bez procent a se zavináčem na začátku názvu
Výsledek po použití optionu vypadá nějak takto:

Samozřejmě to může vypadat mnohokrát jinak, podle toho, jak si
nastavíte option prefix
Využití obou definovaných optionů naráz lze udělat například u příkazu /about:
command /about: trigger: send "&c[{@prefix}&c] &cPlugin v{@verze}" to player

To bude pro první lekci Skriptu vše, poslední kód ukázaný v tutoriálu si můžete stáhnout zde: https://pastebin.com/yjN5qMSL
V příští lekci, Skript - podmínky a argumenty, se naučíme něco málo ohledně argumentů v příkazech.