Lekce 4 - Skript - SkAddony - SkQuery
V předchozí lekci, Skript - Cykly, jsme si ukázali, co jsou to cykly a jak je používat.

SkQuery je snad nejstarší Skript Addon, který existuje. Pokrývá většinu pokročilejších funkcí včetně MySQL, čtení informací z internetu nebo tvorby GUI. Dnes si alespoň nějaké jeho funkce ukážeme a vysvětlíme.
GUI - Menu
Jak jsem již psal na začátku, v SkQuery lze mimo jiné vytvořit i GUI. Je to klasické menu, které vytvoříme do určitého okna truhly. Může to být využito k mnoha účelům - zajímavé menu pro nápovědu, shop či pro volbu barvy nicku (způsobů využití je spousta). GUI se tvoří do virtuální truhly vytvořené a otevřené hráčovi Skriptem.
Nejdříve si je ale třeba uvědomit jak je očíslováno rozdělení truhly:

Na obrázku si můžeme všimnout, že se sloty číslují od nuly - nikoliv od jedničky (pozor na to). Počet dostupných slotů se samozřejmě mění podle toho, kolik řádků hráči vytvoříme. Například, když vytvoříme pouze 3 řádky, můžeme použít číslování pouze 0-26. Pokud ovšem vytvoříme 5 řádků, můžeme použít rozsah 0-45.
Virtuální truhlu hráči otevřeme tímto kódem:
open chest with 5 rows named "Testovací menu" to player #Otevřeme hráči menu s pěti řádky a názvem "Testovací menu"
Formátování
Dobrá, nyní samotné formátování. Existují různé způsoby jak itemy naformátovat:
- to be unstealable - Prostě bude uvnitř, nepůjde dát pryč, bude třeba informačního charakteru pomocí názvu a lore
- to close - Po kliknutí se GUI zavře - zde mě napadá pouze pro tlačítko exit
- to run (případně to close then run) - Po kliknutí se z konzole vykoná určitý příkaz (při použití varianty s to close then run se GUI po kliknutí zavře a vykoná příkaz z konzole
Control panel
My si nyní naprogramujeme jednoduchý control panel:
command /controlpanel: trigger: open chest with 5 rows named "&a&lControl panel" to player #Otevřeme virtuální truhlu wait 10 ticks format slot 13 of player with compass named "&a&lNápověda" with lore "&eTady se dozvíš vše důležité!" to be unstealable #Naformátujeme slot 13 itemem "compass" s názvem a lorem, který si nastavíme format slot 29 of player with clock named "&e&lDen" with lore "&eKliknutím na tento item nastavíš den!" to close then run "time set day" #Naformátujeme slot 29 itemem "clock" s názvem a lorem, který si nastavíme format slot 31 of player with water bucket named "&6&lSucho &0&l/ &1&lDéšť" with lore "&eKliknutím zrušíš nebo zapneš déšť!" to close then run "toggledownfall" #Naformátujeme slot 31 itemem "water bucket" s názvem a lorem, který si nastavíme format slot 33 of player with anvil named "&7&lObtížnost" with lore "&eKliknutím nastavíš obtížnost hry na mírumilovnou!" to close then run "difficulty peaceful" #Naformátujeme slot 33 itemem "anvil" s názvem a lorem, který si nastavíme
Výsledek vypadá nějak takto:

Čtení informací z internetu
Výborné například pro upozornění na updaty. Když se změní verze, tak hráče s určitou permissí upozorní, že program není aktuální.
Tedy, na jakémkoliv hostingu (klidně i na githubu) si vytvoříme soubor verze.md, do kterého napíšeme "1.0". Získáme k němu link a nyní se již můžeme vrhnout na samotné psaní kódu:
options: version: 1.0 on join: #Event - při připojení if player has permission "plugin.notify": #Kontrola jestli má hráč permissi na zobrazení notifikací message "&6Kontrola updatů..." to player if text from "http://www.mclabs.tk/205nd/verze.md" is not "{@version}": #Jestliže text z našeho souboru se neshoduje s verzí... wait 40 ticks message "&4&lMáte zastaralou verzi! Aktualizujte si ji z: *link*" to player else: wait 40 ticks message "&2&lMáte nejnovější verzi!" to player
Výsledek vypadá nějak takto:

MySQL
No a také jak jsme si již zmiňovali na začátku, SkQuery umožňuje i práci s MySQL databází. To se velmi hodí, pokud např. vytváříte auth skript či skript na herní statistiky - v mnoha případech se vám zkrátka bude databáze hodit. K implementování do skriptu budete muset umět alespoň základy SQL dotazů, jelikož Skript bude vlastně pouze posílat dotazy, které vy předdefinujete. Na to vám já příliš neposloužím, spíš vám doporučuji se kouknout na návody SQL zde na síti.
Nejdříve ze všeho musíme skript připojit k databázi. To uděláme tak, že na jeho začátku vložíme tuto část kódu:
script options: $ db url jdbc:mysql://<adresa k mysql databázi>:<port>/<název databáze> $ db username <uživatelské jméno> $ db password <heslo>
Updaty v databázi provádíme pomocí kódu "update":
update "SQL DOTAZ"
Nyní si vytvoříme jednoduchý příkaz /senddb <text>
,
který odešle do naší databáze datum odeslání, hráče, který data
odeslal, a text v argumentu:
script options: $ db url jdbc:mysql://sql11.freemysqlhosting.net:3306/sql11200159 $ db username sql11200159 $ db password vaseheslo on load: #Při loadu... update "CREATE TABLE IF NOT EXISTS `sql11200159`.`itnetworktut` ( `Datum` TEXT NOT NULL , `Hodnota` TEXT NOT NULL , `Hrac` TEXT NOT NULL ) ENGINE = MyISAM;" #Pokud naše tabulka neexistuje, necháme si ji vytvořit command /senddb [<text>]: trigger: if arg-1 is not set: send "Musis nastavit argument prikazu!" else: update "INSERT INTO `sql11200159`.`itnetworktut` (`Datum`, `Hodnota`, `Hrac`) VALUES ('%now%', '%arg-1%', '%player%');" #Vložíme do tabulky čas, hodnotu v argumentu a hráče
Když se posléze podíváme do databáze přes phpMyAdmin, měli bychom vidět výsledky:

Pro úplnost můžeme doplnit i příkaz /ukazdb
, který nám
hodnoty z databáze vypíše do chatu:
command /ukazdb: trigger: set {hodnoty::*} to objects in column "hodnota" from result of query "SELECT * FROM `itnetworktut`" #nastavíme proměnnou {hodnoty::*} na hodnoty z databáze send "%{hodnoty::*}%" clear {hodnoty::*}

Se SkQuery lze ovšem dělat i spousta dalších věcí, jejich kompletní výpis můžete najít například na SkUnity Docs.
SkQuery stáhnete "zde": http://beta.mclabs.eu/skquery.jar
Kódy z dnešní lekce naleznete zde: https://pastebin.com/8WuNfxss
V příští lekci, Skript - SkAddony - SkRayfall, si ukážeme SkAddon, který nám přidá primárně grafické vylepšení hry.