IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 4 - Skript - SkAddony - SkQuery

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

Skript - Minecraft modding bez Javy

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:

Skript - Minecraft modding bez Javy

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:

Skript - Minecraft modding bez Javy

Č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:

Skript - Minecraft modding bez Javy

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:

Skript - Minecraft modding bez Javy

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::*}
Skript - Minecraft modding bez Javy

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.


 

Předchozí článek
Skript - Cykly
Všechny články v sekci
Skript - Minecraft modding bez Javy
Přeskočit článek
(nedoporučujeme)
Skript - SkAddony - SkRayfall
Článek pro vás napsal 205nd
Avatar
Uživatelské hodnocení:
1 hlasů
Autor se věnuje primárně Skriptu, z menší části umí i HTML a naprosté základy PHP.
Aktivity