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.