Lekce 2 - Skript - podmínky a argumenty
V minulé lekci, Úvod do jazyka Skript a první kód, jsme si ukázali základní příkazy a naučili se pracovat s proměnnými.
Nyní je ale nutné, abychom si představili ještě jednu velice důležitou a užitečnou věc - podmínky.
Co to vlastně ta podmínka je? Je to takové jak to zní. Jestliže je podmínka splněna, vykoná se část kódu. Pokud není, tato část se nevykoná a přeskočí se na kód pod ní. Podmínek můžeme řetězit více za sebe.
Struktura podmínek v kódu Skriptu vypadá přibližně nějak takto:
if <podmínka>: #Podmínka, která musí být splněná pro spuštění nějaké části kódu else if <podmínka>: #Další podmínka která musí být splněna, jestliže není splněna první pro vykonání další části kódu else: #Jestliže podmínka není splněna # Pozor na odmezerování a dvojtečky, části podmínek (if, else...) musí být ve stejné úrovni a musí mít dvojtečky!
Můžeme si tímto vylepšit minulý home systém, tudíž příkaz se spustí pouze pokud je home nastaven. Jednoduše přidáme podmínku, aby byla proměnná home pro hráče nastavena, jinak vypíše chybovou zprávu.
command /sethome:
trigger:
set {domov.%player%} to location of player
send "&aDomov nastaven!" to player
command /home:
trigger:
if {domov.%player%} is set: #Jestliže je proměnná domova hráče nastavena, tak se vykoná kód pod tím
teleport player to {domov.%player%}
send "&aByl jsi teleportovan do sveho domova!" to player
else: #Pokud podmínka není splněná, vykoná se toto:
send "&cNemas nastaven domov! Nastav si ho pomoci /sethome!"
Pro jednoduché otestování můžeme vytvořit i příkaz /delhome, který nám home smaže
command /delhome:
trigger:
delete {domov.%player%} #Smažeme proměnnou
send "&aDomov smazan!" to player
Takto to vypadá s nastaveným home:

Takto s nenastaveným:

Jako podmínku můžeme položit i to, jestli má hráč nějakou permissi, např. u příkazu /setrespawnpoint
command /setrespawnpoint:
trigger:
if player has permission "plugin.setrespawnpoint": #Jesliže má hráč permissi "plugin.setrespawnpoint"...
set {respawnpoint} to location of player
send "&aRespawn point nastaven!" to player
else:
send "&cNemas prava na tento prikaz!"
on respawn: #Event - při respawnu hráče
if {respawnpoint} is set:
teleport player to {respawnpoint} #Teleportuje hráče na respawn point
Výsledek:

Argumenty příkazů
Dobrá tedy, když jsme se již naučili podmínky, tak pro nás bude dobré se naučit pracovat s argumenty příkazu.
Prvně si ale musíme položit otázku - co to je argument?
Argument je část příkazu, která jej nějak rozšiřuje. Argumenty jsou užitečné a velice hojně používané jak v klasických MC pluginech, tak i ve Skriptech.
Příklady využití
- Pro označení hráče v příkazu (např. /teleport <hráč>)
- Pro nastavení hodnoty (např. /hodnota 3, /zprava <zpráva>)
- Pro identifikaci části příkazu (např. /plugin help, /plugin about)
To bychom měli vysvětleno co to vlastně ten argument příkazu je, jak jej ale aplikovat přímo v kódu?
Je to velice jednoduché, stačí v kódu argument identifikovat:
command /prikaz <text>: #Jakýkoliv textový argument, pro hodnoty slovy např. command /prikaz <offline player>: #Pro určení hráče
Můžeme taktéž udělat to, že argumenty budou nepovinné:
command /prikaz [<text>]: command /prikaz [<offline player>]:
Základ máme vysvětlený, vytvoříme si první kód. Jako příklad
uvedeme jednoduchý teleport systém, jednoduše
/tp <hráč>.
Kód bude vypadat asi takto:
command /teleport <offline player>:
trigger:
if player has permission "plugin.teleport":
if arg-1 is online: #Jestliže uvedený v argumentu 1 je online...
teleport player to arg-1 #Teleportace hráče k hráči uvedenému v argumentu 1
send "&aTeleportuji..." to player
send "&b%player%&a se k tobe teleportoval!" to arg-1 #Odešleme zprávu argumentu 1
else:
send "&cHrac musi byt online!" to player
else:
send "&cNemas prava!" to player
Takto to vypadá z pohledu toho kdo se teleportuje:

A takto z pohledu toho, na koho se teleportoval:

Pomocí argumentů se však dá dělat plno věcí, které si budeme ukazovat i v dalších lekcích. Pomocí argumentu uděláme třeba i základní help příkaz pro náš skript.
Tady je ukázka toho, co já v základu pro své skripty dělám - help a about.
# Ukázka ze skriptu AlertSK
command /alertsk [<text>]: #Deklarace příkazu
trigger:
if player has permission "alertsk.commands": #Permisse
if arg-1 is "configinfo": #Pokud argument 1 je configinfo - příkaz tedy vypadá /alertsk configinfo
send "&cAlertSK Config info:"
send "&c"
send "&ePrefix: &f%{prefix}%"
send "&eNeed permission: &f%{needperm}%"
send "&ePermission node: &f%{permnode}%"
else if arg-1 is "config": #Pokud argument 1 je config - příkaz tedy vypadá /alertsk config
send "&cAlertSK Config info:"
send "&c"
send "&ePrefix: &f%{prefix}%"
send "&eNeed permission: &f%{needperm}%"
send "&ePermission node: &f%{permnode}%"
else if arg-1 is "about": #Pokud argument 1 je about - příkaz tedy vypadá /alertsk about
send "&cAlertSK"
send "&c"
send "&eSimple skript to send a global message to players!"
send "&a&l&nwww.205nd.tk"
send "&e(c)2017 205nd"
else if arg-1 is "help": #Pokud argument 1 je help - příkaz tedy vypadá /alertsk help
send "&cAlertSK Help:"
send "&c"
send "&eConfig info: &b/alertsk config"
send "&eAbout skript: &b/alertsk about"
send "&eHelp: &b/alertsk help"
send "&eSend alert message: &b/alert <text>"
else if arg-1 is "reload": #Pokud argument 1 je reload - příkaz tedy vypadá /alertsk reload
send "&cAlertSK Reloading..."
make player run cmd "/sk reload alertsk" as op
else: #Pokud argument 1 není nic co by se shodovalo s dostupnými argumenty
send "&cAlertSK - Help command: /alertsk help"
else:
send "&cNope."
To bude pro dnešní lekci Skriptu vše, většinu ukázaných kódu si můžete stáhnout zde: https://pastebin.com/J8zGhM2w
V příští lekci, Skript - Cykly, si ukážeme, co jsou to cykly a jak je používat.
