Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

2. díl - Skript - podmínky a argumenty

Java Minecraft Modding Skript Skript - podmínky a argumenty

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

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:

Nastavený home v jazyce Skript

Takto s nenastaveným:

Nenastavený home v jazyce Skript

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:

Oprávnění setrespawnpoint v jazyce Skript

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:

Skript na teleport v jazyce Skriptu

A takto z pohledu toho, na koho se teleportoval:

Skript na teleport v jazyce Skriptu z pohledu hráče

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


 

 

Článek pro vás napsal 205nd
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Autor se věnuje primárně Skriptu, z menší části umí i HTML a naprosté základy PHP.
Miniatura
Všechny články v sekci
Skript - Minecraft modding bez Javy
Miniatura
Následující článek
Skript - Cykly
Aktivity (3)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!