4. diel - Skript - SkAddony - SkQuery
SkQuery je snáď najstaršie Skript Addon, ktorý existuje. Pokrýva väčšinu pokročilejších funkcií vrátane MySQL, čítanie informácií z internetu alebo tvorby GUI. Dnes si aspoň nejaké jeho funkcie ukážeme a vysvetlíme.
Gui - Menu
Ako som už písal na začiatku, v SkQuery možno okrem iného vytvoriť i GUI. Je to klasické menu, ktoré vytvoríme do určitého okna truhly. Môže to byť využité na mnohé účely - zaujímavé menu pre nápovedu, shop či pre voľbu farby nicku (spôsobov využitia je veľa). GUI sa tvoria do virtuálnej truhly vytvorenej a otvorené hráčovi Skriptom.
Najskôr si je ale treba uvedomiť ako ich očíslované rozdelenie truhly:
Na obrázku si môžeme všimnúť, že sa sloty číslujú od nuly - nie od jednotky (pozor na to). Počet dostupných slotov sa samozrejme mení podľa toho, koľko riadkov hráči vytvoríme. Napríklad, keď vytvoríme iba 3 riadky, môžeme použiť číslovanie iba 0-26. Ak však vytvoríme 5 riadkov, môžeme použiť rozsah 0-45.
Virtuálne truhlu hráči otvoríme týmto kódom:
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átovanie
Dobrá, teraz samotnej formátovanie. Existujú rôzne spôsoby ako itemy naformátovať:
- to be unstealable - Proste bude vo vnútri, nepôjde dať preč, bude treba informačného charakteru pomocou názvu a lore
- to close - Po kliknutí sa GUI zavrie - tu ma napadá len pre tlačidlo exit
- to run (prípadne to close then run) - Po kliknutí sa z konzoly vykoná určitý príkaz (pri použití variantu s to close then run sa GUI po kliknutí zavrie a vykoná príkaz z konzoly
Control panel
My si teraz 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ýsledok vyzerá nejako takto:
Čítanie informácií z internetu
Výborné napríklad pre upozornenie na updaty. Keď sa zmení verzia, tak hráča s určitou Permissi upozorní, že program nie je aktuálne.
Teda, na akomkoľvek hostingu (pokojne aj na GitHub) si vytvoríme súbor verze.md, do ktorého napíšeme "1.0". Získame k nemu link a teraz sa už môžeme vrhnúť na samotné písanie 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ýsledok vyzerá nejako takto:
MySQL
No a tiež ako sme si už spomínali na začiatku, SkQuery umožňuje aj prácu s MySQL databázou. To sa veľmi hodí, pokiaľ napr. Vytvárate auth skript či skript na herné štatistiky - v mnohých prípadoch sa vám skrátka bude databázy hodiť. K implementovanie do skriptu budete musieť vedieť aspoň základy SQL dotazov, pretože Skript bude vlastne iba posielať otázky, ktoré vy Preddefinuje-. Na to vám ja príliš neposloužím, skôr vám odporúčam sa pozrieť na návody SQL tu na sieti.
Najskôr zo všetkého musíme skript pripojiť k databáze. To urobíme tak, že na jeho začiatku vložíme túto časť 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áze vykonávame pomocou kódu "update":
update "SQL DOTAZ"
Teraz si vytvoríme jednoduchý príkaz /senddb <text>
,
ktorý odošle do našej databázy dátum odoslania, hráča, ktorý dáta
odoslal, 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
Keď sa neskôr pozrieme do databázy cez phpMyAdmin, mali by sme vidieť výsledky:
Pre úplnosť môžeme doplniť aj príkaz /ukazdb
, ktorý nám
hodnoty z databázy 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::*}
So SkQuery možno ale robiť aj veľa ďalších vecí, ich kompletný výpis môžete nájsť napríklad na SkUnity Docs.
SkQuery stiahnete "tu": http://beta.mclabs.eu/skquery.jar
Kódy z dnešnej lekcie nájdete tu: https://pastebin.com/8WuNfxss